
IM即时通讯
安全可靠、全球互通

实时音视频
流畅稳定、省钱省力
回答:
消息已读回执功能是指,您可以在用户查看了某个会话中的未读消息之后,向对方发送已读回执,接收方可以根据此回执,在 UI 中更新消息的显示。
比如:B 用户给 A 用户发送了单聊消息,A 查看了 B 发过来的消息后,向 B 用户发送已读回执,B 用户所在客户端可以根据此回执,更新 UI 上此条消息的状态(如由“未读”改为“已读”)。
注意:消息已读回执支持单聊、群聊会话功能。
通过下面两步,即可以实现消息已读回执功能。
1、在用户查看了某单聊会话的未读消息后,调用 sendReadReceiptMessage 发送已读回执。
/**
* 发送某个会话中消息阅读的回执.
* 消息回执功能目前只支持单聊, 如果使用Lib可以注册监听 setReadReceiptListener ,
* 使用kit直接设置 rc_config.xml中rc_read_receipt为true
* @param conversationType 会话类型
* @param targetId 目标会话 ID
* @param timestamp 会话中用户已经阅读的最后一条消息的发送时间戳
(Message 的 sentTime 属性),代表用户已经阅读了该会话中此消息之前的所有消息。
*/public void sendReadReceiptMessage(Conversation.ConversationType conversationType, String targetId, long timestamp)
2、通过 setReadReceiptListener() 设置消息回执监听器。这样在收到消息回执时,会回调到该监听器的 onReadReceiptReceived() 方法,从而您可以在该方法里刷新对应的消息界面等。
/**
* 消息回执监听器
*/public interface ReadReceiptListener {
/**
* 收到消息回执
* @param message 封装了一个 ReadReceiptMessage
*/
void onReadReceiptReceived (Message message);
}
/**
* 设置消息回执监听器
* @param listener 消息回执监听器
*/public static void setReadReceiptListener(final ReadReceiptListener listener)
3、在 onReadReceiptReceived()
回调里,请先判断 message.getConversationType()
和 message.getTargetId()
和当前会话一致,然后在 UI 里把该会话中发送时间戳之前的所有已发送消息状态置为已读(底层数据库消息状态已经改为已读)。
void onReadReceiptReceived (Message message) {
if (mConversation != null && mConversation.getTargetId().equals(message.getTargetId()) && mConversation.getConversationType() == message.getConversationType()) {
ReadReceiptMessage content = (ReadReceiptMessage) message.getContent();
long ntfTime = content.getLastMessageSendTime(); //获取发送时间戳
... //自行进行UI处理,把会话中发送时间戳之前的所有已发送消息状态置为已读
}
}