单群聊已读回执
已读回执功能可以让发送方知道消息是否被对方已读。
- 在单聊场景下,当接收方已读消息后,可以主动发送已读回执给发送方,发送方通过监听已读回执消息来获得已读通知。
- 在群聊场景下,当一条消息发送到群组后,发送方可以在消息发送完成后主动发起已读回执请求。群组中的其他成员在读到这条消息后,可以对请求进行响应。发送方通过监听已读回执响应结果来获知哪些群成员已读了这条消息。
SDK 提供了一个已读回执监听器 ReadReceiptListener,用于处理单聊、群聊已读回执相关的事件通知。
单聊已读回执
单聊已读功能需要消息接收方将阅读消息的时间戳传递给消息发送方,消息发送方通过该时间戳获取对应的阅读进度。IMLib SDK 定义了(SentStatus),用于记录单聊会话中的一条消息是否已被对方阅读,您可以通过获取本端发出的消息的发送状态(sentStatus
)属性查询具体阅读的状态。
发送单聊已读回执
消息接收方在阅读过某条消息后,需要调用 sendReadReceiptMessage 方法传入一个时间戳,主动发送已读回执给消息发送方。可以传入指定消息的发送时间 message.getSentTime()
),或者传入会话最后一条消息的发送时间(conversation.getSentTime()
)。单聊已读回执实际是一条已读通知消息,由 SDK 内部构建并发出
示例代码
Java
ConversationType conversationType = ConversationType.PRIVATE;
String targetId = "接收回执方的用户 ID ";
long timestamp = message.getSentTime();// 接收的消息的发送时间
RongCoreClient.getInstance().sendReadReceiptMessage(conversationType, targetId, timestamp, new IRongCoreCallback.ISendMessageCallback() {
@Override
public void onAttached(Message message) {
}
@Override
public void onSuccess(Message message) {
}
@Override
public void onError(Message message, IRongCoreEnum.CoreErrorCode CoreErrorCode) {
}
});
接收单聊已读回执
发送方需要使用 setReadReceiptListener 设置已读回执监听器,才能在收到单聊已读回执时收到通知。IMLib SDK 收到单聊消息的已读回执后,会读取其中携带的时间戳,将本地消息数据库中该单聊会话的早于该时间戳的所有消息的 SentStatus 属性改为 READ
,同时触发 ReadReceiptListener 的 onReadReceiptReceived
方法收取到该类通知。
示例代码
Java
RongCoreClient.setReadReceiptListener(new IRongCoreListener.ReadReceiptListener() {
@Override
public void onReadReceiptReceived(final Message message) {
// 此处为单聊消息回执回调方法,可在这做回执消息处理
Long timestamp = message.getContent().getLastMessageSendTime();
}
@Override
public void onMessageReceiptRequest(Conversation.ConversationType type, String targetId, String messageUId) {
// 此处为群聊, 消息回执请求消息回调方法
}
@Override
public void onMessageReceiptResponse(Conversation.ConversationType type, String targetId, String messageUId, HashMap<String, Long> respondUserIdList) {
// 此处为群聊, 消息回执响应消息回调方法
}
});
应用程序可以从 onReadReceiptReceived
方法中获取 Message
对象,并从其 content
属性中的消息内容体对象 ReadReceiptMessage 中获取其携带的时间戳。在 UI 展示本端已发送的消息时,可以将早于该时间戳的消息均展示为对方已读。