跳到主要内容

逐条消息已读功能

提示

逐条消息已读功能(消息已读 V5)从 SDK 1.5.0 版本开始支持。

逐条消息已读功能(消息已读 V5)支持逐条设置接收消息的已读状态,支持单聊和群聊会话类型。开发者需要提交工单开启逐条消息已读功能,开启后其它版本的消息已读功能失效。

发送消息

在发送消息时,如果需要支持已读回执,那么,需要在 Message 中设置 needReceipt 为 true。

消息对象新增属性

参数类型说明
needReceiptboolean是否支持发送已读回执
sentReceiptboolean是否已经发送已读回执

示例代码

TypeScript
    let textMsg = new TextMessage();
textMsg.content = "hello,已读回执V5";
let msg = new Message(conId, textMsg);
msg.needReceipt = true;
let option: ISendMsgOption = {};
IMEngine.getInstance().sendMessage(msg, option, (msg: Message) => {

}).then(result => {
if (EngineError.Success !== result.code) {
// 发送消息失败
} else {
// 发送消息成功
}
})

发送已读回执

消息接收方在阅读过某条消息后,需要主动发送已读回执给发送方。调用sendReadReceiptResponseV5方法,需要传入会话标识(conId)和要发送回执的消息UId数组。

参数说明

参数类型说明
conIdConversationIdentifier消息所属的会话标识
messageUidArrayArray<string>发送已读回执的消息数组

示例代码

TypeScript
    let conId = new ConversationIdentifier();
conId.conversationType = ConversationType.Group;
conId.targetId = "TestTargetId";

let msgUidArray = new Array<String>();
let messageUid1 = "MessageUid1"; // 按需填写实际的 MessageUid
let messageUid2 = "MessageUid2"; // 按需填写实际的 MessageUid
msgUidArray.push(messageUid1);
msgUidArray.push(messageUid2);

IMEngine.getInstance().sendReadReceiptResponseV5(conId, msgUidArray).then(result2 => {
if (result2.code == EngineError.Success) {
// 发送已读回执V5成功
} else {
// 发送已读回执V5失败
}
})

接收已读回执回调

消息接收方发送已读回执后,消息发送方会收到有人发送已读回执的回调。开发者可以注册已读回执监听 addMessageReadReceiptV5Listener,实现 onMessageReceiptResponse 方法,接收已读回执信息。

参数说明

参数类型说明
readReceiptNotifyArrayArray<ReadReceiptResponseV5>消息已读回执的响应信息 ReadReceiptResponseV5 数组

示例代码

Objective C
class MyReadReceiptListener implements MessageReadReceiptV5Listener {
onMessageReceiptResponse(
readReceiptNotifyArray: Array<ReadReceiptResponseV5>
): void {
// 接收到已读回执V5响应
}
}

IMEngine.getInstance().addMessageReadReceiptV5Listener(listener);

获取消息已读回信息

消息发送者可以通过 getMessageReadReceiptInfoV5 接口,传入会话标识(conId)和消息的 UID 查询对应消息的已读回执信息。

参数说明

参数类型说明
conIdConversationIdentifier消息所属的会话标识
messageUidArrayArray<string>获取已读回执的消息数组

示例代码

TypeScript
    let conId = new ConversationIdentifier();
conId.conversationType = ConversationType.Group;
conId.targetId = "TestTargetId";

let msgUidArray = new Array<String>();
let messageUid1 = "MessageUid1"; // 按需填写实际的 MessageUid
let messageUid2 = "MessageUid2"; // 按需填写实际的 MessageUid
msgUidArray.push(messageUid1);
msgUidArray.push(messageUid2);

IMEngine.getInstance().getMessageReadReceiptInfoV5(conId, msgUidArray).then(result => {
if (result.code == EngineError.Success) {
// 批量获取消息已读信息成功
} else {
// 批量获取消息已读信息失败
}
});

分页获取已读回执用户列表

消息发送者可以通过 getMessagesReadReceiptUsersByPageV5 接口,分页获取消息的已读回执用户信息列表。

参数说明

参数类型说明
conIdConversationIdentifier消息所属的会话标识
msgUidstring消息唯一 ID
optionReadReceiptUsersOption分页配置信息

示例代码

TypeScript
    let conId = new ConversationIdentifier();
conId.conversationType = ConversationType.Group;
conId.targetId = "TestTargetId";

let messageUid = "MessageUid"; // 按需填写实际的 MessageUid
let pageToken = "";
let count = 10;
let readStatus = ReadReceiptStatus.Read;
let order = Order.Descending;

let option : ReadReceiptUsersOption = new ReadReceiptUsersOption();
option.pageToken = pageToken;
option.count = count;
option.readStatus = readStatus;
option.order = order;

IMEngine.getInstance().getMessagesReadReceiptUsersByPageV5(
conId,
msgUid,
option
).then(result => {
if (result.code == EngineError.Success) {
// 分页获取消息已读成员列表成功
} else {
// 分页获取消息已读成员列表失败
}
});

获取指定用户的已读回执信息

消息发送者可以通过 getMessagesReadReceiptByUsersV5 接口,获取指定用户的消息已读回执信息。

参数说明

参数类型说明
conIdConversationIdentifier消息所属的会话标识
msgUidstring消息唯一 ID
userArrayArray<string>用户 ID 数组

示例代码

TypeScript
    let conId = new ConversationIdentifier();
conId.conversationType = ConversationType.Group;
conId.targetId = "TestTargetId";

let msgUid = "MessageUid"; // 按需填写实际的 MessageUid

let userArray = new Array<String>();
let user1 = "user1"; // 按需填写实际的 user
let user2 = "user2"; // 按需填写实际的 user
userArray.push(user1);
userArray.push(user2);

IMEngine.getInstance().getMessagesReadReceiptByUsersV5(
conId,
msgUid,
userArray
).then(result => {
if (result.code == EngineError.Success) {
// 批量获取用户指定群组消息是否已读状态成功
} else {
// 批量获取用户指定群组消息是否已读状态失败
}
});