跳到主要内容

删除消息

单聊会话、群聊会话的参与者可删除会话中的消息。IMKit 会话页面默认已实现了长按删除消息的功能,支持仅删除单条本地消息,或同步删除本地和远端的单条消息。

您可以修改 IMKit 会话页面长按消息菜单中删除按钮的行为,详见会话页面。如果 IMKit 的已有实现无法满足您的需求,可以直接使用 IMKit SDK 提供的删除消息接口。调用 IMKit 的删除 API 会同时触发会话列表和会话页面的刷新。

提示
  • App 用户的单聊会话、群聊会话、系统会话的消息默认仅存储在本地数据库中,仅支持从本地删除。如果 App(App Key/环境)已开通单群聊消息云端存储,该用户的消息还会保存在融云服务端(默认 6 个月),可从远端历史消息记录中删除消息。
  • 针对单聊会话、群聊会话,如果通过任何接口以传入时间戳的方式删除远端消息,服务端默认不会删除对应的离线消息补偿(该机制仅会在打开多设备消息同步开关后生效)。此时如果换设备登录或卸载重装,仍会因为消息补偿机制获取到已被删除的历史消息。如需彻底删除消息补偿,请提交工单,申请开通删除服务端历史消息时同时删除多端补偿的离线消息。如果以传入消息对象的方式删除远端消息,则服务端一定会删除消息补偿中的对应消息。

同时删除本地与远端消息

IMKit 提供了删除本地数据库消息 + 服务端消息的接口:通过消息对象删除消息通过会话删除。两个接口均提供了是否删除远端消息参数 (remoteDelete),设置为 true 则会删除远端消息:

通过消息对象删除消息

使用 RongIM 的以下方法可通过消息对象 删除指定会话在本地消息数据中的一条或一组消息,删除成功后会刷新会话和会话列表页面。请确保所提供的消息 ID 均属于同一会话。

  • 仅删除本地消息,remoteDelete 参数设置为 false
  • 删除本地 + 远端消息,remoteDelete 参数设置为 true
let conId = new ConversationIdentifier();
conId.conversationType = ConversationType.Private;
conId.targetId = "会话 ID";

let messages: Message[] = [];
for (let i = 0; i < 10; i++) {
// msg 必须是发送成功的消息,此处进行简写
let msg : Message;
messages.push(msg);
}

// 是否删除远端
let remoteDelete = true;

RongIM.getInstance().messageService().batchDeleteMessage(conId, messages, remoteDelete).then(result => {
if (EngineError.Success !== result.code) {
// 批量删除消息失败
return;
}
// 批量删除消息成功
})
参数类型说明
conIdConversationIdentifier会话标识
messagesMessage[]消息对象数组
remoteDeleteboolean是否删除远端

通过会话删除

使用 RongIM 的以下方法可删除指定单个会话在本地数据库中的全部消息。删除成功后会刷新会话和会话列表页面。

  • 仅删除本地消息,remoteDelete 参数设置为 false
  • 删除本地 + 远端消息,remoteDelete 参数设置为 true
let conId = new ConversationIdentifier();
conId.conversationType = ConversationType.Private;
conId.targetId = "会话 ID";

// 是否删除远端
let remoteDelete = true;

RongIM.getInstance().messageService().deleteConversationMessages(conId, remoteDelete).then(result => {
if (EngineError.Success !== result.code) {
// 删除指定单个会话消息失败
return;
}
// 删除指定单个会话消息成功
})
参数类型说明
conIdConversationIdentifier会话标识
messagesMessage[]消息对象数组
remoteDeleteboolean是否删除远端

仅删除本地消息

如果希望仅删除本地消息,通过消息对象删除消息通过会话删除remoteDelete 参数传 false 即可。

仅删除服务端消息

IMKit 没有仅删除服务端消息接口,可以参照 IMLib 删除消息提供的 cleanRemoteHistoryMessagesByTimedeleteRemoteMessages