处理未读 @ 消息
本页面描述了在超级群业务如何实现获取全部未读 @ 消息、跳转到指定未读 @ 消息等功能。
提示
本页面功能依赖融云服务端保存的超级群会话「未读 @ 消息摘要」数据。「@所有人」消息的摘要数据固定存储 7 天(不支持调整)。其他类型 @ 消息的摘要数据与超级群历史消息存储时长一致。
获取全部未读 @ 消息
提示
要求 SDK 版本 ≧ 5.2.5。
您需要先获取未读 @ 消息的摘要信息(MessageDigestInfo
)列表,再从远端提取未读的 @ 消息的完整内容。
例如,App 希望获取仅展示未读 @ 消息的场景,步骤如下:
-
获取超级群频道下的未读 @ 消息摘要,最多可获取 50 条(
count
取值范围为 [1-50])。成功回调中会返回MessageDigestInfo
的列表。每个MessageDigestInfo
对象包含一条未读消息的摘要信息。使用MessageDigestInfo
中的摘要信息构造Message
列表。每个消息对象需包含从MessageDigestInfo
中获取的ConversationType
,targetId
,channelId
,messageUid
,sentTime
。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)
方法,传入上一步构建的消息列表,从远端批量提取 @ 消息的完整内容。ChannelClient.getInstance().getBatchRemoteUltraGroupMessages(msgList,
new IRongCoreCallback.IGetBatchRemoteUltraGroupMessageCallback(
@Override
public void onSuccess(List<Message> matchedMsgList, List<Message> notMatchedMsgList) {}
@Override
public void onError(IRongCoreEnum.CoreErrorCode errorCode) {}
));