逐条消息已读功能
逐条消息已读功能支持针对单、群聊内的每条消息分别标记已读状态,以满足特定场景需求。
提示
- 使用逐条消息已读功能,需要 SDK 版本 ≥ 5.20.0;且需要提交工单申请逐条消息已读功能,否则相关接口将返回错误码。
- 功能仅支持单聊、群聊会话类型。
发送允许回执的消息
调用 sendMessage 向会话中发送消息时,通过配置 needReceipt
参数,以通知接收方在已读时发送回执;可参考 ISendMessageOptions 说明。
注意
SDK 对于 needReceipt
参数进行了严格校验,若错误配置其值为 true
,sendMessage 将返回 [35056],开发者需自行按如下可能原因进行排查:
- 检查是否已申请开启逐条消息已读功能;
- 检查会话类型是否为单聊(
ConversationType.PRIVATE
)或群聊(ConversationType.GROUP
),目前不支持其他会话类型; - 检查消息是否为状态消息,或消息为非存储消息类型(isPersited = false);
- 发送群聊消息时,检查是否为群定向消息;即 ISendMessageOptions 中
directionalUserIdList
有值。
发送方通过监听 Events.MESSAGE_RECEIPT_RESPONSE_V5
事件,可以获取到消息接收方的回执动态通知;通知数据结构参考 ReadReceiptResponseV5。
JavaScript
RongIMLib.addEventListener(RongIMLib.Events.MESSAGE_RECEIPT_RESPONSE_V5, (list) => {
list.forEach((data) => {
console.log('会话信息:', data.identifier);
console.log('消息 UID:', data.messageUId);
console.log('变更用户列表:', data.users);
console.log('总人数:', data.totalCount);
console.log('已读人数:', data.readCount);
console.log('未读人数:', data.unreadCount);
});
});
接收方消息检查
IAReceivedMessage 数据中新增 needReceipt
属性,以用于确定是否需要在阅读该消息后向对方发送已读回执;
JavaScript
// 接收在线消息
RongIMLib.addEventListener(RongIMLib.Events.MESSAGES, (msgList) => {
msgList.forEach((item) => {
console.log('消息 UID:', item.messageUId);
console.log('消息是否需要回执:', item.needReceipt);
});
});
新增 sendReceipt
属性,该属性仅在获取历史消息列表接口中有效,用于确定本端登录用户是否已对消息发送过回执。
JavaScript
// 获取历史消息
RongIMLib.getHistoryMessage(RongIMLib.ConversationType.GROUP, '<GroupID>').then(({ code, data }) => {
if (code !== RongIMLib.ErrorCode.SUCCESS) {
console.log('获取历史消息列表失败', code);
return;
}
const { list, hasMore } = data;
list.forEach((item) => {
console.log('消息是否需要回执:', item.needReceipt);
console.log('是否已 发送回执:', item.sendReceipt);
});
});
接收方发送已读回执
通过调用 sendReadReceiptResponseV5 接口,可以批量对同一会话中的多条消息进行已读标记。
JavaScript
const conversation = {
conversationType: RongIMLib.ConversationType.GROUP,
targetId: '<Group-ID>'
};
// 待响应回执的消息 UID 列表
const messageUIds = ['<消息 UID>']
RongIMLib.sendReadReceiptResponseV5(conversation, messageUIds).then(({ code }) => {
console.log(code)
});