消息已读回执指的是,发送端往会话中发送消息,如果他想知道哪些人读过/还没读过这条消息,那么他就需要开启消息已读回执功能。
开启后,发送端发送消息时可以设置消息是否需要已读回执。如果设置为“需要”,接收端查看消息后才会发送自己已读回执给发送端。
如果是群消息已读回执,需要先在 即时通信 IM 控制台 >功能配置>登录与消息>群已读消息回执配置 中设置支持已读回执消息的群类型。
发送端创建消息,设置 needReadReceipt: true
,然后发送消息。
// 发送 C2C 消息
let message = tim.createTextMessage({
to: 'user1',
conversationType: TIM.TYPES.CONV_C2C,
payload: {
text: 'Hello world!'
},
// v2.20.0起支持C2C消息已读回执功能,如果您发消息需要已读回执,需购买旗舰版套餐,并且创建消息时将 needReadReceipt 设置为 true
needReadReceipt: true
});
// 2. 发送消息
let promise = tim.sendMessage(message);
promise.then(function(imResponse) {
// 发送成功
console.log(imResponse);
}).catch(function(imError) {
// 发送失败
console.warn('sendMessage error:', imError);
});
// 发送群消息
let message = tim.createTextMessage({
to: 'test',
conversationType: TIM.TYPES.CONV_GROUP,
payload: {
text: 'Hello world!'
},
// v2.18.0起支持群消息已读回执功能,如果您发消息需要已读回执,需购买旗舰版套餐,并且创建消息时将 needReadReceipt 设置为 true
needReadReceipt: true
});
// 发送消息
let promise = tim.sendMessage(message);
promise.then(function(imResponse) {
// 发送成功
console.log(imResponse);
}).catch(function(imError) {
// 发送失败
console.warn('sendMessage error:', imError);
});
接收端收到消息后,可以通过消息对象 Message
的 needReadReceipt
字段判断消息是否需要已读回执,如果需要已读回执,当用户查看消息后,调用 sendMessageReadReceipt 接口发送消息已读回执。
注意:
- v2.18.0起支持群消息已读回执功能。
- v2.20.0起支持 C2C 消息已读回执功能。
- messageList 里的消息必须在同一个 C2C 或 Group 会话中。
- 调用该接口成功后,会话未读数不会变化,消息发送者会收到 TIM.TYPES.MESSAGE_READ_RECEIPT_RECEIVED 事件,回调里面会携带消息的最新已读信息。
接口
tim.sendMessageReadReceipt(messageList);
参数
Name | Type | Description |
---|---|---|
messageList | Array | 同一群会话的消息列表,最大长度为30 |
返回值
Promise
对象。
示例
// 拉取群消息列表
let messageList = null;
tim.getMessageList({conversationID: 'GROUPtest', count: 15}).then(function(imResponse) {
messageList = imResponse.data.messageList; // 消息列表
tim.sendMessageReadReceipt(messageList).then(function() {
// 发送群消息已读回执成功
}).catch(function(imError) {
// 发送群消息已读回执失败
});
});
// 拉取C2C消息列表
let messageList = null;
tim.getMessageList({conversationID: 'C2Ctest', count: 15}).then(function(imResponse) {
messageList = imResponse.data.messageList; // 消息列表
tim.sendMessageReadReceipt(messageList).then(function() {
// 发送群消息已读回执成功
}).catch(function(imError) {
// 发送群消息已读回执失败
});
});
接收端发送消息已读回执后,发送端可以通过监听消息已读回执通知,在通知中更新 UI,例如更新为 “2 人已读”。
示例
let onMessageReadReceiptReceived = function(event) {
// event.data - 存储消息已读回执信息的数组
const readReceiptInfoList = event.data;
readReceiptInfoList.forEach((item) => {
const { groupID, userID, messageID, readCount, unreadCount, isPeerRead } = item;
// messageID - 消息 ID
// userID - C2C 消息接收方
// isPeerRead - C2C 消息对端是否已读
// groupID - 群组 ID
// readCount - 群消息已读人数
// unreadCount - 群消息未读人数
const message = tim.findMessage(messageID);
if (message) {
if (message.conversationType === TIM.TYPES.CONV_C2C) {
if (message.isPeerRead === true) {
// 对端已读
}
} else if (message.conversationType === TIM.TYPES.CONV_GROUP) {
if (message.readReceiptInfo.unreadCount === 0) {
// 全部已读
} else {
// message.readReceiptInfo.readCount - 消息最新的已读数
// 如果想要查询哪些群成员已读了此消息,请使用 [getGroupMessageReadMemberList] 接口
}
}
}
});
}
tim.on(TIM.EVENT.MESSAGE_READ_RECEIPT_RECEIVED, onMessageReadReceiptReceived);
发送端从其他界面进入消息列表后,先拉取历史消息,再调用 getMessageReadReceipt 接口拉取消息已读回执信息。
注意:
- v2.18.0起支持群消息已读回执功能。
- v2.20.0起支持 C2C 消息已读回执功能。
- messageList 里的消息必须在同一个 C2C 或 Group 会话中。
接口
tim.getMessageReadReceiptList(messageList);
参数
Name | Type | Description |
---|---|---|
messageList | Array | 同一群会话的消息列表 |
返回值
Promise
对象。
示例
// 拉取群消息列表
let messageList = null;
tim.getMessageList({conversationID: 'GROUPtest', count: 15}).then(function(imResponse) {
messageList = imResponse.data.messageList; // 消息列表
tim.getMessageReadReceiptList(messageList).then(function(imResponse) {
messageList = imResponse.data.messageList; // 消息列表
// 成功后,Message.readReceiptInfo 包含消息的已读回执信息
// Message.readReceiptInfo.readCount - 消息的已读数,如果想要查询哪些群成员已读了此消息,请使用 [getGroupMessageReadMemberList] 接口
// Message.readReceiptInfo.unreadCount - 消息的未读数,当为0的时候,表示“全部已读”。
}).catch(function(imError) {
// 拉取已读回执列表失败
});
});
// 拉取 C2C 消息列表
let messageList = null;
tim.getMessageList({conversationID: 'C2Ctest', count: 15}).then(function(imResponse) {
messageList = imResponse.data.messageList; // 消息列表
tim.getMessageReadReceiptList(messageList).then(function(imResponse) {
messageList = imResponse.data.messageList; // 消息列表
// 成功后,Message.readReceiptInfo 包含消息的已读回执信息
// Message.readReceiptInfo.isPeerRead - 对端是否已发送已读回执
}).catch(function(imError) {
// 拉取已读回执列表失败
});
});
发送端在需要查看群消息已读或未读成员列表时,可以调用 getGroupMessageReadMemberList 接口分页拉取消息已读或未读群成员列表。
注意:v2.18.0起支持。
接口
tim.getGroupMessageReadMemberList(options);
参数
参数 options 为 Object 类型,包含的属性值如下:
名称 | 类型 | 描述 |
---|---|---|
message | Message | 消息实例 |
cursor | String | 分页拉取的游标,第一次拉取传'' |
filter | Number | 指定拉取已读或未读群成员列表。0 - 拉取已读成员列表;1 - 拉取未读成员列表 |
count | Number | 分页拉取的个数,最大支持 100 个 |
返回值
Promise
对象。
示例
// 拉取群消息已读成员列表
let promise = tim.getGroupMessageReadMemberList({
message,
filter: 0,
cursor: '', // 第一次拉取传''
count: 30,
});
promise.then(function(imResponse) {
const { isCompleted, cursor, messageID, readUserIDList } = imResponse.data;
// isCompleted - true,拉取完成;false 未完成
// cursor - 当 isCompleted 为 false 的时候用于续拉
// messageID - 群消息的 ID
// readUserIDList - 已读的群成员 userID 列表
}).catch(function(imError) {
// 拉取群消息已读群成员列表失败
});
// 拉取群消息未读成员列表
let promise = tim.getGroupMessageReadMemberList({
message,
filter: 1,
cursor: '', // 第一次拉取传''
count: 30,
});
promise.then(function(imResponse) {
const { isCompleted, cursor, messageID, readUserIDList } = imResponse.data;
// isCompleted - true,拉取完成;false 未完成
// cursor - 当 isCompleted 为 false 的时候用于续拉
// messageID - 群消息的 ID
// unreadUserIDList - 未读的群成员 userID 列表
}).catch(function(imError) {
// 拉取群消息未读群成员列表失败
// 10062 - 找不到群消息的已读回执信息
});
本页内容是否解决了您的问题?