本文介绍消息已读未读的实现流程,包括发送者已读和接收者已读。

消息已读分为两种类型,发送者消息已读和接收者消息已读。
  • 发送者已读:作为消息的发送者发送的消息有多少接收者已读,是一个0~会话成员数的数字。
  • 接收者已读:消息接收者多端时,同步消息的已读状态。是一个布尔值,会影响自己的在某个会话的消息未读数,也就是会话的未读红点,同时影响消息发送方的消息未读的数字。

发送者已读

发送者已读
  1. 发送者发送消息后,接收者通过OnAddMessages收到新消息通知,同时会话未读数字+1。
  2. 当用户查看过消息后,开发者需要调用UpdateMessageToRead接口确认本条消息已读。
  3. 消息的发送方会接收到OnUnreadCountChange事件,告知之前的发送的消息,未读用户的数字发生变更。
  4. 持续收到未读数变更事件,直到未读数变为0,代表所有人已读消息。

消息未读数字是多端同步的,不同的端(iOS/Android)得到的未读数字相同,同样会收到变更事件。

除了被动等待OnUreadCountChange事件,群聊中发送者还可以主动查询哪些用户已读了自己发送的消息,通过调用接口ListMessagesReadStatus实现。

说明
  • 在调用接口ListMessagesReadStatus时,同样会收到OnMsgUnreadCountChanged事件。
  • 发送者只有消息发送成功了,消息的未读数字属性(AIMMessage.unreadCount)才是有效的。

接收者已读

接收者已读
接收者的消息已读主要体现在会话未读消息数字上,即会话红点,属于同一个帐号不同设备的同步,通过两种途径修改。
  • 设备A调用UpdateMessageToRead,设备B收到会话的事件OnUreadCountChange修改红点数。
  • 调用会话的接口ClearRedPoint,清理所有的会话红点数字。
    说明 接口ClearRedPoint调用并不是所有的未读消息全部已读,而是清理了自己帐号对个端的红点数字,消息发送者来说并不会收到已读变更事件。