You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Android Studio项目中实现Mesibo已读消息7天自动删除?

在Android项目中实现Mesibo已读消息7天后自动删除

完全可以通过代码实现这个需求,核心思路是跟踪消息已读时间,定时检查并调用Mesibo接口删除过期消息,具体步骤如下:

1. 记录消息的已读时间

利用Mesibo的消息状态回调,在消息被标记为已读时,把消息ID(mid)和已读时间戳存入本地数据库(推荐用Room,方便批量查询和管理)。

示例代码:

Mesibo.addListener(new Mesibo.MessageListener() {
    @Override
    public void onMessageStatus(Mesibo.Message message, int status) {
        if (status == Mesibo.STATUS_READ) {
            // 将已读消息记录存入Room数据库
            MessageReadRecord record = new MessageReadRecord(message.mid, System.currentTimeMillis());
            messageReadDao.insert(record);
        }
    }

    // 其他必要的回调方法按需实现
});

2. 定时执行过期消息清理

使用Android的WorkManager实现每日定时任务,检查数据库中已读时间超过7天的消息,调用Mesibo的删除接口移除这些消息。

定义清理Worker

public class ExpiredMessageCleanupWorker extends Worker {
    // 7天对应的毫秒数
    private static final long SEVEN_DAYS_MILLIS = 7 * 24 * 60 * 60 * 1000L;

    public ExpiredMessageCleanupWorker(@NonNull Context context, @NonNull WorkerParameters params) {
        super(context, params);
    }

    @NonNull
    @Override
    public Result doWork() {
        long currentTime = System.currentTimeMillis();
        // 查询已读时间早于7天前的消息记录
        List<MessageReadRecord> expiredRecords = messageReadDao.getExpiredRecords(currentTime - SEVEN_DAYS_MILLIS);

        for (MessageReadRecord record : expiredRecords) {
            // 删除消息:true表示同时删除云端消息,按需调整
            Mesibo.deleteMessage(record.getMid(), true);
            // 从本地数据库移除已处理的记录
            messageReadDao.delete(record);
        }
        return Result.success();
    }
}

启动定时任务

在App初始化时(比如Application的onCreate方法)配置每日执行的清理任务:

PeriodicWorkRequest cleanupTask = new PeriodicWorkRequest.Builder(
        ExpiredMessageCleanupWorker.class,
        1, TimeUnit.DAYS)
        .build();

WorkManager.getInstance(getApplicationContext())
        .enqueueUniquePeriodicWork(
                "mesibo_message_cleanup",
                ExistingPeriodicWorkPolicy.KEEP,
                cleanupTask);

3. 补录历史已读消息

如果应用已有历史已读消息,需要先批量获取并记录它们的已读时间:

Mesibo.getMessages(new Mesibo.MessageParams(), new Mesibo.MessageListener() {
    @Override
    public boolean onMessage(Mesibo.Message message) {
        if (message.status == Mesibo.STATUS_READ) {
            // 优先用Mesibo提供的已读时间,没有则用消息时间
            long readTime = message.readTs != 0 ? message.readTs : message.ts;
            MessageReadRecord record = new MessageReadRecord(message.mid, readTime);
            messageReadDao.insert(record);
        }
        return true; // 继续加载更多历史消息
    }

    // 其他回调方法按需实现
});

关键注意点

  • Mesibo.deleteMessage的第二个参数deleteOnServer设为true时会同步删除云端消息,若只需删除本地消息可设为false。
  • Room数据库操作和WorkManager任务都在后台线程执行,无需额外处理线程切换。
  • 即使App被强制关闭,WorkManager会在下次App启动时自动恢复未完成的清理任务。

内容的提问来源于stack exchange,提问作者Gigi Dunga

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 23:40:25