Skip to main content

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.

tip

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

tip

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:

  1. Retrieve unread mention digests for an ultra group channel (maximum 50 entries, with count range [1-50]). The success callback returns a list of RCMessageDigestInfo objects, each containing digest information for one unread message.
    Construct an RCMessage list using the digest information, where each message object must include ConversationType, targetId, channelId, messageUid, and sentTime obtained from RCMessageDigestInfo.

     [[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) {}];
  2. Use the getBatchRemoteUltraGroupMessages method 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) {}];
tip

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.

  1. Retrieve unread mention digests for an ultra group channel (maximum 50 entries, with count range [1-50]). The success callback returns a list of RCMessageDigestInfo objects, 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) {}];
  2. Construct an RCHistoryMessageOption object for retrieving historical messages, using the sendTime from RCMessageDigestInfo as the recordTime value.

    RCHistoryMessageOption *option = [[RCHistoryMessageOption alloc] init];
    option.recordTime = time;
    option.count = count;
    option.order = RCHistoryMessageOrderDesc;
  3. (Optional) Adjust recordTime in RCHistoryMessageOption. The getMessages query results won't include messages where message.sentTime == recordTime. If needed, make the following adjustments based on Order to ensure desired messages are included:

    • RCHistoryMessageOrderDesc: recordTime = message.sentTime + 1
    • RCHistoryMessageOrderAsc: recordTime = message.sentTime - 1
  4. Use the ultra group RCChannelClient's getMessages interface 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.