跳到主要内容
版本:5.X

群聊消息回执

群聊支持已读回执功能。本端用户向群组中发送消息后,可请求获取该条消息的已读数据。

实现思路

  1. 群成员 A 往群组发送了一条消息。消息将到达融云服务端,并由融云服务端发送到目标群组中。
  2. 在消息发出后,建议您在 UI 上向用户提供一个请求查看已读状态的按钮(展示 1~2 分钟)。发件人点击该按钮,表示需要获取消息已读数据,即发起群组消息已读回执请求(sendReadReceiptRequest)。
提示

在群聊场景中,建议让您的用户自行发起请求,按需获取消息的已读数据。如果针对每条消息都发起已读回执请求,且每个群成员都发送回执响应,可能会导致您的应用下出现大量的已读回执响应,影响用户的使用体验。

  1. 群组中其他成员监听到 A 发起的群消息已读回执请求(MESSAGE_RECEIPT_REQUEST),并在该群组中发送回执响应(sendReadReceiptResponseV2)。例如,群成员 B 阅读 A 发送的群消息后即可发起响应。
  2. A 用户监听群组中的回执响应。
    • 5.9.3 版本之前,用户需在本地维护该信息,比如 user_targetId_type:{'messageUid':['userId1', 'userId2']}。在 App 展示历史消息时,可先与缓存的数据进行匹配后展示,例如调整消息已读数。具体方案可根据实际场景实现。
    • 5.9.4 版本之后,SDK 内部维护了已读回执请求信息,并在历史消息列表里携带已读回执信息:readReceiptInfo, 在 Web 平台和 Electron 平台实现不同之处:
      • 在 Web 平台,SDK 内部会缓存每个群会话的最新 30 个已读回执信息(以已读回执请求的发送时间为准),缓存有效期为 24H。在发送消息回执响应时无需传 messageList 字段,SDK 会把该会话下的所有请求组织好然后发送响应。
      • 在 Electron 平台,用户需先获取历史消息,取出 message.messageDirection = MessageDirection.RECEIVE , readReceiptInfo. isReceiptRequestMessage = true 并且 readReceiptInfo.hasRespond = false 的数据组织成参数 messageList 来发送回执响应。

群聊已读回执时序图

发起已读回执请求

群成员希望获取已发消息的阅读状态数据,可发起群组消息已读回执请求。

调用 sendReadReceiptRequest 方法发起消息已读回执请求。

RongIMLib.sendReadReceiptRequest('targetId', 'BS4S-U34I-T4G6-9GPP')
.then((res) => {
if (res.code === 0) {
console.log(res.code, res.data)
} else {
console.log(res.code, res.msg)
}
})
.catch((error) => {
console.log(error)
})
参数类型说明
targetIdstring消息所属的会话 targetId,即群组 Id
messageUIdstring待查询的消息 messageUId,例如 BS4S-U34I-T4G6-9GPP

响应已读回执请求

提示

从 5.1.1 版本开始,废弃 sendReadReceiptResponse() 方法,新增 sendReadReceiptResponseV2 方法。

群组中其他成员监听到群消息已读回执请求后,消息接收者需要响应该请求,通知对方(消息发送者)已阅读此消息。可以一次响应同一会话中某个用户的多条消息。

调用 sendReadReceiptResponseV2 方法响应消息已读回执请求。

const messageList = {
'<用户Id1>': ['messageUId1', 'messageUId2'],
'<用户Id2>': ['messageUId3', 'messageUId4']
};

RongIMLib.sendReadReceiptResponseV2('<targetId>', messageList).then(res => {
if (res.code === 0) {
console.log(res.code, res.data)
} else {
console.log(res.code, res.msg)
}
}).catch(error => {
console.log(error)
})
参数类型必填说明
targetIdstring群 ID
messageList{[senderUserId: string]: string[]}会话中需要发送回执的消息列表, 在 5.9.4 版本起,Web 平台无需传此参数
channelIdstring

监听消息回执请求事件

通过 addEventListener 设置消息回执监听器,用于接收消息回执请求。

const Events = RongIMLib.Events
function onMessageReceiptRequest({conversation, messageUId, senderUserId}) {
// conversation 群组会话
// messageUId 需要回执的消息UId
// senderUserId 消息发送者Id
console.log(conversation, messageUId, senderUserId)
}
RongIMLib.addEventListener(
Events.MESSAGE_RECEIPT_REQUEST,
onMessageReceiptRequest
)

监听消息回执响应事件

通过 addEventListener 设置针对消息回执响应的监听器,用于接收消息回执。

const Events = RongIMLib.Events
function onMessageReceiptResponse({conversation, receivedUserId, messageUIdList}) {
// conversation 群组会话
// receivedUserId 为消息接收者,即谁响应了之前发送的消息回执请求
// messageUIdList 为 消息接收者已查看了的消息UId列表
console.log(conversation, receivedUserId, messageUIdList)
}
RongIMLib.addEventListener(
Events.MESSAGE_RECEIPT_RESPONSE,
onMessageReceiptResponse
)