删除消息
单聊会话、群聊会话的参与者可删除会话中的消息。您可以删除指定的一条或一组消息,删除某个会话的全部消息历史,或删除会话中早于指定时间点的消息。
消息送达后会直接存入本地数据库,您可以调用接口从本地数据库中删除消息。消息仅从本地数据库中删除,保存在服务端的消息将不受影响。如果您已经开通历史消息云存储服务,仍然可以从服务端拉取到历史消息 。
提示
- App 用户的单聊会话、群聊会话、系统会话的消息默认仅存储在本地数据库中,仅支持从本地删除。如果 App(App Key/环境)已开通单群聊消息云端存储,该用户的消息还会保存在融云服务端(默认 6 个月),可从远端历史消息记录中删除消息。
- 针对单聊会话、群聊会话,如果通过任何接口以传入时间戳的方式删除远端消息,服务端默认不会删除对应的离线消息补偿(该机制仅会在打开多设备消息同步开关后生效)。此时如果换设备登录或卸载重装,仍会因为消息补偿机制获取到已被删除的历史消息。如需彻底删除消息补偿,请提交工单,申请开通删除服务端历史消息时同时删除多端补偿的离线消息。如果以传入消息对象的方式删除远端消息,则服务端一定 会删除消息补偿中的对应消息。
- 针对单聊会话、群聊会话,如果 App 的管理员或者某普通用户希望在所有会话参与者的历史记录中彻底删除一条消息,应使用撤回消息功能。消息成功撤回后,原始消息内容会在所有用户的本地与服务端历史消息记录中删除。
- 客户端 SDK 不提供删除聊天室消息的接口。当前用户的聊天室本地消息在退出聊天室时会被自动删除。开通聊天室消息云端存储服务后,如需清除全部用户的聊天室历史消息,可使用服务端 API 清除消息。
删除指定消息集合
您可以从本地数据库中删除指定的一条或一组消息。这种方式仅需要提供待删除消息 ID 数组,不区分会话类型。
方法
Future<int> deleteLocalMessages(List<RCIMIWMessage> messages, {IRCIMIWDeleteLocalMessagesCallback? callback});
参数说明
参数名 | 参数类型 | 描述 |
---|---|---|
messages | List<RCIMIWMessage> | 消息集合 |
callback | IRCIMIWDeleteLocalMessagesCallback | 事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 |
返回值
返回值 | 描述 |
---|---|
Future<int> | 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 |
代码示例
IRCIMIWDeleteLocalMessagesCallback? callback = IRCIMIWDeleteLocalMessagesCallback(onLocalMessagesDeleted: (int? code, List<RCIMIWMessage>? messages) {
//...
});
int? ret = await engine?.deleteLocalMessages(messages, callback:callback);
回调方法
- onLocalMessagesDeleted
Function(int? code, List<RCIMIWMessage>? messages)? onLocalMessagesDeleted;
参数说明
参数名 | 参数类型 | 描述 |
---|---|---|
code | int | 接口回调的状态码,0 代表成功,非 0 代表出现异常 |
messages | List<RCIMIWMessage> | 删除的消息集合 |
代码示例
engine?.onLocalMessagesDeleted = (int? code, List<RCIMIWMessage>? messages) {
//...
};
删除某个会话的指定消息集合
此方法会将本地和远端的消息一起进行删除
提示
只有已开通单群聊消息云存储服务的应用才可以操作。您可以前往控制台开通服务。
方法
Future<int> deleteMessages(RCIMIWConversationType type, String targetId, String? channelId, List<RCIMIWMessage> messages, {IRCIMIWDeleteMessagesCallback? callback});
参数说明
参数名 | 参数类型 | 描述 |
---|---|---|
type | RCIMIWConversationType | 会话类型 |
targetId | String | 会话 ID |
channelId | String | 频道 ID,仅支持超级群使用,其他会话类型传 null 即可。 |
messages | List<RCIMIWMessage> | 消息集合 |
callback | IRCIMIWDeleteMessagesCallback | 事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 |
返回值
返回值 | 描述 |
---|---|
Future<int> | 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 |
代码示例
IRCIMIWDeleteMessagesCallback? callback = IRCIMIWDeleteMessagesCallback(onMessagesDeleted: (int? code, List<RCIMIWMessage>? messages) {
//...
});
int? ret = await engine?.deleteMessages(type, targetId, channelId, messages, callback:callback);
回调方法
-
onMessagesDeleted
接口调用结果的监听
Function(int? code, RCIMIWConversationType? type, String? targetId, String? channelId, List<RCIMIWMessage>? messages)? onMessagesDeleted;
参数说明
参数名 | 参数类型 | 描述 |
---|---|---|
code | int | 接口回调的状态码,0 代表成功,非 0 代表出现异常 |
type | RCIMIWConversationType | 会话类型 |
targetId | String | 会话 ID |
channelId | String | 频道 ID,仅支持超级群使用,其他会话类型传 null 即可。 |
messages | List<RCIMIWMessage> | 删除的消息集合 |
代码示例
engine?.onMessagesDeleted = (int? code, RCIMIWConversationType? type, String? targetId, String? channelId, List<RCIMIWMessage>? messages) {
//...
};
通过时间戳清除某个会话的消息
提示
当删除远端消息时,只有已开通单群聊消息云存储服务的应用才可以操作。您可以前往控制台开通服务。
方法
Future<int> clearMessages(RCIMIWConversationType type, String targetId, String? channelId, int timestamp, RCIMIWMessageOperationPolicy policy, {IRCIMIWClearMessagesCallback? callback});
参数说明
参数名 | 参数类型 | 描述 |
---|---|---|
type | RCIMIWConversationType | 会话类型 |
targetId | String | 会话 ID |
channelId | String | 频道 ID,仅支持超级群使用,其他会话类型传 null 即可。 |
timestamp | int | 清除消息截止时间戳,recordTime大于等于 0,且小于等于当前会话最后一条消息的 sentTime, 0 清除所有消息,其他值清除小于等于 recordTime 的消息 |
policy | RCIMIWMessageOperationPolicy | 清除的策略 |
callback | IRCIMIWClearMessagesCallback | 事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 |
返回值
返回值 | 描述 |
---|---|
Future<int> | 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 |
代码示例
IRCIMIWClearMessagesCallback? callback = IRCIMIWClearMessagesCallback(onMessagesCleared: (int? code) {
//...
});
int? ret = await engine?.clearMessages(type, targetId, channelId, timestamp, policy, callback:callback);
回调方法
-
onMessagesCleared
接口调用结果的监听
Function(int? code, RCIMIWConversationType? type, String? targetId, String? channelId, int? timestamp)? onMessagesCleared;