逐条消息已读功能
重要提示
逐条消息已读功能(消息已读 V5)支持对每条消息分别处理已读状态,并提供消息级别的已读明细查询能力。
发送消息时开启已读 V5
如需支持 V5 已读回执,发送前需将消息对象的 needReceipt 设置为 true。
示例代码
提示
以下示例中,engine 是已初始化的 RCIMIWEngine 实例。关于如何初始化 SDK,请参考初始化文档。
Dart
final RCIMIWTextMessage? message = await engine.createTextMessage(
RCIMIWConversationType.private,
"targetId",
null,
"hello",
);
message?.needReceipt = true;
await engine.sendMessage(
message!,
callback: RCIMIWSendMessageCallback(
onMessageSaved: (msg) {},
onMessageSent: (code, msg) {},
),
);
消息对象新增属性
| 参数 | 类型 | 说明 |
|---|---|---|
needReceipt | bool | 是否支持发送已读回执(发送前配置) |
sentReceipt | bool | 是否已发送已读回执(SDK 内部维护) |
发送已读回执
消息接收方在阅读消息后,可调用 sendReadReceiptResponseV5 通知发送方已读。
方法
Dart
Future<int> sendReadReceiptResponseV5(
RCIMIWConversationType type,
String targetId,
String? channelId,
List<String> messageUIds, {
IRCIMIWSendReadReceiptResponseV5Callback? callback,
});
参数说明
| 参数名 | 参数类型 | 描述 |
|---|---|---|
type | RCIMIWConversationType | 会话类型,仅支持单聊和群聊 |
targetId | String | 会话目标 ID |
channelId | String? | 频道 ID,非超级群场景可传 null |
messageUIds | List<String> | 消息 UID 列表,最多 100 条 |
callback | IRCIMIWSendReadReceiptResponseV5Callback | 结果回调(onSuccess / onError) |
代码示例
Dart
await engine.sendReadReceiptResponseV5(
RCIMIWConversationType.group,
"groupId",
null,
["messageUId1"],
callback: IRCIMIWSendReadReceiptResponseV5Callback(
onSuccess: () {},
onError: (code) {},
),
);
接收已读回执回调
消息发送方可通过监听 onMessageReadReceiptV5Received 接收已读回执响应。
监听器
Dart
Function(List<RCIMIWReadReceiptResponseV5>? responses)? onMessageReadReceiptV5Received;
回调对象说明(RCIMIWReadReceiptResponseV5)
| 参数 | 类型 | 说明 |
|---|---|---|
conversationType | RCIMIWConversationType? | 会话类型 |
targetId | String? | 会话目标 ID |
channelId | String? | 频道 ID |
messageUId | String? | 消息 UID |
users | List<RCIMIWReadReceiptUser>? | 已读用户列表 |
readCount | int? | 已读人数 |
unreadCount | int? | 未读人数 |
totalCount | int? | 总人数 |
示例代码
提示
监听器应在 SDK 初始化完成后、连接成功前注册,以确保能够及时接收已读回执通知。
Dart
// 监听远端会话列表同步完成
engine.onMessageReadReceiptV5Received = (responses) {
// 处理回执响应
};
获取消息已读信息(批量)
消息发送方可调用 getMessageReadReceiptInfoV5 批量查询消息已读统计信息。
方法
Dart
Future<int> getMessageReadReceiptInfoV5(
RCIMIWConversationType type,
String targetId,
String? channelId,
List<String> messageUIds, {
IRCIMIWGetMessageReadReceiptInfoV5Callback? callback,
});
参数说明
| 参数名 | 参数类型 | 描述 |
|---|---|---|
type | RCIMIWConversationType | 会话类型 |
targetId | String | 会话目标 ID |
channelId | String? | 频道 ID |
messageUIds | List<String> | 待查询消息 UID 列表,最多 100 条 |
callback | IRCIMIWGetMessageReadReceiptInfoV5Callback | 结果回调(onSuccess 返回 List<RCIMIWReadReceiptInfoV5>?) |
结果对象说明(RCIMIWReadReceiptInfoV5)
| 参数 | 类型 | 说明 |
|---|---|---|
messageUId | String? | 消息 UID |
readCount | int? | 已读数 |
unreadCount | int? | 未读数 |
totalCount | int? | 总人数 |
示例代码
Dart
await engine.getMessageReadReceiptInfoV5(
RCIMIWConversationType.group,
"groupId",
null,
["messageUId1", "messageUId2"],
callback: IRCIMIWGetMessageReadReceiptInfoV5Callback(
onSuccess: (infos) {},
onError: (code) {},
),
);
按消息标识批量获取多会话已读信息
消息发送方可调用 getMessageReadReceiptInfoV5ByIdentifiers,批量查询多会话消息的已读统计信息。
方法
Dart
Future<int> getMessageReadReceiptInfoV5ByIdentifiers(
List<RCIMIWMessageIdentifier> identifiers, {
IRCIMIWGetMessageReadReceiptInfoV5Callback? callback,
});
参数说明
| 参数名 | 参数类型 | 描述 |
|---|---|---|
identifiers | List<RCIMIWMessageIdentifier> | 消息标识列表,最多 100 条 |
callback | IRCIMIWGetMessageReadReceiptInfoV5Callback | 结果回调(onSuccess 返回 List<RCIMIWReadReceiptInfoV5>?) |
消息标识对象说明(RCIMIWMessageIdentifier)
| 参数 | 类型 | 说明 |
|---|---|---|
conversationType | RCIMIWConversationType? | 会话类型,仅支持单聊和群聊 |
targetId | String? | 会话目标 ID |
channelId | String? | 频道 ID,非超级群场景可传 null |
messageUId | String? | 消息 UID |
示例代码
Dart
final identifiers = <RCIMIWMessageIdentifier>[
RCIMIWMessageIdentifier.create(
conversationType: RCIMIWConversationType.private,
targetId: "targetId1",
channelId: null,
messageUId: "messageUId1",
),
RCIMIWMessageIdentifier.create(
conversationType: RCIMIWConversationType.group,
targetId: "groupId1",
channelId: null,
messageUId: "messageUId2",
),
];
await engine.getMessageReadReceiptInfoV5ByIdentifiers(
identifiers,
callback: IRCIMIWGetMessageReadReceiptInfoV5Callback(
onSuccess: (infos) {},
onError: (code) {},
),
);
分页获取消息已读用户
消息 发送方可调用 getMessagesReadReceiptUsersByPageV5 分页查询指定消息的已读/未读用户。
方法
Dart
Future<int> getMessagesReadReceiptUsersByPageV5(
RCIMIWConversationType type,
String targetId,
String? channelId,
String messageUId,
RCIMIWReadReceiptUsersOption option, {
IRCIMIWGetMessagesReadReceiptUsersByPageV5Callback? callback,
});