删除消息
大约 2 分钟
Flutter 集成文档
删除消息
本文介绍用户如何单向删除服务端和本地的历史消息。
技术原理
使用即时通讯 IM Flutter SDK 可以通过 ChatManager
类单向删除服务端和本地的历史消息,主要方法如下:
ChatManager#deleteAllMessageAndConversation
:清空当前用户的聊天记录,包括单聊、群聊和聊天室的消息和会话,同时可以选择是否单向清除服务端的聊天记录。ChatManager#deleteRemoteMessagesBefore
/ChatManager#deleteRemoteMessagesWithIds
:根据消息时间或消息 ID 单向删除服务端的历史消息。Conversation#deleteAllMessages
:删除本地指定会话的所有消息。Conversation#deleteMessagesWithTs
:删除指定时间段的本地消息。Conversation#deleteMessage
:删除本地会话的指定消息。
前提条件
开始前,请确保满足以下条件:
实现方法
清空聊天记录
你可以调用 ChatManager#deleteAllMessageAndConversation
方法清空当前用户的聊天记录,包括单聊、群组聊天和聊天室的消息和会话。同时你也可以选择是否清除服务端的聊天记录。若你清除了服务端的聊天记录,你无法从服务端拉取到会话和消息,而其他用户不受影响。
try {
await ChatClient.getInstance.chatManager.deleteAllMessageAndConversation(clearServerData: true);
} on ChatError catch (e) {
debugPrint("deleteAllMessageAndConversation error: ${e.code}, ${e.description}");
}
单向删除服务端的历史消息
你可以调用 deleteRemoteMessagesBefore
或 deleteRemoteMessagesWithIds
方法按照消息时间或消息 ID 删除你在服务器和本地的消息。删除后,该用户无法从服务端拉取到该消息,不过,与该用户的单聊、群聊和聊天室会话中的其它用户的服务器消息不受影响,可以漫游获取。
每次最多可删除 50 条消息。多设备情况下,登录该账号的其他设备会收到 MultiDeviceEventHandler
中的 onRemoteMessagesRemoved
回调,已删除的消息自动从设备本地移除。
try {
await ChatClient.getInstance.chatManager.deleteRemoteMessagesBefore(
conversationId: conversationId,
type: convType,
timestamp: timestamp,
);
} on ChatError catch (e) {}
try {
await ChatClient.getInstance.chatManager.deleteRemoteMessagesWithIds(
conversationId: conversationId,
type: convType,
msgIds: msgIds,
);
} on ChatError catch (e) {}
删除本地指定会话的所有消息
你可以删除本地指定会话的所有消息,示例代码如下:
ChatConversation? conversation = await ChatClient.getInstance.chatManager
.getConversation(conversationId);
await conversation?.deleteAllMessages();
删除本地会话指定时间段的消息
你可以删除本地指定会话在一段时间内的本地消息,示例代码如下:
ChatConversation? conversation = await ChatClient.getInstance.chatManager
.getConversation(conversationId);
await conversation?.deleteMessagesWithTs(startTs, endTs);
删除本地会话的指定消息
你可以删除本地会话的指定消息,示例代码如下:
ChatConversation? conversation = await ChatClient.getInstance.chatManager
.getConversation(conversationId);
await conversation?.deleteMessage(messageId);