跳到主要内容

获取聊天室历史消息

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

开通服务

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

获取聊天室本地历史消息

您可以通过 getHistoryMessages 获取聊天室本地的历史记录,聊天室业务默认在用户退出聊天室时会清除聊天室保存在本地的历史消息。。

接口原型

Objective C
- (void)getHistoryMessages:(RCConversationType)conversationType
targetId:(NSString *)targetId
oldestMessageId:(long)oldestMessageId
count:(int)count
completion:(nullable void(^)(NSArray<RCMessage *> *_Nullable messages))completion;

参数说明

count 参数表示返回列表中应包含多少消息。oldestMessageId 参数用于控制分页的边界。每次调用 getHistoryMessages 方法时,SDK 会以 oldestMessageId 参数指向的消息为界,继续在下一页返回指定数量的消息。如果需要获取会话中最新的 count 条消息,可以将 oldestMessageId 设置为 -1。

提示

建议您通过获取返回结果中最早一条消息的 messageId,并在下一次调用时作为 oldestMessageId 传入,以便遍历整个会话的消息历史记录。

参数类型说明
conversationType[RCConversationType]会话类型
targetIdNSString会话 targetId
oldestMessageIdlong用于控制分页的边界,以此 messageId 为界,获取发送时间更小的 count 条消息。设置为 -1 或 0,表示获取最新的 count 条消息。
countint需要获取的消息数量,按照消息发送时间从新到旧排列
completionBlock异步回调,返回获取到的消息实体 RCMessage 数组

示例代码

Objective C
[[RCCoreClient sharedCoreClient] getHistoryMessages:ConversationType_CHATROOM
targetId:@"targetId"
oldestMessageId:-1
count:10
completion:^(NSArray<RCMessage *> * _Nullable messages) {

}];

获取聊天室远端历史消息

您可以通过 getRemoteChatroomHistoryMessages 获取聊天室远端历史记录。如果本地数据库存在相同时段内的历史消息, 那么调用这个接口会返回一个 size 为 0 的数组。因此请先调用 getHistoryMessages 获取本地的历史记录,如果为空的话,再调用 getRemoteChatroomHistoryMessages 来获取远端历史记录。

接口说明

Objective C
- (void)getRemoteChatroomHistoryMessages:(NSString *)targetId
recordTime:(long long)recordTime
count:(int)count
order:(RCTimestampOrder)order
success:(nullable void (^)(NSArray<RCMessage *> *messages, long long syncTime))successBlock
error:(nullable void (^)(RCErrorCode status))errorBlock;

参数说明

获取远端历史消息成功的 successBlock 中会返回获取到的历史消息数组和 syncTime。 如果拉取顺序为 RC_Timestamp_Desc,为拉取结果中最早一条消息的时间戳(即最小的时间戳)。如果拉取顺序为 RC_Timestamp_Asc,为拉取结果中最晚消息的时间戳(即最大的时间戳)。在拉取顺序不变的情况下,当次返回的 syncTime 的值可以作为下次拉取时的 recordTime 传入,方便连续拉取。

参数类型说明
targetIdNSString聊天室 ID,最大长度为 64 个字符。
recordTimelong long消息发送时间戳(毫秒),表示获取 recordTime 之前或者之后的消息。
countint需要获取的消息数量,最大不超过 200 条。
orderRCTimestampOrder拉取顺序。RC_Timestamp_Desc:降序,按消息发送时间递减的顺序,获取发送时间早于 recordTime 的消息。RC_Timestamp_Asc: 升序,按消息发送时间递增的顺序,获取发送时间晚于 recordTime 的消息。默认值为降序。
successBlockBlock获取成功的回调。
errorBlockBlock获取失败的回调。status 中返回错误码 RCErrorCode

示例代码

Objective C
[[RCChatRoomClient sharedChatRoomClient] getRemoteChatroomHistoryMessages:@"targetId" recordTime:0 count:1 order:RC_Timestamp_Desc success:^(NSArray<RCMessage *> * _Nonnull messages, long long syncTime) {

} error:^(RCErrorCode status) {
}];