跳到主要内容

版本:5.X

获取未读消息

本文介绍在超级群业务中,如何获取全部未读 @ 消息、跳转至指定未读 @ 消息等功能。

提示

本功能依赖融云服务端保存的超级群会话「未读 @ 消息摘要」数据。「@所有人」消息的摘要固定保留 7 天(不可调整),其他类型 @ 消息的摘要数据与超级群历史消息的存储时长保持一致。

获取指定会话的未读 @ 消息列表

提示

该方法从 SDK 5.5.2 版本开始支持。

可通过 SDK 从远端获取指定超级群频道中的未读 @ 消息摘要数据。返回的摘要可获取未读 @ 消息的 messageUId 和 sentTime,再结合其他接口拉取消息详情。

使用场景示例 如果 App 希望实现仅展示未读 @ 消息的功能,可按以下步骤:

step1:获取未读 @ 消息摘要列表

调用 getUltraGroupUnreadMentionedMessages,可一次获取最多 50 条未读 @ 消息摘要。

接口

JavaScript
RongIMLib.getUltraGroupUnreadMentionedMessages(options)

参数说明

参数类型必填说明
optionsIUltraGroupUnreadMentionedOption获取指定会话未读 @ 消息列表参数

示例代码

JavaScript
const options = {
targetId: 'targetId',
channelId: 'channelId',
sentTime: 0,
count: 10,
};
const res = await RongIMLib.getUltraGroupUnreadMentionedMessages(options);
console.log('获取指定会话未读 @ 消息列表结果:', res);
提示
  • 返回 Promise,成功时 res.data 为 IUltraUnreadMsg 数组(@ 消息摘要,不含完整消息内容)。
  • 自 5.8.0 起,摘要中新增 messageType 字段,便于筛选所需消息类型。

step2:获取 @ 消息的完整内容

从上一步得到的 IUltraUnreadMsg 中提取 messageUId 和 sentTime,调用 getUltraGroupMessageListByMessageUId 获取消息详情。

接口

JavaScript
getUltraGroupMessageListByMessageUId(conversation: IConversationOption, messages: IMessageDesc[])

参数说明

参数类型必填说明
conversationIConversationOption目标会话
messagesIMessageDesc[]消息列表

示例代码

JavaScript
const options = {
conversationType: RongIMLib.ConversationType.ULTRA_GROUP,
targetId: 'targetId',
channelId: 'channelId',
};
// sendTime 为消息的发送时间,此处示例为假数据
const messages = [{ messageUId: 'messageUId1', sendTime: 1626864000000, }];
const res = await RongIMLib.getUltraGroupMessageListByMessageUId(options, messages);
console.log('从服务端获取特定批量消息结果:', res);

获取指定会话的第一条未读消息的时间戳

提示

该方法从 SDK 5.5.2 版本开始支持。

通过 getUltraGroupFirstUnreadMessageTimestamp 方法,获取当前用户在指定超级群会话或指定频道的第一条未读消息的时间戳。

接口

JavaScript
RongIMLib.getUltraGroupFirstUnreadMessageTimestamp(conversation)

参数说明

参数类型必填说明
conversationIUltraGroupOption超级群会话

示例代码

javascript
const conversation = {
targetId: '超级群 ID',
channelId: '超级群频道 ID'
}

RongIMLib.getUltraGroupFirstUnreadMessageTimestamp(conversation).then((res) => {
if (res.code === 0) {
console.log(res.code, res.data) // res.data: { sentTime: <timestamp> } | null
} else {
console.log(res.code, res.msg)
}
})