Handling Unread Mentions
This document describes how to implement features such as retrieving all unread mentions and navigating to specific unread mentions in ultra group operations.
The functionality for handling unread mentions relies on the unread mention digest data stored by RC server for ultra group conversations. Digest data for @all messages is stored for a fixed period of 7 days (non-adjustable). Digest data for other types of mentions follows the same retention period as ultra group historical messages.
Retrieve All Unread Mentions
Requires IMLib SDK version ≧ 5.2.5.
The IMLib SDK supports retrieving digest information (RCMessageDigestInfo) lists for all unread mentions in a specified ultra group channel from the remote server. You can use the returned digest information to fetch the complete unread mention messages.
For example, to implement a scenario displaying only unread mentions:
-
Retrieve unread mention digests for an ultra group channel (maximum 50 entries, with
countrange [1-50]). The success callback returns a list ofRCMessageDigestInfoobjects, each containing digest information for one unread message.
Construct anRCMessagelist using the digest information, where each message object must includeConversationType,targetId,channelId,messageUid, andsentTimeobtained fromRCMessageDigestInfo.[[RCChannelClient sharedChannelManager] getUltraGroupUnreadMentionedDigests:targetID
channelId:channelID
sendTime:time
count:count
success:^(NSArray<RCMessageDigestInfo *> * _Nonnull digests) {
NSMutableArray *messages = [NSMutableArray array];
for (RCMessageDigestInfo *digest in digests) {
// Use RCMessageDigestInfo properties to filter mention digests
RCMessage *msg = [[RCMessage alloc] init];
msg.conversationType = digest.conversationType;
msg.targetId = digest.targetId;
msg.channelId = digest.channelId;
msg.sentTime = digest.sentTime;
msg.messageUId = digest.messageUid;
// Starting from 5.6.0, RCMessageDigestInfo includes message type identifier ObjectName
msg.objectName = digest.objectName;
[messages addObject:msg];}
}
error:^(RCErrorCode status) {}]; -
Use the
getBatchRemoteUltraGroupMessagesmethod with the constructed message list to batch retrieve complete mention message content from the remote server.[[RCChannelClient sharedChannelManager] getBatchRemoteUltraGroupMessages:messages
success:^(NSArray<RCMessage *> * _Nonnull matchedMsgList, NSArray<RCMessage *> * _Nonnull notMatchMsgList) {}
error:^(RCErrorCode status) {}];
Navigate to Specific Unread Mentions
Requires IMLib SDK version ≧ 5.2.5.
The getUltraGroupUnreadMentionedDigests interface enables navigation to specific mention positions when entering conversation details from an ultra group conversation list.
-
Retrieve unread mention digests for an ultra group channel (maximum 50 entries, with
countrange [1-50]). The success callback returns a list ofRCMessageDigestInfoobjects, each containing digest information for one unread message:[[RCChannelClient sharedChannelManager] getUltraGroupUnreadMentionedDigests:targetID
channelId:channelID
sendTime:time
count:count
success:^(NSArray<RCMessageDigestInfo *> * _Nonnull digests) {}
error:^(RCErrorCode status) {}]; -
Construct an
RCHistoryMessageOptionobject for retrieving historical messages, using thesendTimefromRCMessageDigestInfoas therecordTimevalue.RCHistoryMessageOption *option = [[RCHistoryMessageOption alloc] init];
option.recordTime = time;
option.count = count;
option.order = RCHistoryMessageOrderDesc; -
(Optional) Adjust
recordTimeinRCHistoryMessageOption. ThegetMessagesquery results won't include messages where message.sentTime == recordTime. If needed, make the following adjustments based onOrderto ensure desired messages are included:- RCHistoryMessageOrderDesc: recordTime = message.sentTime + 1
- RCHistoryMessageOrderAsc: recordTime = message.sentTime - 1
-
Use the ultra group
RCChannelClient'sgetMessagesinterface to retrieve historical messages before/after specific mentions for display.RCHistoryMessageOption *option = [[RCHistoryMessageOption alloc] init];
option.recordTime = time;
option.count = count;
option.order = RCHistoryMessageOrderDesc;
[[RCChannelClient sharedChannelManager] getMessages:ConversationType_ULTRAGROUP
targetId:targetID
channelId:channelID
option:option
complete:^(NSArray<RCMessage *> * _Nullable messages, RCErrorCode code) {
}];
Clear Unread Mentions
The method and timing for clearing unread mentions are the same as Clearing Message Unread Status.