IM 即时通讯
Android
开发指南

多端登录与互踢

更新时间: 2024/01/15 10:54:36

您可通过两种方式实现 IM 的多端登录与互踢。

方式1:通过云信控制台配置

当前 NIM SDK 支持通过云信控制台配置四种不同的 IM 多端登录策略:

  • 只允许一端登录,Windows、Web、Android、iOS 彼此互踢。
  • 桌面端 PC 与 Web 互踢,移动端 Android 和 iOS 互踢,且桌面端与移动端可同时登录
  • 各端均可以同时登录在线(最多10个设备同时在线)
  • 自定义多端登录配置

通过该方式的配置,可实现自动管控 IM 的多端登录。具体如何配置,请参见多端登录与互踢策略

方式2:主动将其他端踢下线

API 调用时序

uml diagram

踢方操作

步骤1:注册多端登录监听

调用observeOtherClients方法注册多端登录状态观察者,监听其他端的登录信息(OnlineClient)。本端未登录时,如有其他端使用相同的 IM 账号登录或注销,本端会收到通知;登录成功后,当有其他端登录或者注销时,本端也会收到通知。

参数 说明
observer 观察者,参数为同时登录的其他端信息。
如果有其他端注销,参数为剩余的在线端。
如果没有剩余在线端了,参数为 null。
register 是否注册观察者,注册为 true, 注销为 false

OnlineClient 接口说明:

返回值 方法 说明
String getOs() 客户端的操作系统信息
int getClientType() 客户端类型
long getLoginTime() 登录时间
String getClientIp() 客户端 IP
String getCustomTag() 登录自定义属性

示例代码如下:

Observer<List<OnlineClient>> clientsObserver = new Observer<List<OnlineClient>>() {
        @Override
        public void onEvent(List<OnlineClient> onlineClients) {
            if (onlineClients == null || onlineClients.size() == 0) {
                return;
            }
            OnlineClient client = onlineClients.get(0);
            switch (client.getClientType()) {
                case ClientType.Windows:
                // PC端
                    breakcase ClientType.MAC:
                // MAC端
                    break;
                case ClientType.Web:
                // Web端
                    break;
                case ClientType.iOS:
                // IOS端
                    breakcase ClientType.Android:
                // Android端
                    break;
                default:
                    break;
            }
        }
    };

NIMClient.getService(AuthServiceObserver.class).observeOtherClients(clientsObserver, true);

步骤2:将其他端踢下线

本端调用kickOtherClient方法主动将使用相同 IM 账号登录的其他设备端踢下线。

示例代码如下:

NIMClient.getService(AuthService.class).kickOtherClient(client).setCallback(new RequestCallback<Void>() {
    @Override
    public void onSuccess(Void param) {
        // 踢出其他端成功
    }

    @Override
    public void onFailed(int code) {
		// 踢出其他端失败,返回失败code
    }

    @Override
    public void onException(Throwable exception) {
		// 踢出其他端错误
    }
});

被踢方操作

被踢的设备端可在登录 IM 前,调用observeOnlineStatus监听自己的登录状态变化(示例代码见监听登录状态)。收到被踢回调(KICK_BY_OTHER_CLIENT)后,建议注销登录并切换到登录界面

此外,在被踢下线后,被踢端还可以调用如下两个方法获取将其踢下线的设备端的客户端类型。

此文档是否对你有帮助?
有帮助
去反馈
  • 方式1:通过云信控制台配置
  • 方式2:主动将其他端踢下线
  • API 调用时序
  • 踢方操作
  • 步骤1:注册多端登录监听
  • 步骤2:将其他端踢下线
  • 被踢方操作