删除消息
单聊会话、群聊会话的参与者可删除会话中的消息。IMKit 会话页面默认已实现了长按删除消息的功能,支持仅删除单条本地消息,或同步删除本地和远端的单条消息。
您可以修改 IMKit 会话页面长按消息菜单中删除按钮的行为,详见会话页面。如果 IMKit 的已有实现无法满足您的需求,可以直接使用 IMKit SDK 提供的删除消息接口,会同时触发会话列表和会话页面的刷新。
提示
- App 用户的单聊会话、群聊会话、系统会话的消息默认仅存储在本地数据库中,仅支持从本地删除。如果 App(App Key/环境)已开通单群聊消息云端存储,该用户的消息还会保存在融云服务端(默认 6 个月),可从远端历史消息记录中删除消息。
- 针对单聊会话、群聊会话,如果通过任何接口以传入时间戳的方式删除远端消息,服务端默认不会删除对应的离线消息补偿(该机制仅会在打开多设备消息同步开关后生效)。此时如果换设备登录或卸载重装,仍会因为消息补偿机制获取到已被删除的历史消息。如需彻底删除消息补偿,请提交工单,申请开通删除服务端历史消息时同时删除多端补偿的离线消息。如果以传入消息对象的方式删除远端消息,则服务端会同时删除消息补偿中的对应消息。
同时删除本地与远端消息
使用以下接口可以同时删除本地数据库和服务端消息:
- 使用
deleteMessages方法,并将是否删除远端消息的参数(cleanRemote)置为true。详见「删除本地消息」下的通过时间戳删除。 - 使用
deleteRemoteMessages方法,详见「删除服务端消息」下的 通过消息删除。
删除本地消息
消息送达后会直接存入本地数据库,您可以调用接口从本地数据库中删除消息。删除消息同时触发会话列表和会话页面的刷新。
提示
如果已经开通单群聊消息云端存储服务,从本地删除消息对服务端存储的历史消息无影响,客户端仍然可以从服务端拉取到本地已删除的历史消息。
如果希望仅删除本地消息,可使用 IMKit SDK 提供的以下能力:
- 通过指定消息 ID 等参数,删除指定单个会话在本地的消息记录中的一条或一组消息。
- 通过指定会话 ID 等参数,删除指定单个会话在本地的所有消息。
- 通过时间戳、会话 ID 等参数,删除指定单个会话在本地消息记录中早于指定时间点的消息。注意:通过时间戳删除消息的接口提供一个删除远端消息的开关(
cleanRemote),支持同时删除服务端的历史消息。
通过消息 ID 删除
使用 IMCenter 的 deleteMessages 方法可通过消息 ID 删除指定会话在本地消息数据中的一条或一组消息,删除成功后会刷新会话和会话列表页面。请确保所提供的消息 ID 均属于同一会话。
接口
Java
IMCenter.getInstance().deleteMessages(conversationType, targetId, messageIds,callback);