获取远端会话
会话列表支持超级群
自 5.20.0 版本开始,SDK 支持在获取会话列表中返回超级群会话信息,以便于开发者根据业务需求对单聊、群聊、超级群会话列表进行混合排序展示;该功能需提交工单开启。
功能开启后,SDK 在连接成功后,从服务器拉取所有会话数据至本地内存中进行维护,并在开发者调用接口时,从内存中按查询条件返回相关会话数据。
- 单聊、群聊会话同步完成后,SDK 将分别通知
Events.CONVERSATIONS_SYNCED
事件; 超级群会话同步完成后,SDK 将通知Events.ULTRA_GROUP_ENABLE
事件;建议在接收到以上两个事件后再拉取获取会话列表进行渲染,否则数据结果可能存在丢失、排序异常等问题。 - 因 Electron 平台不支持超级群会话,因此该功能对 Electron 平台无效。
- 会话列表结果中仅包含超级群的默认频道会话数据,不包含子频道会话。
获取会话列表
该接口在 Electron 平台调用时会忽略参数传值,固定返回所有会话列表。建议 Electron 平台客户考虑使用Electron 获取会话列表的接口。
调用 getConversationList 获取会话列表数据,返回 IAReceivedConversation 列表。
const startTime = 0;
const count = 10;
const order = 0;
RongIMLib.getConversationList({
count: count,
startTime: startTime,
order: order
}).then(res => {
if (res.code === 0) {
console.log(res.code, res.data)
} else {
console.log(res.code, res.msg)
}
})
服务端按照会话最后一条消息的时间进行排序。获取方式如下:
- 如需获取最新的会话列表,应设置
order
为0
、startTime
为0
,表示以当前时间点为分界,查询早于当前时间的会话,接口将返回最新的会话列表。 - 如需获取服务端最早的会话,应设置
order
为1
,startTime
为0
,此时startTime = 0
表示从服务端最早一条会话开始查询,获取指定数量会话,接口将返回服务端 1000 条会话中最早的会话列表。 - 如果分页获取会话,第二次应传入返回结果数组中最后一条数据的 IAReceivedConversation 的
latestMessage
的sendTime
。
参数 | 类型 | 必填 | 默认值 | 说明 |
---|---|---|---|---|
count | Number | 否 | 300 | 会话列表数量,默认值 300 ,最大值 1000 。 |
startTime | Number | 否 | 0 | 获取会话的时间边界,为精确到毫秒的时间戳,与 order 配合使用。分页获取时,第二次可传入返回结果数组中最后一条数据的 IAReceivedConversation 的 latestMessage 的 sendTime 。 |
order | Number | 否 | 0 | 获取会话的方向。0 表示获取早于时间边界(startTime )的会话。1 表示获取晚于时间边界(startTime )的会话。 |
返回结果中的 IAReceivedConversation 属性说明:
字段名 | 类型 | 说明 |
---|---|---|
conversationType | Number | 会话类型 |
targetId | String | 接收方的 userId |
unreadMessageCount | Number | 当前会话的未读消息数 |
latestMessage | Object | 会话中最后一条消息 |
hasMentioned | Boolean | 是否包含 @ 自己的消息,此数据仅在 conversationType 为 ConversationType.GROUP 时有效 |
mentionedInfo | MentionedInfo | @ 信息。 |
notificationStatus | Number | 当前会话的免打扰状态,Web 平台在 5.3.0 版本废弃该字段,Electron 平台在 5.8.4 版本废弃该字段,请使用 notificationLevel。 |
notificationLevel | NotificationLevel | 当前会话的免打扰级别,Web 平台在 5.3.0 版本支持, Electron 平台在 5.8.4 版本支持 |
isTop | Boolean | 当前会话置顶状态 |
lastUnreadTime | Number | 会话中消息的最后未读时间 |
draft | String | 草稿信息,5.9.0 版本新增 |
在 Web 端调用该接口时,获取的数据为远端存储的会话数据。为提升性能并减少接口调用风险,我们建议按以下方式处理:
首次获取数据: 业务层在拉取离线消息完成后,可主动调用该接口一次,将返回的会话数据赋值给业务层的渲染数据,以确保初始状态的完整性。
数据更新方式: 后续会话数据的更新将通过会话变更通知事件监听返回。业务层可根据事件返回的数据,与本地渲染数据进行合并更新,而无需频繁调用 getConversationList 接口。
避免频繁调用接口: 请勿在每次收发消息时主动调用 getConversationList 接口以获取远端会话列表数据,这样可能带来以下问题:
- 可能导致接口报错或请求失败。
- 返回的会话数据可能并非最新。
- 多次拉取远端数据会增加网络负载,降低应用性能。
获取指定会话
调用 getConversation 获取指定会话 IAReceivedConversation。
通过该方法获取的会话可能并不存在于当前的会话列表中,此处只作为功能性封装语法糖。
const conversationType = RongIMLib.ConversationType.PRIVATE;
const targetId = '接收方的 userId';
RongIMLib.getConversation({
conversationType,
targetId,
}).then(res => {
if (res.code === 0) {
console.log(res.code, res.data)
} else {
console.log(res.code, res.msg)
}
})
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
targetId | String | 是 | 接收方的 userId |
conversationType | Number | 是 | 会话类型,参考 ConversationType。 |
获取置顶会话列表
调用 getTopConversationList 获取置顶会话列表。
从 SDK 5.6.0 开始支持该接口。注意:该接口在 Web 平台返回数据中将不包含 latestMessage
字段。
const conversationTypes = [RongIMLib.ConversationType.PRIVATE, RongIMLib.ConversationType.GROUP, RongIMLib.ConversationType.SYSTEM];
RongIMLib.getTopConversationList(conversationTypes).then(res => {
if (res.code === 0) {
console.log(res.code, res.data)
} else {
console.log(res.code, res.msg)
}
})
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
conversationTypes | ConversationType[] | 否 | 会话类型,参考 ConversationType, 默认是全部会话类型 |
获取未读会话列表
从 SDK 5.7.0 开始支持该接口。注意:该接口在 Web 平台返回数据中将不包含 latestMessage
字段。
调用 getUnreadConversationList 获取含有未读消息的会话列表。
const conversationTypes = [RongIMLib.ConversationType.PRIVATE, RongIMLib.ConversationType.GROUP, RongIMLib.ConversationType.SYSTEM];
RongIMLib.getUnreadConversationList(conversationTypes).then(res => {
if (res.code === 0) {
console.log(res.code, res.data)
} else {
console.log(res.code, res.msg)
}
})