跳到主要内容

单聊消息回执

当 A 给 B 发送一条消息,B 用户调用发送阅读回执接口之后,A 用户可在回执监听中收到已读通知。

实现思路

通过以下步骤,即可以实现消息已读回执功能。Web 平台与 Electron 平台的实现流程有差异:

  • Web

    1. 在用户查看了某单聊会话的未读消息后,调用 sendReadReceiptMessage 发送已读回执。
    2. 通过 addEventListener 设置消息回执监听器。
    3. SDK 在收到消息已读回执时派发 READ_RECEIPT_RECEIVED 事件。在 Web 平台,SDK 不会记录每个会话和消息的已读状态,您需要在 localStorage 中记录每个会话的已读时间。
    4. 在渲染消息列表时,根据 localStorage 中时间判断消息是否已读,更新对应的消息界面。
  • Electron

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

调用 sendReadReceiptMessage 接口不会清除未读数,需单独调用清除未读数接口。

发送回执

通过 sendReadReceiptMessage 发送某个会话中的消息阅读回执。

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)
})
参数类型说明
targetIdstring接收回执方的用户 ID
messageUIdstring已读消息的UId
timestampnumber会话中已读的最后一条消息的发送时间戳, 即 Message 的 sentTime

设置消息回执监听器

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

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

移除消息回执监听

应用生命周期结束时,应当通过 removeEventListener 移除已经绑定的事件。

RongIMLib.removeEventListener(Events.READ_RECEIPT_RECEIVED, onReadReceiptReceived);