逐条消息已读功能
- 逐条消息已读功能(消息已读 V5)从 SDK 5.20.0 版本开始支持。
- 使用此功能前,提交工单开启逐条消息已读功能,开启后单群聊已读回执功能失效。
逐条消息已读功能(消息已读 V5)支持逐条设置接收消息的已读状态,支持单聊和群聊会话类型。
发送消息
在发送消息时,如果需要支持已读回执,那么,需要在 Message
中设置 needReceipt
为 true
。
Message message = ...;
message.setNeedReceipt(true); // 设置为 true
RongCoreClient.getInstance().sendMessage(message, null , null, new IRongCoreCallback.ISendMessageCallback() {
/**
* 消息发送前回调, 回调时消息已存储数据库
* @param message 已存库的消息体
*/
@Override
public void onAttached(Message message) {
}
/**
* 消息发送成功。
* @param message 发送成功后的消息体
*/
@Override
public void onSuccess(Message message) {
}
/**
* 消息发送失败
* @param message 发送 失败的消息体
* @param errorCode 具体的错误
*/
@Override
public void onError(Message message, IRongCoreEnum.CoreErrorCode coreErrorCode) {
}
});
消息对象新增属性
参数 | 类型 | 说明 |
---|---|---|
needReceipt | boolean | 是否支持发送已读回执 |
sentReceipt | boolean | 是否已经发送已读回执 |
发送已读回执
消息接收方在阅读过某条消息后,需要主动发送已读回执给发送方。调用sendReadReceiptResponseV5()
方法,需要传入会话标识(identifier
)和消息唯一 ID。
参数 | 类型 | 说明 |
---|---|---|
identifier | ConversationIdentifier | 消息所属的会话标识 |
messageUIds | List | 发送已读回执的消息数组 |
callback | IRongCoreCallback.OperationCallback | 结果回调 |
ConversationIdentifier identifier = ConversationIdentifier.obtain(
Conversation.ConversationType.GROUP,
"targetId",
""
);
List<String> messageUIds = new ArrayList<>();
messageUIds.add("MessageUID");
RongCoreClient.getInstance().sendReadReceiptResponseV5(identifier, messageUIds, new IRongCoreCallback.OperationCallback() {
@Override
public void onSuccess() {
}
@Override
public void onError(IRongCoreEnum.CoreErrorCode coreErrorCode) {
}
});
接收已读回执回调
消息接收方发送已读回执后,消息发送方会收到有人发送已读回执的回调。开发者可以注册已读回执监听 addMessageReadReceiptV5Listener()
,实现 onMessageReceiptResponse()
方法,接收已读回执信息。
参数 | 类型 | 说明 |
---|---|---|
responses | List | 消息已读回执的响应信息 ReadReceiptResponseV5 列表 |
RongCoreClient.getInstance().addMessageReadReceiptV5Listener(new IRongCoreListener.MessageReadReceiptV5Listener() {
@Override
public void onMessageReceiptResponse(List<ReadReceiptResponseV5> responses) {
}
});
获取消息已读回信息
消息发送者可以通过 getMessageReadReceiptInfoV5()
接口,传入会话标识(identifier
)和消息的 UID 查询对应消息的已读回执信息。
参数 | 类型 | 说明 |
---|---|---|
identifier | ConversationIdentifier | 消息所属的会话标识 |
messageUIds | List | 发送已读回执的消息数组 |
callback | IRongCoreCallback.ResultCallback | 结果回调 |
在获取消息已读回执信息的结果回调中,,infoV5s
是 ReadReceiptInfoV5
列表,ReadReceiptInfoV5
的内容如下:
参数 | 类型 | 说明 |
---|---|---|
messageUId | String | 消息 UID |
unreadCount | int | 未读数量 |
readCount | int | 已读数量 |
totalCount | int | 总人数 |
ConversationIdentifier identifier = ConversationIdentifier.obtain(
Conversation.ConversationType.GROUP,
"targetId",
""
);
List<String> messageUIds = new ArrayList<>();
messageUIds.add("MessageUID");
RongCoreClient.getInstance().getMessageReadReceiptInfoV5(identifier, messageUIds, new IRongCoreCallback.ResultCallback<List<ReadReceiptInfoV5>>() {
@Override
public void onSuccess(List<ReadReceiptInfoV5> infoV5s) {
}
@Override
public void onError(IRongCoreEnum.CoreErrorCode e) {
}
});
分页获取已读回执用户列表
消息发送者可以通过 getMessagesReadReceiptUsersByPageV5()
接口,分页获取消息的已读回执用户信息列表。
参数 | 类型 | 说明 |
---|---|---|
identifier | ConversationIdentifier | 消息所属的会话标识 |
messageUId | String | 消息唯一 ID |
option | ReadReceiptUsersOption | 分页配置信息 |
callback | IRongCoreCallback.ResultCallback | 结果回调 |
在分页获取已读回执用户列表中,readReceiptUsersResult
是查询结果的封装信息 ReadReceiptUsersResult
,其内容如下:
参数 | 类型 | 说明 |
---|---|---|
users | List | 查询到的用户(ReadReceiptUser )列表 |
pageToken | String | 分页 Token,如果返回为空,表示没有下一页 |
totalCount | int | 用户总数 |
ConversationIdentifier identifier = ConversationIdentifier.obtain(
Conversation.ConversationType.GROUP,
"targetId",
""
);
ReadReceiptUsersOption option = new ReadReceiptUsersOption();
option.setPageToken("PAGE_TOKEN"); // 首次调用可以传空
option.setPageCount(20);
option.setOrder(ReadReceiptUsersOption.Order.DESCEND);
option.setReadStatus(ReadReceiptUsersOption.ReadStatus.UNREAD);
RongCoreClient.getInstance().getMessagesReadReceiptUsersByPageV5(identifier, "messageUId", option, new IRongCoreCallback.ResultCallback<ReadReceiptUsersResult>() {
@Override
public void onSuccess(ReadReceiptUsersResult readReceiptUsersResult) {
}
@Override
public void onError(IRongCoreEnum.CoreErrorCode e) {
}
});
获取指定用户的已读回执信息
消息发送者可以通过 getMessagesReadReceiptByUsersV5()
接口,获取指定用户的消息已读回执信息。
参数 | 类型 | 说明 |
---|---|---|
identifier | ConversationIdentifier | 消息所属的会话标识 |
messageUId | String | 消息唯一 ID |
userIds | List | 用户 ID 列表 |
callback | IRongCoreCallback.ResultCallback | 结果回调 |
在获取指定用户的已读回执信息中,readReceiptUsersResult
是查询结果的封装信息 ReadReceiptUsersResult
,其内容如下:
参数 | 类型 | 说明 |
---|---|---|
users | List | 查询到的用户(ReadReceiptUser )列表 |
pageToken | String | 分页 Token,本接口中不生效,可忽略 |
totalCount | int | 用户总数,本接口中不生效,可忽略 |
ConversationIdentifier identifier = ConversationIdentifier.obtain(
Conversation.ConversationType.GROUP,
"targetId",
""
);
List<String> userIds = new ArrayList<>();
userIds.add("UserId1");
RongCoreClient.getInstance().getMessagesReadReceiptByUsersV5(identifier, "messageUId", userIds, new IRongCoreCallback.ResultCallback<ReadReceiptUsersResult>() {
@Override
public void onSuccess(ReadReceiptUsersResult readReceiptUsersResult) {
}
@Override
public void onError(IRongCoreEnum.CoreErrorCode e) {
}
});