logo
即时通讯
客户端 SDK
当前页

订阅用户在线状态


功能简介

在一些场景中(如社交聊天、会议等),您可能需要订阅用户的在线状态,判断用户的状态是 在线,离线,还是登出。

本文介绍了如何使用 ZIM SDK 订阅用户在线状态。

前提条件

已在项目中集成了 ZIM SDK 并实现了基本收发消息的功能,详情请参考 快速开始 - 实现基本收发消息

获取用户在线状态

有以下两种方式可以获取用户在线状态: 实时获取用户在线状态

  • userA 通过 subscribeUsersStatus 接口订阅了 userB 的在线状态并且监听了 userB 的在线状态更新事件。
  • userB 的在线状态更新后(比如用户从在线状态变为离线状态),userA 会收到 onUserStatusUpdated 回调通知获取 userB 最新的在线状态。

主动查询用户在线状态

实现方式

订阅用户并监听已订阅用户的在线状态变更事件

说明
此方法适合实时获取已订阅用户的在线状态。

通过 subscribeUsersStatus 接口订阅需要关注在线状态的用户。

final config = ZIMUserStatusSubscribeConfig();
config.subscriptionDuration = 60 * 24;
zim.subscribeUsersStatus(["userIdA", "userIdB"], config).then((errorUserList) {
});

监听用户在线状态变更事件,已订阅用户的在线状态变更都将通过 onUserStatusUpdated 返回。

// 定义用户在线状态数据
final Map<String, ZIMUserStatus> myUserStatusMap = {};

// 用户状态更新回调
ZIMEventHandler.onUserStatusUpdated = (List<ZIMUserStatus> userStatusList) {
  for (var status in userStatusList) {
    myUserStatusMap[status.userID] = status;
  }
  // TODO: 刷新 UI
};

查询用户的在线状态

说明
此方法适合单次获取已订阅用户当前的在线状态。

通过 querySubscribedUserStatusList 接口可以主动查询已订阅用户的在线状态。

// 查询订阅列表
final queryConfig = ZIMSubscribedUserStatusQueryConfig(userIDs: ["userIdA", "userIdB"]);
zim.querySubscribedUserStatusList(queryConfig).then((result) {
  for (var sub in result.userStatusSubscriptionList) {
    myUserStatusMap[sub.userStatus.userID] = sub.userStatus;
  }
  // TODO: 刷新 UI
});

Previous

噪声控制(ANS)

Next

在聊天页面中渲染对话消息

当前页

返回到顶部