跳到主要内容

多端同步阅读状态

在即时通讯业务中,同一用户账号可能在多个设备上登录。仅在开通多设备消息同步服务后,融云会在多个设备之间同步消息数据,但设备上的会话中消息的已读/未读状态仅存储在本地。因此,应用程序可能希望将用户当前登录设备上指定会话的已读/未读状态同步给其他终端。

提示

如果 SDK 版本 ≦ 5.6.2,不支持多端同步系统会话的阅读状态。

发起会话阅读状态同步

[[RCIMClient sharedRCIMClient] syncConversationReadStatus:ConversationType_PRIVATE targetId:@"targetId" time:1626422416809 success:^{

} error:^(RCErrorCode nErrorCode) {

}];

参数类型说明
conversationTypeRCConversationType会话类型
targetIdNSString会话 Id
timestamplong long消息时间戳,表示小于或等于此时间戳之前的消息为已读

接收多端同步阅读状态的通知

IMLib 在收到同步阅读状态通知时会分发一个 RCLibDispatchReadReceiptNotification 的通知。此时消息数据库中消息状态已经改为已读,应用程序可根据通知更新会话 UI,将 messageTime 以前的消息 UI 为已读。

[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(didReceiveReadReceiptNotification:)
name:RCLibDispatchReadReceiptNotification
object:nil];

Notification 的 object 为 nil,userInfo 为 NSDictionary 对象。

- (void)didReceiveReadReceiptNotification:(NSNotification *)notification {

RCConversationType conversationType = (RCConversationType)[notification.userInfo[@"cType"] integerValue];
long long readTime = [notification.userInfo[@"messageTime"] longLongValue];
NSString *targetId = notification.userInfo[@"tId"];
NSString *senderUserId = notification.userInfo[@"fId"];
}

NSDictionary 对象的 key 值说明:

key值类型说明
cTypeNSNumber会话类型
messageTimeNSNumber消息时间戳,表示小于或等于此时间戳之前的消息为已读
tIdNSStringA 的 targetID
fIdNSStringB 的 targetId