跳到主要内容

获取聊天室历史消息

客户端 SDK 支持获取聊天室历史消息。具体能力如下:

开通服务

使用 getChatroomHistoryMessages 要求开通 聊天室消息云端存储服务。使用前请确认已开通服务。开通后聊天室历史消息保存在云端,默认保存 2 个月。

获取聊天室远端历史消息

您可以通过 getChatroomHistoryMessages 获取聊天室远端历史记录。如果本地数据库存在相同时段内的历史消息,那么调用这个接口会返回一个 size 为 0 的数组。因此建议的调用顺序如下:

  1. 先调用 RongCoreClientgetHistoryMessages,传入会话类型,聊天室 ID、最后一条消息的 ID,并指定要获取的消息数量等参数,从本地消息数据库中获取的历史消息。
  2. 如果为空的话,再调用 RongChatRoomClientgetChatroomHistoryMessages 方法,传入聊天室 ID、消息的发送时间戳、查询方向,并指定要获取的消息数量等参数,从聊天室历史消息云存储中获取历史消息。在查询方向不变的情况下,当次返回的 syncTime 的值可以作为下次拉取时的 recordTime 传入,方便连续拉取。
Conversation.ConversationType conversationType = Conversation.ConversationType.CHATROOM;
int oldestMessageId = -1;
final int count = 10;

final String targetId = "聊天室 ID";
final long recordTime = 0;

RongCoreClient.getInstance().getHistoryMessages(conversationType, targetId, oldestMessageId, count,
new IRongCoreCallback.ResultCallback<List<Message>>() {

@Override
public void onSuccess(List<Message> messages) {
if (messages == null || messages.isEmpty()) {
RongChatRoomClient.getInstance().getChatroomHistoryMessages(targetId, recordTime, count, IRongCoreEnum.TimestampOrder.RC_TIMESTAMP_ASC,
new IRongCoreCallback.IChatRoomHistoryMessageCallback() {

@Override
public void onSuccess(List<Message> messages, long syncTime) {

}


@Override
public void onError(IRongCoreEnum.CoreErrorCode code) {

}
});

}
}

@Override
public void onError(IRongCoreEnum.CoreErrorCode e) {

}
});

getChatroomHistoryMessages 的成功回调中会返回一个 syncTimesyncTime 的具体意义与 getChatroomHistoryMessagesorder 参数取值有关。

  • 如果拉取顺序为 RC_Timestamp_Desc,表示查询方向为降序,即按消息发送时间递减的顺序,获取发送时间早于 recordTime 的消息。syncTime 为结果中最早一条消息的时间戳(即最小的时间戳)。
  • 如果拉取顺序为 RC_Timestamp_Asc,表示查询方向为升序,即按消息发送时间递增的顺序,获取发送时间晚于 recordTime 的消息。syncTime 为结中最晚消息的时间戳(即最大的时间戳)。