上云无忧 > 文档中心 > 环信IM即时通讯使用教程(Windows) - 管理消息回执
IM即时通讯
环信IM即时通讯使用教程(Windows) - 管理消息回执

文档简介:
单聊会话支持消息送达回执、会话已读回执和消息已读回执,发送方发送消息后可及时了解接收方是否及时收到并阅读了信息,也可以了解整个会话是否已读。 群聊会话只支持消息已读回执。群主和群管理员在发送消息时,可以设置该消息是否需要已读回执。仅旗舰版及以上版本支持群消息已读回执功能。若要使用该功能,需在环信即时通讯云控制台 (opens new window)开通。
*此产品及展示信息均由环信官方提供。免费试用 咨询热线:400-826-7010,为您提供专业的售前咨询,让您快速了解云产品,助您轻松上云! 微信咨询
  免费试用、价格特惠

单聊会话支持消息送达回执、会话已读回执和消息已读回执,发送方发送消息后可及时了解接收方是否及时收到并阅读了信息,也可以了解整个会话是否已读。

群聊会话只支持消息已读回执。群主和群管理员在发送消息时,可以设置该消息是否需要已读回执。仅旗舰版及以上版本支持群消息已读回执功能。若要使用该功能,需在环信即时通讯云控制台 (opens new window)开通。

本文介绍如何使用环信即时通讯 IM Android SDK 实现单聊和群聊的消息回执功能。

技术原理

环信即时通讯 IM Windows SDK 通过 IChatManager 类提供消息已回执功能,包含的核心方法如下:

  • Options.RequireDeliveryAck 开启送达回执;
  • IChatManager.SendConversationReadAck 发出指定会话的已读回执;
  • IChatManager.SendMessageReadAck 发出指定单聊消息的已读回执;
  • SendReadAckForGroupMessage 发送群组消息的已读回执。

实现消息送达和已读回执的逻辑分别如下:

单聊消息送达回执:

  1. 消息发送方在发送消息前通过 ChatOptions.RequireDeliveryAck 开启送达回执功能;
  2. 消息接收方收到消息后,SDK 自动向发送方触发送达回执;
  3. 消息发送方通过监听 OnMessageDelivered 回调接收消息送达回执。

已读回执:

  • 单聊会话及消息已读回执
    1. 设置 RequireAck 为 true;
    2. 消息接收方收到消息后,调用 API SendConversationReadAck 或 SendMessageReadAck 发送会话或消息已读回执;
    3. 消息发送方通过监听 OnConversationRead 或 OnMessageRead 回调接收会话或消息已读回执。
  • 群聊只支持消息已读回执:
    1. 你可以通过设置 isNeedGroupAck 开启群聊消息已读回执功能;
    2. 消息接收方收到消息后通过 SendReadAckForGroupMessage 发送群组消息的已读回执。

前提条件

开始前,请确保满足以下条件:

  • 完成 SDK 初始化,并连接到服务器,详见 快速开始;
  • 了解环信即时通讯 IM 的使用限制,详见 使用限制;
  • 若使用群聊的消息已读回执功能,需联系商务开通。

实现方法

单聊消息送达回执

  1. 发送方若要接收消息送达回执,你需要将 Options 中的 RequireDeliveryAck 设为 true。当接收方收到消息后,SDK 底层会自动进行消息送达回执。
// 设置是否需要消息送达回执,设为 `true`。 Options.RequireDeliveryAck = true; 
 
  1. 发送方监听事件 OnMessagesDelivered 回调,收到接收方的送达回执。

// 继承并实现 `IChatManagerDelegate`。 public class ChatManagerDelegate : IChatManagerDelegate 
{ // 收到已送达回执。 public void OnMessagesDelivered(List<Message> messages) { } } // 注册监听器。
 ChatManagerDelegate adelegate = new ChatManagerDelegate(); SDKClient.Instance.ChatManager.AddChatManager
Delegate(adelegate); // 移除监听器。 SDKClient.Instance.ChatManager.RemoveChatManagerDelegate(adelegate); 
 

消息和会话的已读回执

消息已读回执用于告知单聊或群聊中的用户接收方已阅读其发送的消息。为降低消息已读回执方法的调用次数,SDK 还支持在单聊中使用会话已读回执功能,用于获知接收方是否阅读了会话中的未读消息。

单聊

单聊既支持消息已读回执,也支持会话已读回执。我们建议你按照如下逻辑结合使用两种回执,减少发送消息已读回执数量。

  • 聊天页面未打开时,若有未读消息,进入聊天页面,发送会话已读回执;
  • 聊天页面打开时,若收到消息,发送消息已读回执。

第一步是在设置中打开已读回执开关:

// 设置是否需要消息已读回执,设为 `true`。 Options.RequireReadAck = true; 
 

会话已读回执

参考以下步骤在单聊中实现会话已读回执。

  1. 接收方发送会话已读回执。

消息接收方进入会话页面,查看会话中是否有未读消息。若有,发送会话已读回执,没有则不再发送。

SDKClient.Instance.ChatManager.SendConversationReadAck(conversationId, new CallBack( onSuccess: () => 
{ }, onError:(code, desc) => { } )); 
 

  1. 消息发送方监听会话已读回执的回调。

// 继承并实现 `IChatManagerDelegate`。 public class ChatManagerDelegate : IChatManagerDelegate
 { // 收到已读回执。`from` 表示发送该会话已读回执的消息接收方,`to` 表示收到该会话已读回执的消息发送方。
 public void OnConversationRead(string from, string to) { } } // 注册监听器。 ChatManagerDelegate adelegate
 = new ChatManagerDelegate() SDKClient.Instance.ChatManager.AddChatManagerDelegate(adelegate); // 移除监听器。
 SDKClient.Instance.ChatManager.RemoveChatManagerDelegate(adelegate); 
 

同一用户 ID 登录多设备的情况下,用户在一台设备上发送会话已读回执,服务器会将会话的未读消息数置为 0,同时其他设备会收到 OnConversationRead 回调。

消息已读回执

参考如下步骤在单聊中实现消息已读回执。

  1. 接收方发送已读回执消息。

消息接收方进入会话时,发送会话已读回执。

SDKClient.Instance.ChatManager.SendConversationReadAck(conversationId, new CallBack( onSuccess:
 () => { }, onError:(code, desc) => { } )); 
 

在会话页面,接收到消息时,根据消息类型发送消息已读回执,如下所示:

// 继承并实现 `IChatManagerDelegate`。 public class ChatManagerDelegate : IChatManagerDelegate
 { // 收到已送达回执。 public void OnMessageReceived(List<Message> messages) { ...... sendReadAck(message)
; ...... } } // 注册监听器。 ChatManagerDelegate adelegate = new ChatManagerDelegate() SDKClient.Instance
.ChatManager.AddChatManagerDelegate(adelegate); // 发送已读回执。 public void sendReadAck(Message message)
 { // 这里是接收的消息,未发送过已读回执且是单聊。 if(message.Direction == MessageDirection.RECEIVE && !
message.HasReadAck && message.MessageType == MessageType.Chat) { MessageBodyType type = message.Body.Type; 
// 视频、语音及文件需要点击后再发送,可根据需求进行调整。 if(type == MessageBodyType.VIDEO || type ==
 MessageBodyType.VOICE || type == MessageBodyType.FILE) { return; } SDKClient.Instance.ChatManager.
SendMessageReadAck(message.MsgId, new CallBack( onSuccess: () => { }, onError: (code, desc) => { } ); } } 
 

  1. 消息发送方监听消息已读回调。

你可以调用接口监听指定消息是否已读,示例代码如下:

// 继承并实现 `IChatManagerDelegate`。 public class ChatManagerDelegate : IChatManagerDelegate 
{ // 收到消息已读回执。 public void OnMessagesRead(string from, string to) { } } // 注册监听器。
 ChatManagerDelegate adelegate = new ChatManagerDelegate() SDKClient.Instance.ChatManager.
AddChatManagerDelegate(adelegate); // 移除监听器。 SDKClient.Instance.ChatManager.RemoveChatManagerDelegate(adelegate); 
 

群聊

对于群聊,群主和群管理员发送消息时,可以设置该消息是否需要已读回执。若需要,每个群成员在阅读消息后,SDK 均会发送已读回执,即阅读该消息的群成员数量即为已读回执的数量。

仅旗舰版及以上版本支持群消息已读回执功能。若要使用该功能,需在环信即时通讯云控制台 (opens new window)开通。

  1. 群主或群管理员发送消息时若需已读回执,需设置 Message 中的 IsNeedGroupAck 为 true。
Message msg = Message.CreateTextSendMessage("to", "hello world"); msg.IsNeedGroupAck = true; 
 
  1. 消息接收方发送群组消息的已读回执。

void SendReadAckForGroupMessage(string messageId, string ackContent) { SDKClient.Instance.ChatManager.
SendReadAckForGroupMessage(messageId, ackContent,callback: new CallBack( onSuccess: () => { }, onError: (code, desc) => { } )); } 
 

  1. 消息发送方监听群组消息已读回调。

群组消息已读回调在消息监听类 IChatManagerDelegate 中实现。

// 继承并实现 `IChatManagerDelegate`。 public class ChatManagerDelegate : IChatManagerDelegate {
 // 收到群组消息的已读回执, 表明消息的接收方已阅读此消息。 public void OnGroupMessageRead(List<GroupReadAck> list)
 { } } // 注册监听器。 ChatManagerDelegate adelegate = new ChatManagerDelegate() SDKClient.Instance.ChatManager.
AddChatManagerDelegate(adelegate); 
 

  1. 消息发送方获取群组消息的已读回执详情。

你可以调用 FetchGroupReadAcks 获取群组消息的已读回执的详情,示例代码如下:

SDKClient.Instance.ChatManager.FetchGroupReadAcks(messageId, groupId, startAckId, pageSize, new 
ValueCallBack<List<GroupReadAck>>( onSuccess: (list) => { // 页面刷新等操作。 }, onError: (code, desc) => { } ));

相似文档
  • 为方便用户在聊天过程中对文字消息进行翻译,环信即时通讯 IM SDK 集成了 Microsoft Azure Translation API,支持在发送或接收消息时对文本消息进行按需翻译或自动翻译: 按需翻译:接收方在收到文本消息后,将消息内容翻译为目标语言。
  • 用户属性指实时消息互动用户的信息,如用户昵称、头像、邮箱、电话、性别、签名、生日等。 例如,在招聘场景下,利用用户属性功能可以存储性别、邮箱、用户类型(面试者)、职位类型(Web 研发)等。查看用户信息时,可以直接查询服务器存储的用户属性信息。
  • 用户完成登录后,就会进行添加联系人、获取好友列表等操作。 本文介绍如何通过环信即时通讯 IM SDK 管理好友关系,包括添加、同意、拒绝、删除、查询好友,以及管理黑名单,包括添加、移出、查询黑名单。
  • 功能描述: 群组是支持多人沟通的即时通讯系统,成员关系相对稳定。所有群成员可以收到群中的消息,可以在群中发送消息。群成员离线时可以收到推送消息。群组成员支持多种角色:群主、群管理员和普通成员。群组提供丰富的管理能力,如群组禁言、群公告和群文件等。
  • 群组是支持多人沟通的即时通讯系统,本文介绍如何使用环信即时通讯 IM SDK 在实时互动 app 中创建和管理群组,并实现群组相关功能。 如需查看消息相关内容,参见 消息管理。
官方微信
联系客服
400-826-7010
7x24小时客服热线
分享
  • QQ好友
  • QQ空间
  • 微信
  • 微博
返回顶部