逐条消息已读功能
提示
逐条消息已读功能(消息已读 V5)从 SDK 1.5.0 版本开始支持。
逐条消息已读功能(消息已读 V5)支持逐条设置接收消息的已读状态,支持单聊和群聊会话类型。开发者需要提交工单开启逐条消息已读功能,开启后其它版本的消息已读功能失效。
发送消息
在发送消息时,如果需要支持已读回执,那么,需要在 Message
中设置 needReceipt
为 true。
消息对象新增属性
参数 | 类型 | 说明 |
---|---|---|
needReceipt | boolean | 是否支持发送已读回执 |
sentReceipt | boolean | 是否已经发送已读回执 |
示例代码
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数组。
参数说明
参数 | 类型 | 说明 |
---|---|---|
conId | ConversationIdentifier | 消息所属的会话标识 |
messageUidArray | Array<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
方法,接收已读回执信息。
参数说明
参数 | 类型 | 说明 |
---|---|---|
readReceiptNotifyArray | Array<ReadReceiptResponseV5> | 消息已读回执的响应信息 ReadReceiptResponseV5 数组 |
示例代码
Objective C
class MyReadReceiptListener implements MessageReadReceiptV5Listener {
onMessageReceiptResponse(
readReceiptNotifyArray: Array<ReadReceiptResponseV5>
): void {
// 接收到已读回执V5响应
}
}
IMEngine.getInstance().addMessageReadReceiptV5Listener(listener);
获取消息已读回信息
消息发送者可以通过 getMessageReadReceiptInfoV5
接口,传入会话标识(conId
)和消息的 UID 查询对应消息的已读回执信息。
参数说明
参数 | 类型 | 说明 |
---|---|---|
conId | ConversationIdentifier | 消息所属的会话标识 |
messageUidArray | Array<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
接口,分页获取消息的已读回执用户信息列表。
参数说明
参数 | 类型 | 说明 |
---|---|---|
conId | ConversationIdentifier | 消息所属的会话标识 |
msgUid | string | 消息唯一 ID |
option | ReadReceiptUsersOption | 分页配置信息 |
示例代码
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
接口,获取指定用户的消息已读回执信息。
参数说明
参数 | 类型 | 说明 |
---|---|---|
conId | ConversationIdentifier | 消息所属的会话标识 |
msgUid | string | 消息唯一 ID |
userArray | Array<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 {
// 批量获取用户指定群组消息是否已读状态失败
}
});