删除消息
单聊会话、群聊会话的参与者可删除会话中的消息。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;
}
// 批量删除消息成功
})
参数 | 类型 | 说明 |
---|---|---|
conId | ConversationIdentifier | 会话标识 |
messages | Message[] | 消息对象数组 |
remoteDelete | boolean | 是否删除远端 |
通过会话删除
使用 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;
}
// 删除指定单个会话消息成功
})
参数 | 类型 | 说明 |
---|---|---|
conId | ConversationIdentifier | 会话标识 |
messages | Message[] | 消息对象数组 |
remoteDelete | boolean | 是否删除远端 |
仅删除本地消息
如果希望仅删除本地消息,通过消息对象删除消息 与 通过会话删除的 remoteDelete
参数传 false
即可。
仅删除服务端消息
IMKit 没有仅删除服务端消息接口,可以参照 IMLib 删除消息提供的 cleanRemoteHistoryMessagesByTime
与 deleteRemoteMessages
。