--- title: 获取会话 siderbar_position: 10 --- 客户端 SDK 会根据收发的消息在本地数据库中生成对应会话。您可以从本地数据库获取 SDK 生成的会话列表。 ## 获取会话列表 通过以下接口分页获取 SDK 在本地数据库生成的会话列表。获取到的会话列表按照时间倒序排列,置顶会话会排在最前。 ### 方法 ```ts loadConversations(types: Array, channelId: string, startTime: number, count: number): Promise; ``` ### 参数说明 | 参数 | 类型 | 说明 | | :---------------- | :------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | types | Array<RCIMIWConversationType> | 选择要获取的会话类型。可设置多个会话类型。 | | channelId | string | 频道 ID,暂不支持该参数。传 null 即可。 | | startTime | number | 指定时间戳,以获取早于这个时间戳的会话列表。首次传 0,表示从最新开始获取;后续使用真实时间戳(即上一页最后一条会话的 `sentTime`)。 | | count | number | 查询的数量, count 大于 0,小于等于 50。 | ### 返回值 | 返回值 | 描述 | | ------------ | -------------------------------------------------------- | | Promise\ | 当次接口操作状态码,并不代表最终操作结果,状态码详细信息 | ### 代码示例 ```ts engine.loadConversations( types, channelId, startTime, count ) .then((code: number) => {}); ``` ### 回调方法 - **setOnConversationsLoadedListener** 获取会话列表的结果回调 ```ts setOnConversationsLoadedListener(listener?: (code: number, conversationTypes: Array, channelId: string, startTime: number, count: number, conversations: Array) => void): void; ``` 参数说明 | 参数 | 类型 | 说明 | | :---------------- | :----------------------------------------------------------- | :-------------------------- | | code | number | 接口回调的状态码,0 代表成功,非 0 代表出现异常 | | conversationTypes | Array<RCIMIWConversationType> | 调用接口时传入的会话类型 | | channelId | string | 调用接口时传入的频道 ID | | startTime | number | 调用接口时传入的时间戳 | | count | number | 调用接口时传入的查询数量 | | conversations | Array<RCIMIWConversation> | 获取的会话列表 | 代码示例 ```ts engine.setOnConversationsLoadedListener( ( code: number, conversationTypes: Array, channelId: string, startTime: number, count: number, conversations: Array ) => {} ); ``` ## 获取指定会话 获取某个会话的详细信息。 ### 方法 ```ts loadConversation(type: RCIMIWConversationType, targetId: string, channelId: string): Promise; ``` ### 参数说明 | 参数 | 类型 | 说明 | | :-------- | :----------------------------------------------------------- | :-------------------------------------------------- | | type | [RCIMIWConversationType](https://www.rongcloud.cn/docs/api/react-native/imlib_v5/latest/enums/RCIMDefines.RCIMIWConversationType.html) | 会话类型 | | targetId | string | 会话 ID | | channelId | string | 频道 ID,暂不支持该参数。传 null 即可。 | ### 返回值 | 返回值 | 描述 | | ------------ | -------------------------------------------------------- | | Promise\ | 当次接口操作状态码,并不代表最终操作结果,状态码详细信息 | ### 代码示例 ```ts engine.loadConversation( type, targetId, channelId ) .then((code: number) => {}); ``` ### 回调方法 - **onConversationLoaded** ```ts setOnConversationLoadedListener(listener?: (code: number, type: RCIMIWConversationType, targetId: string, channelId: string, conversation: RCIMIWConversation) => void): void; ``` 参数说明 | 参数 | 类型 | 说明 | | :----------- | :----------------------------------------------------------- | :-------------------------- | | code | number | 接口回调的状态码,0 代表成功,非 0 代表出现异常 | | type | [RCIMIWConversationType](https://www.rongcloud.cn/docs/api/react-native/imlib_v5/latest/enums/RCIMDefines.RCIMIWConversationType.html) | 调用接口时传入的会话类型 | | targetId | string | 调用接口时传入的会话 ID | | channelId | string | 调用接口时传入的频道 ID | | conversation | [RCIMIWConversation](https://www.rongcloud.cn/docs/api/react-native/imlib_v5/latest/interfaces/RCIMDefines.RCIMIWConversation.html) | 获取的会话列表 | 代码示例 ```ts engine.setOnConversationLoadedListener( ( code: number, type: RCIMIWConversationType, targetId: string, channelId: string, conversation: RCIMIWConversation ) => {} ); ``` ## 常见问题 {#qa} > Q1: 当用户卸载重新安装后发现会话列表为空或者部分会话丢失 > A1: 由于会话列表是从本地数据库获取的, 是在 SDK 内部数据库存储的,所以当用户在卸载的时候会删除本地数据库,导致重新安装后会话列表为空,而会出现部分会话的原因是因为开启了 **离线消息补偿** 功能,具体操作是在后台购买 [多设备消息同步](https://console.rongcloud.cn/agile/formwork/advance/index?_blank) 功能,这个功能里默认涵盖了今天(当天 **0** 点)的离线消息补偿,所以当用户在新设备登陆会触发离线消息补偿功能,从而获取到部分会话,造成部分会话丢失的错觉。如果想要更多天的离线消息补偿,可 [提交工单](https://console.rongcloud.cn/agile/formwork/ticket/create) 修改,最多支持 7 天,**设置时间过长,当单用户消息量超大时,可能会因为补偿消息量过大,造成端上处理压力的问题**。