单聊消息回执
当 A 给 B 发送一条消息,B 用户调用发送阅读回执接口之后,A 用户可在回执监听中收到已读通知。
实现思路
通过以下步骤,即可以实现消息已读回执功能。Web 平台与 Electron 平台的实现流程有差异:
-
Web
- 在用户查看了某单聊会话的未读消息后,调用 sendReadReceiptMessage 发送已读回执。
- 通过 addEventListener 设置消息回执监听器。
- SDK 在收到消息已读回执时派发
READ_RECEIPT_RECEIVED
事件。在 Web 平台,SDK 不会记录每个会话和消息的已读状态,您需要在 localStorage 中记录每个会话的已读时间。 - 在渲染消息列表时,根据 localStorage 中时间判断消息是否已读,更新对应的消息界面。
-
Electron
- 在用户查看了某单聊会话的未读消息后,调用 sendReadReceiptMessage 发送已读回执。
- 通过 addEventListener 设置消息回执监听器。
- SDK 在收到消息已读回执时派发
READ_RECEIPT_RECEIVED
事件。 - 在 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)
})
参数 | 类型 | 说明 |
---|---|---|
targetId | string | 接收回执方的用户 ID |
messageUId | string | 已读消息的UId |
timestamp | number | 会话中已读的最后一条消息的发送时间戳, 即 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);