处理未读 @ 消息
本文档描述了在超级群业务中如何实现获取全部未读 @ 消息、跳转到指定未读 @ 消息等功能。
提示
处理未读 @ 消息的功能依赖融云服务端保存的超级群会话未读 @ 消息摘要数据。@所有人消息的摘要数据固定存储 7 天(不支持调整)。其他类型 @ 消息的摘要数据与超级群历史消息存储时长一致。
获取全部未读 @ 消息
提示
IMLib SDK 版本 ≧ 5.2.5。
IMLib SDK 支持从远端获取指定超级群频道中的全部未读 @ 消息的摘要信息(MessageDigestInfo)列表。您可以通过返回的摘要信息,从远端取得未读的 @ 消息。
例如,您希 望获取仅展示未读 @ 消息的场景,步骤如下:
- 获取超级群频道下的未读 @ 消息摘要,最多可获取 50 条(
count取值范围为 [1-50])。成功回调中会返回MessageDigestInfo的列表。每个MessageDigestInfo对象包含一条未读消息的摘要信息。使用MessageDigestInfo中的摘要信息构造Message列表。每个消息对象需包含从MessageDigestInfo中获取的ConversationType,targetId,channelId,messageUid,sentTime。
示例代码
Java
String targetId = "会话 Id";
String channelId = "频道 ID";
long sendTime = 1662542712112L;
int count = 20;
ChannelClient.getInstance().getUltraGroupUnreadMentionedDigests(targetId, channelId, sendTime, count,
new IRongCoreCallback.ResultCallback<List<MessageDigestInfo>>() {
@Override
public void onSuccess(List<MessageDigestInfo> messageDigestInfos) {
List<Message> msgList = new ArrayList<>();
for (MessageDigestInfo info : messageDigestInfos) {
// 可使用 MessageDigestInfo 的属性筛选 @ 消息摘要
Message message = new Message();
message.setConversationType(info.getConversationType());
message.setTargetId(info.getTargetId());
message.channelId = info.getChannelId();
message.setUId(info.getMessageUid());
message.setSentTime(info.getSentTime());
// 从 5.6.0 开始,MessageDigestInfo 携带消息类型的唯一标识 ObjectName
message.setObjectName(info.getObjectName());
msgList.add(message);
}}
@Override
public void onError(IRongCoreEnum.CoreErrorCode errorCode) {
}});
-
您可以使用
getBatchRemoteUltraGroupMessages(msgList, callback)方法,传入上一步构建的消息列表,从远端批量提取 @ 消息的完整内容。JavaChannelClient.getInstance().getBatchRemoteUltraGroupMessages(msgList,
new IRongCoreCallback.IGetBatchRemoteUltraGroupMessageCallback(
@Override
public void onSuccess(List<Message> matchedMsgList, List<Message> notMatchedMsgList) {}
@Override
public void onError(IRongCoreEnum.CoreErrorCode errorCode) {}
));