单群聊已读回执
从 1.3.0 版本开始支持该功能。
已读回执功能可以让发送方知道消息是否被对方已读。
- 在单聊场景下,当接收方已读消息后,可以主动发送已读回执给发送方,发送方通过监听已读回执消息来获得已读通知。
- 在群聊场景下,当一条消息发送到群组后,发送方可以在消息发送完成后主动发起已读回执请求。群组中的其他成员在读到这条消息后,可以对请求进行响应。发送方通过监听已读回执响应结果来获知哪些群成员已读了这条消息。
SDK 提供了一个已读回执监听器 MessageReadReceiptListener
,用于处理单聊、群聊已读回执相关的事件通知。
单聊已读回执
单聊具体流程描述:
- 发送方发送消息:发送方 App/IMKit 发送任何的记录未读的消息,比如文本、图片等
- 接收方进入聊天页面看到最新消息
- 接收方发送单聊已读回执(带时间戳):接收方 App/IMKit 将当前会话最后一条消息的 sentTime 调用 IMEngine.sendReadReceiptMessage() 发出去
- 发送方接收单聊已读回执,将时间戳前的消息都置为已读:发送方收到单聊已读回执之后, SDK 将时间戳之前的本地消息都置为已读(SentStatus 设置为 Read),然后触发 MessageReadReceiptListener.onMessageReadReceiptReceived
- 发送方将聊天页面该回执前的消息变为已读:发送方 App/IMKit 的聊天页面收到 MessageReadReceiptListener.onMessageReadReceiptReceived 之后,把时间戳之前的消息 UI 都置为已读
备注:单聊如何查看消息已读?看 Message SentStatus == Read 代表已读
发送单聊已读回执
消息接收方在阅读过某条消息后,需要主动发送已读回执给发送方。调用 sendReadReceiptMessage
方法时需要传入一个时间戳。可以传入指定消息的发送时间(message.sentTime
),或者传入会话最后一条消息的发送时间(conversation.sentTime
)。
let conId = new ConversationIdentifier();
conId.conversationType = ConversationType.Private;
conId.targetId = "TestTargetId"; // 按需填写实际的会话 id
// 传入 message.sentTime 或 conversation.sentTime,此处用本地时间做示例
let time = Date.now();
IMEngine.getInstance().sendReadReceiptMessage(conId, time).then(result => {
if (EngineError.Success !== result.code) {
// 失败
return;
}
// 成功
});
单聊已读回执实际是一条已读通知消息,由 SDK 内部构建并发出。回调中返回的 Message
对象的content
属性包含类型为 ReadReceiptMessage
的消息内容体对象。