一、功能描述
单聊和群聊均支持消息已读回执功能,操作步骤一致。
注意:说明:
二、设置支持已读回执的群类型
如果是群消息已读回执,需要先在 即时通信 IM 控制台 > 功能配置 > 群组配置 > 群已读消息回执配置 中设置支持已读回执消息的群类型。
三、发送端设置消息需要已读回执
发送端创建消息后,先通过消息对象 V2TimMessage 的 needReadReceipt(点击查看详情) 字段设置消息需要已读回执,再发送消息到会话中。
示例代码如下:
V2TimValueCallback<V2TimMsgCreateInfoResult> createCustomMessageRes = await TencentImSDKPlugin.v2TIMManager .getMessageManager() .createCustomMessage( data: '正在输入中', );// 发送消息时,需要把needReadReceipt设置为true TencentImSDKPlugin.v2TIMManager.getMessageManager().sendMessage(id: createCustomMessageRes.data.id, receiver: "", groupID: "groupID",onlineUserOnly: true,needReadReceipt: true);
四、接收端发送消息已读回执
接收端收到消息后,可以通过消息对象 V2TIMMessage 的 needReadReceipt(点击查看详情) 字段判断消息是否需要已读回执,如果需要已读回执,当用户查看消息后,调用 sendMessageReadReceipts(点击查看详情) 接口发送消息已读回执。
示例代码如下:
V2TimCallback sendMessageReadReceipts = await TencentImSDKPlugin.v2TIMManager.getMessageManager().sendMessageReadReceipts(messageIDList: ['msgids']); if(sendMessageReadReceipts.code == 0){ // 成功 }else{ // 失败 }
五、发送端监听消息已读回执通知
接收端发送消息已读回执后,发送端可以通过 V2TimAdvancedMsgListener 的 onRecvMessageReadReceipts(点击查看详情) 回调监听消息已读回执通知,在通知中更新 UI,例如更新为 “2 人已读”。
示例代码如下:
onRecvMessageReadReceipts: (List<V2TimMessageReceipt> receiptList) { receiptList.forEach((element) { element.groupID; // 群id element.msgID; // 已读回执消息 ID element.readCount;// 群消息最新已读数 element.unreadCount;// 群消息最新未读数 element.userID; // C2C 消息对方 ID });},
六、发送端主动拉取消息已读回执信息
发送端从其他界面进入消息列表后,先拉取历史消息,再调用 getMessageReadReceipts(点击查看详情) 接口拉取消息已读回执信息。
其中已读回执信息 V2TimessageReceipt 字段含义如下:
| 属性 | 含义 | 说明 |
| msgID | 消息 ID | 消息唯一 ID |
| userID | 对端用户 ID | 如果是单聊,该字段表示对端用户 ID |
| isPeerRead | 消息对端用户是否已读 | 如果是单聊,该字段表示消息对端用户是否已读。 |
| timestamp | 对端用户标记会话已读时间 | 该字段在消息已读场景无效,如果是单聊,当对端用户调用 markC2CMessageAsRead 接口标记会话已读时,自己会收到的 onRecvC2CReadReceipt 回调,回调里会携带 timestamp 信息 |
| groupID | 群组 ID | 如果是群聊,该字段为群组 ID |
| readCount | 群消息已读人数 | 如果是群聊,该字段为群消息已读人数 |
| unreadCount | 群消息未读人数 | 如果是群聊,该字段为群消息未读人数 |
示例代码如下:
V2TimValueCallback<List<V2TimMessageReceipt>> getMessageReadReceipts = await TencentImSDKPlugin.v2TIMManager.getMessageManager().getMessageReadReceipts(messageIDList: []); if(getMessageReadReceipts.code == 0){ getMessageReadReceipts.data.forEach((element) { // 解析群消息已读回执 element.groupID; element.msgID; element.readCount; element.timestamp; element.unreadCount; element.userID; }); }
七、发送端主动拉取群消息已读或未读成员列表
发送端在需要查看群消息已读或未读成员列表时,可以调用 getGroupMessageReadMemberList(点击查看详情) 接口分页拉取消息已读或未读群成员列表。
V2TimValueCallback<V2TimGroupMessageReadMemberList> getGroupMessageReadMemberList = await TencentImSDKPlugin.v2TIMManager.getMessageManager().getGroupMessageReadMemberList(messageID: "", filter: GetGroupMessageReadMemberListFilter.V2TIM_GROUP_MESSAGE_READ_MEMBERS_FILTER_READ,); if(getGroupMessageReadMemberList.code == 0){ // 获取群消息已读未读群成员列表 getGroupMessageReadMemberList.data.isFinished; getGroupMessageReadMemberList.data.memberInfoList; getGroupMessageReadMemberList.data.nextSeq; }