获取未读消息
本页面描述了在超级群业务如何实现获取全部未读 @ 消息、跳转到指定未读 @ 消息等功能。
本页面功能依赖融云服务端保存的超级群会话「未读 @ 消息摘要」数据。「@所有人」消息的摘要数据固定存储 7 天(不支持调整)。其他类型 @ 消息的摘要数据与超级群历史消息存储时长一致。
获取指定会话的未读 @ 消息列表
该方法从 SDK 5.5.2 版本开始支持。
SDK 支持从远端获取指定超级群频道中的未读 @ 消息的摘要数据。App 可使用返回的摘要数据,从远端取得未读的 @ 消息。
例如,App 希望获取仅展示未读 @ 消息的场景,步骤如下:
-
使用 getUltraGroupUnreadMentionedMessages 从远端获取指定超级群频道中的未读 @ 消息的摘要数据。最多可获取 50 条(
count
取值范围为 [1-50])const targetId = '超级群 ID'
const channelId = '超级群频道 ID'
const sentTime = 0
const count = 20
RongIMLib.getUltraGroupUnreadMentionedMessages({ targetId, channelId, sentTime, count }).then((res) => {
if (res.code === 0) {
console.log(res.code, res.data)
} else {
console.log(res.code, res.msg)
}
})参数 类型 必填 说明 targetId String 是 超级群 ID channelId String 否 超级群频道 ID sentTime Number 是 融云服 务会获取大于这个时间戳的未读 @ 消息列表。首次获取传 0, 后续获取传获取到的未读 @ 消息列表中最后一条消息的时间戳。 count Number 是 数据个数,最大 50 。 getUltraGroupUnreadMentionedMessages
会返回一个 Promise,可解析得到 IUltraUnreadMsg 的数组。IUltraUnreadMsg
即每条 @ 消息的摘要数据,但不是完整的消息。从 5.8.0 版本开始,IUltraUnreadMsg
中会返回消息类型标识属性messageType
,可用于筛选摘要数据。 -
从上一步得到 IUltraUnreadMsg 数据中可获取每一条 @ 消息的
messageUId
与sentTime
。使用 getUltraGroupMessageListByMessageUId 方法,在第二个参数传入用于提取消息完整内容的摘要 IMessageDesc 列表,即可从远端批量提取 @ 消息的完整内容。const conversationType = RongIMLib.ConversationType.ULTRA_GROUP
const targetId = ' 会话 Id '
const channelId = '<频道ID>'
RongIMLib.getUltraGroupMessageListByMessageUId({ conversationType, targetId, channelId }, msgs)
.then((res) => {
if (res.code === 0) {
console.log(res.code, res.data)
} else {
console.log(res.code, res.msg)
}
})
.catch((error) => {
console.log(error)
})
获取指定会话的第一条未读消息的时间戳
该方法从 SDK 5.5.2 版本开始支持。
通过 getUltraGroupFirstUnreadMessageTimestamp 获取当前用户在指定超级群会话或指定频道的第一条未读消息的时间戳。
参数说明
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
targetId | String | 是 | 超级群 ID |
channelId | String | 否 | 超级群频道 ID |
代码示例
const targetId = '超级群 ID'
const channelId = '超级群频道 ID'
RongIMLib.getUltraGroupFirstUnreadMessageTimestamp({ targetId, channelId }).then((res) => {
if (res.code === 0) {
console.log(res.code, res.data) // res.data: { sentTime: <timestamp> } | null
} else {
console.log(res.code, res.msg)
}
})