订阅用户在线状态
本文档旨在指导开发者如何在融云即时通讯 iOS 客户端 SDK 中实现用户在线状态的订阅、查询和监听。通过本文档,您将了解如何获取和跟踪其他用户在线状态,以及如何在状态变更时接收通知。
提示
订阅用户在线状态功能在 5.8.1 版本开始支持。
开通服务
使用订阅用户在线状态功能需要您在融云控制台界面,选择 IM 服务 > IM 服务管理 > 客户端用户在线状态订阅 ,开启服务。
监听订阅事件
为了及时接收订阅事件的变更通知,你需要在应用调用 IMLib SDK 的初始化之后,且在调用 IMLib SDK 的连接之前,设置订阅在线状态监听器的代理委托,并实现 RCSubscribeEventDelegate
协议的相关代理方法。
Objective C
[[RCCoreClient sharedCoreClient] addSubscribeEventDelegate:self];
[[RCCoreClient sharedCoreClient] removeSubscribeEventDelegate:self];
提示
您在处理订阅事件变更的通知时,需要根据回调方法中的 RCSubscribeType
的类型来处理对应的业务。在线订阅状态的类型为 RCSubscribeTypeOnlineStatus
。
- 从 5.10.0 版本开始,
RCSubscribeType
包含了在线状态订阅RCSubscribeTypeOnlineStatus
(1)、用户信息托管RCSubscribeTypeUserProfile
(2) 这2种类型。 - 从 5.12.0 版本开始,
RCSubscribeType
新增了好友在线状态订阅RCSubscribeTypeFriendOnlineStatus
(3)、好友用户信息托管RCSubscribeTypeFriendUserProfile
(4) 这2种类型。
实现代理:
-
您在连接 IM 成功后,IMLib SDK 内部会自动同步订阅数据的变动。当订阅数据成功同步到本地设备或系统后,会触发下面的方法,您可以在此方法中执行后续业务逻辑。
Objective C/// 已废弃,请使用 onSubscriptionSyncCompleted: 代替
- (void)onSubscriptionSyncCompleted;
/// 订阅数据同步完成
/// 使用 type 区分不同的订阅类型,等于 RCSubscribeTypeOnlineStatus 时代表在线状态订阅事件。
/// - Since: 5.10.0
- (void)onSubscriptionSyncCompleted:(RCSubscribeType)type; -
当订阅事件发生变化时,您可以通过实现此方法来处理事件的变化,例如去更新用户界面或处理新的数据。通常,该方法在后台线程中被调用,因此您需要切换到主线程去更新 UI。
subscribeEvents
是订阅事件的列表,包含所有发生变化的事件。 请注意,订阅过期没有通知,所以您需自行关注过期时间。Objective C/// 注意:从 5.10.0 版本开始,需要判断 RCSubscribeInfoEvent 的 subscribeType,等于 RCSubscribeTypeOnlineStatus 时代表在线状态订阅事件。
- (void)onEventChange:(NSArray<RCSubscribeInfoEvent *> *)subscribeEvents; -
当用户在其他设备上的订阅信息发生变更时,您可以在当前设备的此方法中更新当前设备上的状态信息,以保证订阅信息的一致性。
subscribeEvents
包含发生变化的订阅事件的列表。Objective C/// 从 5.10.0 版本开始,需要判断 RCSubscribeEvent 的 subscribeType,等于 RCSubscribeTypeOnlineStatus 时代表在线状态订阅事件。
- (void)onSubscriptionChangedOnOtherDevices:(NSArray<RCSubscribeEvent *> *)subscribeEvents;
订阅用户在线状态
- 您需要创建订阅请求对象
RCSubscribeEventRequest
,设置订阅类型为订阅在线状态RCSubscribeTypeOnlineStatus
, 并设置好需要订阅的所有用户的 userId 列表和订阅时长。
提示
- 单次订阅的用户的上限为 200 个用户。
- 总订阅上限为 1000 个用户。
- 单个用户最多可被 5000 个用户订阅。
Objective C
RCSubscribeEventRequest *request = [[RCSubscribeEventRequest alloc] init];
request.subscribeType = RCSubscribeTypeOnlineStatus;
request.userIds = @[@"test1",@"test2",@"test3"];
request.expiry = 180000;