跳到主要内容

删除消息

针对单聊会话、群聊会话、系统会话,融云支持 App 用户通过客户端 SDK 删除自己的历史消息,支持仅从本地数据库删除消息、仅从融云服务端删除自己的历史消息、或从两处同时删除。

SDK 的删除消息操作(下表中的 API)均指从当前登录用户的历史消息记录中删除一条或一组消息,不影响会话中其他用户的历史消息记录。

功能本地/服务端API
仅从本地删除指定消息(消息 ID)仅从本地删除(重载方法)deleteMessages
仅从本地删除会话全部历史消息仅从本地删除(重载方法)deleteMessages
删除会话内指定消息(消息对象)同时从本地和服务端删除消息deleteRemoteMessages
删除会话历史消息(时间戳)可选仅本地删除、或者同时从本地和服务端删除消息cleanHistoryMessages
仅从服务端删除会话历史消息(时间戳)仅从服务端删除cleanRemoteHistoryMessages
提示
  • App 用户的单聊会话、群聊会话、系统会话的消息默认仅存储在本地数据库中,仅支持从本地删除。如果 App(App Key/环境)已开通单群聊消息云端存储,该用户的消息还会保存在融云服务端(默认 6 个月),可从远端历史消息记录中删除消息。
  • 针对单聊会话、群聊会话,如果通过任何接口以传入时间戳的方式删除远端消息,服务端默认不会删除对应的离线消息补偿(该机制仅会在打开多设备消息同步开关后生效)。此时如果换设备登录或卸载重装,仍会因为消息补偿机制获取到已被删除的历史消息。如需彻底删除消息补偿,请提交工单,申请开通删除服务端历史消息时同时删除多端补偿的离线消息。如果以传入消息对象的方式删除远端消息,则服务端一定会删除消息补偿中的对应消息。
  • 针对单聊会话、群聊会话,如果 App 的管理员或者某普通用户希望在所有会话参与者的历史记录中彻底删除一条消息,应使用撤回消息功能。消息成功撤回后,原始消息内容会在所有用户的本地与服务端历史消息记录中删除。
  • 客户端 SDK 不提供删除聊天室消息的接口。当前用户的聊天室本地消息在退出聊天室时会被自动删除。开通聊天室消息云端存储服务后,如需清除全部用户的聊天室历史消息,可使用服务端 API 清除消息
  • 客户端 SDK 提供删除超级群会话的消息的 API,详见「超级群管理」下的删除消息

仅从本地删除指定消息(消息 ID)

App 用户可以按消息 ID 删除存储在本地数据库内的消息。待删除消息可以属于不同会话。一次最多删除 100 条消息。

如果 App 已经开通单群聊历史消息云存储服务,服务端保存的该用户的历史消息记录不受影响。如果该用户从服务端获取历史消息,可能会获取到在本地已删除的消息。

int[] messageIds = {12, 13};
RongCoreClient.getInstance().deleteMessages(messageIds, new IRongCoreCallback.ResultCallback<Boolean>() {
/**
* 删除消息成功回调
*/
@Override
public void onSuccess(Boolean bool) {

}
/**
* 删除消息失败回调
* @param errorCode 错误码
*/
@Override
public void onError(IRongCoreEnum.CoreErrorCode coreErrorCode) {

}
});

删除时需要提供待删除消息 ID 数组。

参数类型说明
messageIdsint[]消息的 ID 数组。详见消息介绍中的 MessageId 属性。
callbackIRongCoreCallback.ResultCallback<Boolean>接口回调

仅从本地删除会话全部历史消息

App 用户可能希望在设备本地清空自己的单聊、群聊或系统会话的历史记录,可以删除指定会话保存在本地数据库中的全部消息。

如果 App 已经开通单群聊历史消息云存储服务,服务端保存的该用户的历史消息记录不受影响。如果该用户从服务端获取历史消息,可能会获取到在本地已删除的消息。

ConversationType conversationType = ConversationType.PRIVATE;
String targetId = "会话 Id";

RongCoreClient.getInstance().deleteMessages(conversationType, targetId, new IRongCoreCallback.ResultCallback<Boolean>() {
/**
* 删除消息成功回调
*/
@Override
public void onSuccess(Boolean bool) {

}
/**
* 删除消息失败回调
* @param errorCode 错误码
*/
@Override
public void onError(IRongCoreEnum.CoreErrorCode coreErrorCode) {

}
});

该接口一次仅允许删除指定的单个会话的消息。会话由会话类型和会话 ID 参数指定。

参数类型说明
conversationTypeConversationType会话类型
targetIdString会话 ID
callbackIRongCoreCallback.ResultCallback<Boolean>接口回调

删除会话内指定消息(消息对象)

提示

如果 App 已经开通单群聊历史消息云存储服务,您可以调用以下接口删除 App 用户在融云服务端的历史消息记录。该接口同时从本地和服务端删除消息。

如果 App 用户希望从自己的单聊、群聊或系统会话的历史记录中彻底删除一条消息,可以使用 deleteRemoteMessages 从本地和服务端同时删除消息。删除成功后,该用户无法从本地数据库获取消息。如果从服务端获取历史消息,也无法获取到已删除的消息。

该接口允许一次删除指定的单个会话内的一条或一组消息。请确保所提供的消息均属于同一会话(由会话类型和会话 ID 指定)。一次最多删除 100 条消息。

ConversationType conversationType = ConversationType.PRIVATE;
String targetId = "会话 Id";
Message[] messages = {message1, message2};

RongCoreClient.getInstance().deleteRemoteMessages(conversationType, targetId, messages, new IRongCoreCallback.OperationCallback() {
/**
* 删除消息成功回调
*/
@Override
public void onSuccess() {

}
/**
* 删除消息失败回调
* @param errorCode 错误码
*/
@Override
public void onError(IRongCoreEnum.CoreErrorCode coreErrorCode) {

}
});
参数类型说明
conversationTypeConversationType会话类型。不支持聊天室。
targetIdString会话 ID
messagesMessage[]要删除的消息对象 Message 数组。请确保所提供的消息均属于同一会话。
callbackIRongCoreCallback.ResultCallback<Boolean>接口回调

删除会话历史消息(时间戳)

提示

该如果 App 已经开通单群聊历史消息云存储服务,您可以调用以下接口并通过参数指定需要同时删除 App 用户在融云服务端的历史消息记录。

如果 App 用户希望从自己的单聊、群聊或系统会话的历史记录中删除一段历史消息记录,可以使用 cleanHistoryMessages 删除会话中早于某个时间点(recordTime)的消息。cleanRemote 参数控制是否同时删除服务端对应的历史消息。

ConversationType conversationType = ConversationType.PRIVATE;
String targetId = "会话 Id";
String recordTime = 0;
Boolean cleanRemote = true; // 同时从服务端删除对应的消息历史记录

RongCoreClient.getInstance().cleanHistoryMessages(conversationType, targetId, recordTime, cleanRemote,
new IRongCoreCallback.OperationCallback() {
/**
* 删除消息成功回调
*/
@Override
public void onSuccess() {

}
/**
* 删除消息失败回调
* @param errorCode 错误码
*/
@Override
public void onError(IRongCoreEnum.CoreErrorCode coreErrorCode) {

}
});

如果 cleanRemote 参数设置为 true,表示需要同时删除服务端对应消息,该接口会从本地和服务端同时删除早于 (recordTime)的消息。服务端消息删除后,该用户无法再从服务端获取到已删除的消息。该接口一次仅允许删除指定的单个会话的消息,会话由会话类型和会话 ID 参数指定。

参数类型说明
conversationTypeConversationType会话类型
targetIdString会话 ID
recordTimelong时间戳。默认删除小于等于 recordTime 的消息。如果传 0,则删除所有消息。
cleanRemoteboolean是否删除服务器端消息。true:同时删除服务端对应消息。false:不删除服务端对应消息。
callbackOperationCallback接口回调

仅从服务端删除会话历史消息(时间戳)

提示
  • 如果 App 已经开通单群聊历史消息云存储服务,您可以调用以下接口删除 App 用户在融云服务端的历史消息记录。该接口仅从服务端删除消息。
  • 使用融云即时通讯服务端 API 也可以直接删除服务端消息。具体操作请参阅服务端文档消息清除

App 用户可以仅删除指定会话保存在服务端的历史消息。该接口提供时间戳参数(recordTime),支持删除早于指定时间的消息。如果 recordTime 设置为 0 则删除该会话保存在服务端的全部历史消息。

ConversationType conversationType = ConversationType.PRIVATE
String targetId = "会话 Id";
String recordTime = 0;

RongCoreClient.getInstance().cleanRemoteHistoryMessages(conversationType, targetId, recordTime, new IRongCoreCallback.OperationCallback() {
/**
* 删除消息成功回调
*/
@Override
public void onSuccess() {

}
/**
* 删除消息失败回调
* @param errorCode 错误码
*/
@Override
public void onError(IRongCoreEnum.CoreErrorCode coreErrorCode) {

}
});
参数类型说明
conversationTypeConversationType会话类型
targetIdString会话 ID
recordTimelong时间戳。默认删除所有发送时间小于等于该时间戳的消息。传 0 表示清除会话中所有消息。
callbackOperationCallback接口回调