跳到主要内容

版本:5.X

获取会话

注意

  • Web 端不具备持久化的数据存储能力,无法在本地持久化存储历史消息记录与会话列表,因此需要从融云服务端获取数据。从远端获取单群聊历史消息要求您已在控制台 IM 服务管理页面为当前使用的 App Key 开启单群聊消息云端存储服务。IM 旗舰版IM 尊享版可开通该服务。具体功能与费用以融云官方价格说明页面及计费说明文档为准。
  • 获取远端会话必须在调用 RongIMLib.connect() 并且成功建立连接之后执行。
  • 服务器会话列表存储上限为 1000 条会话,会话存储有效期与单群聊消息云端存储的有效期一致,默认为 6 个月。

获取会话列表

提示

该接口在 Electron 平台调用时会忽略参数传值,固定返回所有会话列表。建议 Electron 平台客户考虑使用 Electron 获取会话列表的接口

使用建议

在 Web 端调用该接口时,获取的数据为远端存储的会话数据。为提升性能并减少接口调用风险,我们建议按以下方式处理:

首次获取数据: 业务层在拉取离线消息完成后,可主动调用该接口一次,将返回的会话数据赋值给业务层的渲染数据,以确保初始状态的完整性。

数据更新方式: 后续会话数据的更新将通过 会话变更通知事件监听 返回。业务层可根据事件返回的数据,与本地渲染数据进行合并更新,而无需频繁调用 getConversationList 接口。

避免频繁调用接口: 请勿在每次收发消息时主动调用 getConversationList 接口以获取远端会话列表数据,这样可能带来以下问题:

  1. 可能导致接口报错或请求失败。
  2. 返回的会话数据可能并非最新。
  3. 多次拉取远端数据会增加网络负载,降低应用性能。

调用 getConversationList 获取会话,返回 IAReceivedConversation 列表。

js
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)
}
})

服务端按照会话最后一条消息的时间进行排序。获取方式如下:

  • 如需获取最新的会话列表,应设置 order0startTime0,表示以当前时间点为分界,查询早于当前时间的会话,接口将返回最新的会话列表。
  • 如需获取服务端最早的会话,应设置 order1startTime0,此时 startTime = 0 表示从服务端最早一条会话开始查询,获取指定数量会话,接口将返回服务端 1000 条会话中最早的会话列表。
  • 如果分页获取会话,第二次应传入返回结果数组中最后一条数据的 IAReceivedConversationlatestMessagesendTime
参数类型必填默认值说明
countNumber300会话列表数量,默认值 300,最大值 1000
startTimeNumber0获取会话的时间边界,为精确到毫秒的时间戳,与 order 配合使用。分页获取时,第二次可传入返回结果数组中最后一条数据的 IAReceivedConversationlatestMessagesendTime
orderNumber0获取会话的方向。0 表示获取早于时间边界(startTime)的会话。1 表示获取晚于时间边界(startTime)的会话。

返回结果中的 IAReceivedConversation 属性说明:

字段名类型说明
conversationTypeNumber会话类型
targetIdString接收方的 userId
unreadMessageCountNumber当前会话的未读消息数
latestMessageObject会话中最后一条消息
hasMentionedBoolean是否包含 @ 自己的消息,此数据仅在 conversationTypeConversationType.GROUP 时有效
mentionedInfoMentionedInfo@ 信息。
notificationStatusNumber当前会话免打扰状态,web 平台在 5.3.0 版本废弃该字段,ELectron 平台在 5.8.4 版本废弃该字段,请使用 notificationLevel。
notificationLevelNotificationLevel当前会话免打扰级别, web 平台在 5.3.0 版本支持, ELectron 平台在 5.8.4 版本支持
isTopBoolean当前会话免置顶状态
lastUnreadTimeNumber会话中消息的最后未读时间
draftString草稿信息,5.9.0 版本新增

获取指定会话

调用 getConversation 获取指定会话 IAReceivedConversation

提示

通过该方法获取的会话可能并不存在于当前的会话列表中,此处只作为功能性封装语法糖。

js
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)
}
})
参数类型必填说明
targetIdString接收方的 userId
conversationTypeNumber会话类型,参考 ConversationType

获取置顶会话列表

调用 getTopConversationList 获取置顶会话列表。

提示

从 SDK 5.6.0 开始支持该接口。注意:该接口在 Web 平台返回数据中将不包含 latestMessage 字段。

js
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)
}
})
参数类型必填说明
conversationTypesConversationType[]会话类型,参考 ConversationType, 默认是全部会话类型

获取未读会话列表

提示

从 SDK 5.7.0 开始支持该接口。注意:该接口在 Web 平台返回数据中将不包含 latestMessage 字段。

调用 getUnreadConversationList 获取含有未读消息的会话列表。

js
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)
}
})
参数类型必填说明
conversationTypesConversationType[]会话类型。参考 ConversationType, 仅支持 单聊、群聊、系统会话类型