跳到主要内容

单聊消息回执

功能描述

消息回执是一种通信机制,用于实时反馈消息的阅读状态。通过该功能,消息发送方可以确认接收方是否已实际查看消息内容,提升消息交互体验。

实现思路

消息已读回执功能的实现方式在 Web 平台与 Electron 平台存在差异,具体流程如下:

Web

  1. 当用户查看某单聊会话内的未读消息后,调用 sendReadReceiptMessage 方法发送已读回执。
  2. 通过 addEventListener方法,设置消息回执监听器。
  3. SDK 在收到消息已读回执时,触发 READ_RECEIPT_RECEIVED 事件。需注意:Web 平台 SDK 不会持久化记录各会话及消息的已读状态,您需自行在 localStorage 中记录每个会话的已读时间
  4. 在渲染消息列表时,根据 localStorage 中记录的已读时间与消息列表的 sentTime 比较,当 sentTime 小于已读时间时,表示已读,进而更新对应消息的界面状态。

Electron

  1. 当用户查看某单聊会话内的未读消息后,调用 sendReadReceiptMessage 方法发送已读回执。
  2. 通过 addEventListener方法,设置消息回执监听器。
  3. SDK 在收到消息已读回执时,触发 READ_RECEIPT_RECEIVED 事件。
  4. Electron 平台收到该事件通知后,需调用 electronExtension.setMessageStatusToRead 方法更新消息状态,并刷新对应消息界面。

发送回执

通过 sendReadReceiptMessage方法,向指定会话中发送消息已读回执。

注意

调用 sendReadReceiptMessage 方法仅用于发送回执,不会同步清除未读消息数。如需清除未读数,请单独调用相应接口

接口

JavaScript
RongIMLib.sendReadReceiptMessage(targetId, messageUId, timestamp)

参数说明

参数类型必填说明
targetIdstring目标会话 ID
messageUIdstring已读消息的唯一 ID
timestampnumber当前会话内已读的最后一条消息的发送时间戳(即 message.sentTime)

示例代码

JavaScript
const messageUId = 'BS4O-QEBR-VJM6-9GPP';
const timestamp = 1632728573423;

RongIMLib.sendReadReceiptMessage('targetId', messageUId, timestamp).then(res => {
if (res.code === 0) {
console.log(res.code, res.data)
} else {
console.log(res.code, res.msg)
}
}).catch(error => {
console.log(error)
})

设置消息回执监听器

通过 addEventListener 方法设置消息回执监听器,用于接收回执通知。

示例代码

JavaScript
const Events = RongIMLib.Events
function onReadReceiptReceived({conversation, messageUId, sentTime}) {
console.log(conversation, messageUId, sentTime)
}
RongIMLib.addEventListener(Events.READ_RECEIPT_RECEIVED, onReadReceiptReceived);

移除消息回执监听

应用生命周期结束时,建议通过 removeEventListener 方法移除已绑定的事件监听,避免内存泄漏。

示例代码

JavaScript
RongIMLib.removeEventListener(Events.READ_RECEIPT_RECEIVED, onReadReceiptReceived);