订阅用户在线状态
功能简介
在一些场景中(如社交聊天、会议等),您可能需要订阅用户的在线状态,判断用户的状态是 在线,离线,还是登出。
本文介绍了如何使用 ZIM SDK 订阅用户在线状态。
前提条件
已在项目中集成了 ZIM SDK 并实现了基本收发消息的功能,详情请参考 快速开始 - 实现基本收发消息。
获取用户在线状态
有以下两种方式可以获取用户在线状态: 实时获取用户在线状态
- userA 通过 subscribeUsersStatus 接口订阅了 userB 的在线状态并且监听了 userB 的在线状态更新事件。
- userB 的在线状态更新后(比如用户从在线状态变为离线状态),userA 会收到 userStatusUpdated 回调通知获取 userB 最新的在线状态。
主动查询用户在线状态
- 通过 querySubscribedUserStatusListWithConfig 接口可以主动查询已订阅用户当前的在线状态。
实现方式
订阅用户并监听已订阅用户的在线状态变更事件
说明
此方法适合实时获取已订阅用户的在线状态。
通过 subscribeUsersStatus 接口订阅需要关注在线状态的用户。
ZIMUserStatusSubscribeConfig *config = [[ZIMUserStatusSubscribeConfig alloc] init];
config.subscriptionDuration = 60 *24; // 订阅持续时间(以分钟为单位),有效范围为1到43200(30天)
[[ZIM getInstance] subscribeUsersStatus:@[@"userIdA",@"userIdB"] //请传入实际需要订阅的用户
config:config
callback:^(NSArray<ZIMErrorUserInfo *> *_Nonnull errorUserList,
ZIMError *_Nonnull errorInfo) {}];
监听用户在线状态变更事件,已订阅用户的在线状态变更都将通过 userStatusUpdated 返回。
// 定义用户在线状态数据
NSMutableDictionary<NSString *,ZIMUserStatus *> myUserStatusMap;
// 用户状态更新回调
- (void)zim:(ZIM *)zim userStatusUpdated:(NSArray<ZIMUserStatus *> *)userStatusList {
for (ZIMUserStatus *userStatus in userStatusList) {
// 直接用 userID 作为 key,存在则替换,不存在则添加
myUserStatusList[userStatus.userID] = userStatus;
}
//此时可以刷新 UI 或其他操作
}查询用户的在线状态
说明
此方法适合单次获取已订阅用户当前的在线状态。
通过 querySubscribedUserStatusListWithConfig 接口可以主动查询已订阅用户的在线状态。
ZIMSubscribedUserStatusQueryConfig *config = [[ZIMSubscribedUserStatusQueryConfig alloc] init];
// 查询的目标用户ID(单次查询最多200个用户)
// 当userIDs为空时,表示获取完整的订阅表信息
// 当userIDs不为空时,表示检查目标用户是否在订阅列表中
// 如果是,结果回调将包括他们的状态信息
// 如果不是,结果回调将不包括任何相关信息
config.userIDs = @[@"userIdA",@"userIdB"]; //请传入实际需要订阅的用户
