跳到主要内容

获取会话

客户端 SDK 会根据用户收发的消息,在本地数据库中生成对应会话,并维护会话列表。应用程序可以获取本地数据库中的会话列表。

获取指定单个会话

使用 getConversation:targetId:completion: 获取某个会话的详细信息。

[[RCCoreClient sharedCoreClient] getConversation:ConversationType_PRIVATE
targetId:@"targetId"
completion:^(RCConversation *conversation) {

}];

参数类型说明
conversationTypeRCConversationType会话类型,单聊传入 ConversationType_PRIVATE
targetIdNSString会话 ID

批量获取会话信息

除了单个获取会话信息外,客户端 SDK 还支持批量获取会话的详细信息。

注意: 客户端 SDK 从 5.8.2 版本开始支持批量获取会话信息。 支持的会话类型:单聊、群聊、系统。

使用 getConversations:success:error: 方法查询多个会话的详细信息。如果本地数据库中只有部分会话信息,successBlock 结果只返回本地存在的会话;如果查询的多个会话信息在本地都查不到,将触发 errorBlock 回调。

// 假设我们有会话标识 conIden1 和 conIden2,它们代表想要查询的会话。
RCConversationIdentifier *conIden1 = [[RCConversationIdentifier alloc] initWithConversationIdentifier:ConversationType_PRIVATE targetId:@"tId1"];

RCConversationIdentifier *conIden2 = [[RCConversationIdentifier alloc] initWithConversationIdentifier:ConversationType_PRIVATE targetId:@"tId2"];

// 创建包含会话标识符的数组。
NSArray *conversationIdentifiers = @[
conIden1,
conIden2
// 如果有更多的会话标识符,可以继续添加到这个数组中。
];

// 使用 getConversations:success:error: 方法批量获取会话信息
[[RCCoreClient sharedCoreClient] getConversations:conversationIdentifiers
success:^(NSArray<RCConversation *> * _Nonnull conversations) {
// 成功获取会话信息的处理逻辑。
}
error:^(RCErrorCode status) {
// 错误处理逻辑,status 为错误码。
// 根据 status 进行相应的错误处理。
NSLog(@"Error fetching conversations: %@", @(status));
}];

参数类型说明
conversationIdentifiersNSArray需要查询的会话标识符数组,每次获取会话个数最大为 100。
successBlock获取会话信息成功的回调,返回包含会话信息的数组。
errorBlock获取会话信息失败的错误回调,返回错误码。

获取会话列表

会话列表是 SDK 在本地生成和维护的。如果未发生卸载重载或换设备登录,您可以获取本地设备上存储的所有历史消息生成的会话列表。

分页获取会话列表

使用 getConversationList:count:startTime:completion: 分页获取 SDK 在本地数据库生成的会话列表。返回的会话列表按照时间倒序排列。如果返回结果含有被设置为置顶状态的会话,则置顶会话默认排在最前。

时间戳(startTime)首次可传 0,后续可以使用返回的 RCConversation 对象的 operationTime 属性值为下一次查询的 startTime

提示

从 5.6.8 版本开始,需要使用会话的 operationTime;5.6.8 之前的版本,还需使用会话的 sentTime

[[RCCoreClient sharedCoreClient] getConversationList:@[@(ConversationType_PRIVATE)]
count:100
startTime:0
completion:^(NSArray<RCConversation *> *conversationList) {
}];

如果希望返回的会话列表严格按照时间倒序排列,请使用带 topPriority 参数的方法,并将该参数设置为 NO。该方法仅在 5.6.9 及之后版本提供。

[[RCCoreClient sharedCoreClient] getConversationList:@[@(ConversationType_PRIVATE)]
count:100
startTime:0
topPriority:NO
completion:^(NSArray<RCConversation *> *conversationList) {
}];
参数类型说明
conversationTypeListNSArray会话类型的数组,需要将 RCConversationType 转为 NSNumber 构建 Array。
countint获取的数量
startTimelong long指定时间戳,以获取早于这个时间戳的会话列表。首次可传 0,表示从最新开始获取。后续使用真实时间戳。
topPriorityboolean是否优先显示置顶消息。要求 SDK 版本 ≧ 5.6.9。
completionBlock获取会话列表成功的回调

获取未读会话列表

提示

SDK 从 5.3.2 版本开始提供该接口。

使用 getUnreadConversationList:completion: 获取指定类型的含有未读消息的会话列表,支持单聊、群聊、系统会话,返回 RCConversation 列表,获取到的会话列表按照时间倒序排列,置顶会话会排在最前。

[[RCCoreClient sharedCoreClient] getUnreadConversationList:@[@(ConversationType_GROUP),@(ConversationType_SYSTEM),@(ConversationType_PRIVATE)]
completion:^(NSArray<RCConversation *> * _Nullable conversationList) {

}];
参数类型说明
conversationTypeListNSArray会话类型的数组,需要将 RCConversationType 转为 NSNumber 构建 Array
completionBlock获取会话列表成功的回调

卸载重装或换设备登录后的处理方案

如果您的用户卸载重装或换设备登录,可能会发现会话列表为空,或者有部分会话丢失的错觉。

原因如下:

  • 在卸载的时候会删除本地数据库,本地没有任何历史消息,导致重新安装后会话列表为空。
  • 如果换设备登录,可能本地没有历史消息数据,导致会话列表为空。
  • 如果您的 App Key 开启了多设备消息同步 功能,服务端会同时启用离线消息补偿功能。服务端会在 SDK 连接成功后自动同步当天 0 点后的消息,客户端 SDK 接收到服务端补偿的消息后,可生成部分会话和会话列表。与卸载前或换设备前比较,可能会有部分会话丢失的错觉。

如果您希望在卸载重装或换设备登录后,获取到之前的会话列表,可以参考如下方案:

  • 申请增加离线消息补偿的天数,最大可修改为 7 天。注意,设置时间过长,当单用户消息量超大时,可能会因为补偿消息量过大,造成端上处理压力的问题。如有需要,请提交工单
  • 在您的服务器中自行维护会话列表,并通过 API 向服务端获取需要展示的历史消息。