跳到主要内容

获取会话

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

获取指定单个会话

获取某个会话的详细信息。

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

RongCoreClient.getInstance().getConversation(conversationType, targetId, new IRongCoreCallback.ResultCallback<Conversation>() {

@Override
public void onSuccess(Conversation conversation) {
// 成功并返回会话信息
}

@Override
public void onError(RongIMClient.ErrorCode errorCode) {

}
});
参数类型说明
conversationTypeConversationType会话类型
targetIdString会话 ID
callbackResultCallback<Conversation>回调接口

批量获取会话信息

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

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

使用 getConversations() 方法查询多个会话的详细信息。

// 假设我们有会话标识 conIden1 和 conIden2,它们代表想要查询的会话。

List<ConversationIdentifier> conversationIdentifiers = new ArrayList<>();
conversationIdentifiers.add(ConversationIdentifier.obtain(ConversationType.PRIVATE, "tId1", ""));
conversationIdentifiers.add(ConversationIdentifier.obtain(ConversationType.PRIVATE, "tId2", ""));

RongCoreClient.getInstance().getConversations(conversationIdentifiers, new IRongCoreCallback.ResultCallback<List<Conversation>>() {
@Override
public void onSuccess(List<Conversation> conversations) {
// 成功并返回会话信息
}

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

}
});

参数类型说明
conversationIdentifiersList<ConversationIdentifier>会话类型
callbackResultCallback<Conversation>回调接口

获取会话列表

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

分页获取会话列表

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

使用 getConversationListByPage 方法,时间戳(startTime)首次可传 0,后续可以使用返回的 Conversation 对象的 sentTimeoperationTime 属性值为下一次查询的 startTime。推荐使用 operationTime,该属性仅在 5.6.8 及之后版本提供。

long timeStamp = 0;
int count = 10;
Conversation.ConversationType[] conversationTypes = {ConversationType.PRIVATE, ConversationType.GROUP};

RongCoreClient.getInstance().getConversationListByPage(new IRongCoreCallback.
ResultCallback<List<Conversation>>() {

@Override
public void onSuccess(List<Conversation> conversations) {

}

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

}
},timeStamp, count, conversationTypes);

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

long timeStamp = 0;
int count = 10;
boolean topPriority = false;

Conversation.ConversationType[] conversationTypes = {ConversationType.PRIVATE, ConversationType.GROUP};

RongCoreClient.getInstance().getConversationListByPage(new IRongCoreCallback.
ResultCallback<List<Conversation>>() {

@Override
public void onSuccess(List<Conversation> conversations) {

}

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

}
},timeStamp, count, topPriority, conversationTypes);
参数类型说明
callbackResultCallback<List<Conversation>>方法回调。
timeStamplong时间戳,以获取早于这个时间戳的会话列表。首次可传 0,表示从最新开始获取。后续使用真实时间戳。
countint取回的会话数量。建议此数值不要超过 10 个,当一次性获取的会话数过大时,会导致跨进程通信崩溃,引发获取会话列表失败及通信连接被中断。

当实际取回的会话数量小于 count 值时,表明已取完数据。
topPriorityboolean是否优先显示置顶消息。要求 SDK 版本 ≧ 5.6.9。
conversationTypesArray of ConversationType选择要获取的会话类型。可设置多个会话类型。

获取未读的会话列表

提示

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

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

ConversationType[] conversationTypes = {ConversationType.PRIVATE, ConversationType.GROUP, ConversationType.SYSTEM};

RongCoreClient.getInstance().getUnreadConversationList(new IRongCoreCallback.ResultCallback<List<Conversation>>() {

@Override
public void onSuccess(List<Conversation> conversations) {
// 成功并返回会话信息
}

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

}
}, conversationTypes);
参数类型说明
callbackResultCallback<List<Conversation>>回调接口
conversationTypesArray of ConversationType会话类型数组

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

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

原因如下:

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

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

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