Android

登录/登出聊天室

更新时间: 2024/03/14 16:36:34

用户在聊天室收发消息前需要先调用 SDK 的聊天室登录接口进入聊天室。登录成功后,用户才能正常在聊天室收发消息并使用其他聊天室相关功能。

本文介绍实现聊天室登录的流程以及相关常见问题。

前提条件

实现登录聊天室前,请确保:

登录聊天室

步骤1:准备 Token

登录聊天室需要通过token进行鉴权。云信提供静态和动态这两种 token 类型,您可根据业务需求进行选择。

  • 静态token:默认为永久有效。如有需要,可通过云信服务端 API 主动刷新 Token

  • 动态token:具备时效性,可在生成时设置token的有效期。

获取静态Token

  • 方式1:在控制台获取静态 Token

    如果您只需要进行简单的体验或者快速测试,那么可以在云信控制台创建测试用的 IM 账号,并获取与该 IM 账号相应的静态token。具体参见注册调试用的 IM 账号。获取的静态token可用于下文提及的静态 Token 登录的鉴权。

  • 方式2:调用服务端 API 获取静态 Token

    如果您有正式的生产环境,且您的业务仅需保障基础的用户信息安全,那么需要通过云信 IM 服务端 API 注册 IM 账号,并获取与之相对应的静态token。具体参见注册云信 IM 账号。获取的静态token可用于静态 Token 登录的鉴权

获取动态Token

如果您有正式的生产环境,且您的业务对用户信息安全有较高的要求,可使用动态token进行鉴权。

  1. 注册云信 IM 账号,获取 IM 账号(accid)和静态token

  2. 基于App Key、App Secret 和accid,通过约定算法在应用服务端生成动态token

  3. 客户端可通过在初始化时实现 chatroomAuthProvider 方法,从回调中获取聊天室动态 token

获取动态LoginExt

NIM SDK 也支持获取动态的登录自定义扩展字段 loginExt。动态 loginExt 适用于所有登录模式,其中,在第三方回调登录模式中使用动态 loginExt 时,第三方服务器可以使用该字段来进行鉴权。

客户端可通过在初始化时实现 chatroomLoginExtProvider 方法,从回调中获取聊天室动态 loginExt

动态获取 Token 和 LoginExt 示例代码

实现方法:

// 聊天室登陆时的Token回调接口
// 注意:聊天室使用动态登录(即LoginInfo.authType为1)时,必须设置 
ChatRoomAuthProvider chatroomAuthProvider  = new ChatRoomAuthProvider() {
    @Override
    public String getToken(String account, String roomId, String appKey) {
        String chatroomAuthProviderOverride =  sp.getString(LoginSettingActivity.KEY_CHATROOM_AUTH_PROVIDER_OVERRIDE, "");
        if (!TextUtils.isEmpty(chatroomAuthProviderOverride)) {
            return chatroomAuthProviderOverride;
        } else {
            return DemoAuthProvider.getTokenFromServer(account);
        }
    }
};

// 聊天室登陆时的LoginExt回调接口实现
ChatRoomLoginExtProvider chatroomLoginExtProvider = new ChatRoomLoginExtProvider() {
    @Override
    public String getLoginExt(String account, String roomId, String appKey) {
        return sp.getString(LoginSettingActivity.KEY_CHATROOM_LOGIN_EXT_PROVIDER_OVERRIDE, "");
    }
};

SDKOptions options = new SDKOptions();
options.chatroomAuthProvider = chatroomAuthProvider;
options.chatroomLoginExtProvider = chatroomLoginExtProvider;

步骤2:注册相关监听

调用初始化接口前,需要先监听聊天室连接状态变化和自动登录失败事件。

监听聊天室连接状态

调用 ChatRoomServiceObserver.observeOnlineStatus 方法注册在线状态变化观察者,监听聊天室登录状态变化。注册后,观察者(Observer)的 onEvent 回调函数会立即被调用一次,告知观察者当前的登录状态(StatusCode)。该回调主要用于客户端 UI 刷新。

StatusCode 枚举各属性的详细说明和具体转换流程与 IM 登录相同,具体请参考登录状态转换流程

示例代码如下:

Observer<ChatRoomStatusChangeData> onlineStatus = new Observer<ChatRoomStatusChangeData>() {
    @Override
    public void onEvent(ChatRoomStatusChangeData chatRoomStatusChangeData) {
        if (!chatRoomStatusChangeData.roomId.equals(roomId)) {
            return;
        }
        if (chatRoomStatusChangeData.status == StatusCode.CONNECTING) {
            // 连接中...
        } else if (chatRoomStatusChangeData.status == StatusCode.LOGINING) {
            // "登录中..."
        } else if (chatRoomStatusChangeData.status == StatusCode.LOGINED) {
            // "已登陆"
        } else if (chatRoomStatusChangeData.status == StatusCode.UNLOGIN) {
            // 登出的状态
        } else if (chatRoomStatusChangeData.status == StatusCode.NET_BROKEN) {
            // "当前网络不可用"
        }
    }
};

// 注册监听
NIMClient.getService(ChatRoomServiceObserver.class).observeOnlineStatus(onlineStatus, true);
// 注销监听
NIMClient.getService(ChatRoomServiceObserver.class).observeOnlineStatus(onlineStatus, false);

查询登录聊天室失败原因

在上述状态变更观察者(observeOnlineStatus)回调中可以调用 getEnterErrorCode 获取登录聊天室失败的错误码(失败原因),并在界面上做相应的处理。

  • 当调用 enterChatRoom 方法登录聊天室时,该方法回调函数中会直接返回错误码(失败原因)。
  • 当成功进入聊天室后,因为网络状态差或其他问题导致网络超时时,SDK 会持续有策略地进行自动重连,如果断网自动重连失败时(即监听到在线状态变更为 UNLOGIN 时),可以采调用getEnterErrorCode 接口查看登录失败的具体原因。

示例代码如下:

Observer<ChatRoomStatusChangeData> onlineStatus = new Observer<ChatRoomStatusChangeData>() {
    @Override
    public void onEvent(ChatRoomStatusChangeData chatRoomStatusChangeData) {
        if (!chatRoomStatusChangeData.roomId.equals(roomId)) {
            return;
        }
        if (chatRoomStatusChangeData.status == StatusCode.CONNECTING) {
            // 连接中...
        } else if (chatRoomStatusChangeData.status == StatusCode.LOGINING) {
            // "登录中..."
        } else if (chatRoomStatusChangeData.status == StatusCode.LOGINED) {
            // "已登陆"
        } else if (chatRoomStatusChangeData.status == StatusCode.UNLOGIN) {
            // 登出的状态
            /** 获取进入聊天室失败的错误码
            * 如果是手动登录,在enterChatRoom的回调函数中已有错误码。
            * 如果是断网重连,在自动登录失败时,即监听到在线状态变更为UNLOGIN时,可以采用此接口查看具体自动登录失败的原因。
            */
            int code = NIMClient.getService(ChatRoomService.class).getEnterErrorCode(roomId);
        } else if (chatRoomStatusChangeData.status == StatusCode.NET_BROKEN) {
            // "当前网络不可用"
        }
    }
};

步骤3:登录

NIM SDK 聊天室只能手动调用登录接口(enterChatRoomEx)进入聊天室,对应用户手动输入登录账号密码的场景。

支持同时进入 10 个聊天室。

登录方式概览

聊天室登录方式分为两大类,以独立模式登录聊天室和非独立模式登录聊天室。两种模式下又分别支持静态 token 鉴权动态 token 鉴权通过第三方回调鉴权

  • 非独立模式:先完成 IM 登录,再登录聊天室的方式,针对需要 IM 和聊天室功能的业务场景。

  • 独立模式:在 IM 处于未登录的情况下,登录聊天室的方式,针对只需要聊天室功能的业务场景。

    独立模式下可通过 EnterChatRoomData - isAnonymousMode 字段选择是否匿名登录聊天室。匿名登录聊天室的用户,只能接收消息,不能发送消息。

模式1:非独立模式

静态 Token 登录
  1. 成功登录 IM

    采用非独立模式&静态登录方式鉴权时,需要确保调用 AuthService#login 方法登录 IM 时传入了静态 token。非独立模式静态登录聊天室时使用已传入的静态 token。

  2. 设置 EnterChatRoomData 的各项属性。

    EnterChatRoomData 部分参数说明如下:

    参数 类型 是否必传 说明
    roomId String 聊天室 ID
    independentMode Boolean 是否为独立登录模式,默认为 false,即默认为非独立模式,因此非独立模式下该参数无需设置
    loginAuthType Integer 聊天室鉴权方式,采用静态 Token 鉴权方式时传入 0(默认)
    loginExt String 聊天室登录自定义扩展字段,若在初始化时实现了 chatroomLoginExtProvider 方法,并且回调该方法时返回了非空的 loginExt 值,则优先取返回值,忽略此处输入的 loginExt 值
  3. 调用 enterChatRoomEx 方法进入聊天室。

    示例代码如下:

    EnterChatRoomData data = new EnterChatRoomData(roomId);
    data.setLoginAuthType(0);	// 静态 Token,传入0; 可使用 loginInfo.getAuthType();
    data.setLoginExt("设置登录自定义字段"); // 可使用 loginInfo.getLoginExt();
    
    AbortableFuture<EnterChatRoomResultData> enterRequest = NIMClient.getService(ChatRoomService.class).enterChatRoomEx(data, 1);
    
动态 Token 登录

NIM SDK 支持聊天室动态 token 登录这一登录方式。该登录方式的 token 具备时效性,可有效提升 token 破解难度,降低密码泄露风险。

  1. 初始化时,实现 SDKOptions#chatroomAuthProvider 获取动态 token。

  2. 成功登录 IM

  3. 设置 EnterChatRoomData 的各项属性。

    EnterChatRoomData 部分参数说明如下:

    参数 类型 是否必传 说明
    roomId String 聊天室 ID
    independentMode Boolean 是否为独立登录模式,默认为 false,即默认为非独立模式,因此非独立模式下该参数无需设置
    loginAuthType Integer 聊天室鉴权方式,采用动态 Token 鉴权方式时传入 1
    loginExt String 聊天室登录自定义扩展字段,若在初始化时实现了 chatroomLoginExtProvider 方法,并且回调该方法时返回了非空的 loginExt 值,则优先取返回值,忽略此处输入的 loginExt 值

    为兼容历史接口,动态 Token 取值优先级如下:

    • 若在初始化时实现了 SDKOptions#chatroomAuthProvider 方法并且回调中返回了非空的 token 值,则优先取该返回值;
    • 若未实现 SDKOptions#chatroomAuthProvider 方法或者实现了但是回调中返回空值,则取 setChatRoomAuthProvider 中返回的动态 token。
  4. 调用 enterChatRoomEx 方法进入聊天室。

    示例代码如下:

    EnterChatRoomData data = new EnterChatRoomData(roomId);
    data.setLoginAuthType(1);	// 动态 Token,传入1; 可使用 loginInfo.getAuthType();
    data.setLoginExt("设置登录自定义字段"); // 可使用 loginInfo.getLoginExt();
    if(loginAuthType == 1)
    {
        // 若未实现 SDKOptions#chatroomAuthProvider 方法或者实现了但是回调中返回空值,则取 setChatRoomAuthProvider 中返回的动态 token。
        data.setChatRoomAuthProvider(new ChatRoomAuthProvider() {
            @Override
            public String getToken(String roomId,String account) {
                // return dynamicToken;
            }
        });
    }
    
    AbortableFuture<EnterChatRoomResultData> enterRequest = NIMClient.getService(ChatRoomService.class).enterChatRoomEx(data, 1);
    
第三方回调登录

如采用第三方鉴权登录方式,云信服务端不做聊天室登录鉴权,鉴权工作需由指定的第三方服务器(可以是应用服务器)进行。

第三方服务器可通过回调获取的动态 token 和动态 loginExt 来实现鉴权登录聊天室。

  1. 前往云信控制台,开通和配置第三方服务

  2. 在初始化时实现 chatroomAuthProviderchatroomLoginExtProvider 方法,SDK 会在登录过程时动态获取第三方回调的动态 Token 和动态扩展字段(loginExt)。

  3. 成功登录 IM

  4. 设置 EnterChatRoomData 的各项属性。

    EnterChatRoomData 部分参数说明如下:

    参数 类型 是否必传 说明
    roomId String 聊天室 ID
    independentMode Boolean 是否为独立登录模式,默认为 false,即默认为非独立模式,因此非独立模式下该参数无需设置
    loginAuthType Integer 聊天室鉴权方式,采用第三方回调 Token 鉴权方式时传入 2
    loginExt String 聊天室登录自定义扩展字段,第三方服务器可以使用该字段来鉴权。若在初始化时实现了 chatroomLoginExtProvider 方法,并且回调该方法时返回了非空的 loginExt 值,则优先取返回值,忽略此处输入的 loginExt 值
  5. 调用 enterChatRoomEx 方法进入聊天室。

    示例代码如下:

    EnterChatRoomData data = new EnterChatRoomData(roomId);
    data.setLoginAuthType(2);	// 第三方登录 Token,传入2; 可使用 loginInfo.getAuthType();
    data.setLoginExt("设置登录自定义字段"); // 可使用 loginInfo.getLoginExt();
    
    AbortableFuture<EnterChatRoomResultData> enterRequest = NIMClient.getService(ChatRoomService.class).enterChatRoomEx(data, 1);
    
  6. 发起聊天室登录回调的请求,由第三方服务器进行鉴权并判定聊天室登录事件是否放行通过。

    若不通过,云信服务端将返回 302 错误码。

模式2:独立模式

在 IM 处于未登录的情况下,登录聊天室的方式,针对只需要聊天室功能的业务场景。

独立模式由于不依赖 IM 连接,SDK 无法自动获取聊天室服务器的地址,需要客户端向开发者应用服务器请求该地址,而应用服务器需要向网易云信服务器请求,然后将请求结果原路返回给客户端。因此 SDK 需要提前注册获取聊天室地址的回调方法(ChatRoomIndependentCallback)。

独立模式下可通过鉴权方式分为静态 token 登录方式、动态 token 登录方式以及第三方回调登录方式。

  • 当选择以独立模式登录聊天室时,必须将 independentMode 设置为 true。

  • 可以通过 isAnonymousMode 字段来设置是否以匿名模式登录聊天室。其中 isAnonymousModeaccount 存在以下关联:

    • 若未设置 isAnonymousMode 参数,则根据是否传入 account 参数来判断是否为匿名模式登录,即不传 account 则为匿名模式登录;传入 account 参数则为非匿名模式登录。

    • 若已设置为匿名模式登录(isAnonymousMode 为 true),SDK 将使用自动生成的匿名账号进行登录。若此时 account 不为空,则表示匿名模式下自定义账号名。

    • 匿名登录聊天室的用户,只能接收消息,不能发送消息。

    • 匿名登录时必须设置匿名用户在聊天室中的昵称(nick)和头像(avatar)。

静态 Token 登录
  1. 设置 EnterChatRoomData 的各项属性,并注册获取聊天室地址的回调方法(ChatRoomIndependentCallback)。

    EnterChatRoomData 部分参数说明如下:

    参数 类型 是否必传 说明
    roomId String 聊天室 ID
    independentModeCallback ChatRoomIndependentCallback 独立模式回调函数,用于 SDK 向 APP 获取聊天室地址信息的数据
    independentMode Boolean 是否为独立登录模式,独立模式下需设置为 true
    isAnonymousMode Boolean 是否为匿名登录模式,匿名模式下需设置为 true
    account String 独立登录模式下的用户账号
    • 若未设置 isAnonymousMode 参数,则根据是否传入 account 参数来判断是否为匿名模式登录,即不传 account 则为匿名模式登录;传入 account 参数则为非匿名模式登录
    • 若已设置为匿名模式登录(isAnonymousMode 为 true),SDK 将使用自动生成的匿名账号进行登录。若此时 account 不为空,则表示匿名模式下自定义账号名
    token String 静态 token,静态 Token 鉴权方式下必填。当 account 为 null 时,token 无效
    loginAuthType Integer 聊天室鉴权方式,采用静态 Token 鉴权方式时传入 0(默认)
    loginExt String 聊天室登录自定义扩展字段,若在初始化时实现了 chatroomLoginExtProvider 方法,并且回调该方法时返回了非空的 loginExt 值,则优先取返回值,忽略此处输入的 loginExt 值
    avatar String 聊天室中用户头像,匿名模式下(isAnonymousMode = true)该字段必填
    nick String 聊天室中用户昵称,匿名模式下(isAnonymousMode = true)该字段必填
  2. 调用 enterChatRoomEx 方法进入聊天室。

    示例代码如下:

    EnterChatRoomData data = new EnterChatRoomData(roomId);
    data.setIndependentMode((roomId, account) -> {
        // implementation of ChatRoomIndependentCallback
        return List<String>;
    }, account, token);	// independentModeCallback, account, token
    data.setNick("nick name");
    data.setAvatar("https://avatar.uri");
    }
    data.setLoginAuthType(0); // 静态 Token,传入0; 可使用 loginInfo.getAuthType(); 
    data.setLoginExt("设置登录自定义字段"); // 可使用 loginInfo.getLoginExt();
    
    AbortableFuture<EnterChatRoomResultData> enterRequest = NIMClient.getService(ChatRoomService.class).enterChatRoomEx(data, 1);
    
动态 Token 登录

NIM SDK 支持聊天室动态 token 登录这一登录方式。该登录方式的 token 具备时效性,可有效提升 token 破解难度,降低密码泄露风险。

  1. 初始化时,实现 SDKOptions#chatroomAuthProvider 获取动态 token。

  2. 设置 EnterChatRoomData 的各项属性,并注册获取聊天室地址的回调方法(ChatRoomIndependentCallback)。

    EnterChatRoomData 部分参数说明如下:

    参数 类型 是否必传 说明
    roomId String 聊天室 ID
    independentModeCallback ChatRoomIndependentCallback 独立模式回调函数,用于 SDK 向 APP 获取聊天室地址信息的数据
    independentMode Boolean 是否为独立登录模式,独立模式下需设置为 true
    isAnonymousMode Boolean 是否为匿名登录模式,匿名模式下需设置为 true
    account String 独立登录模式下的用户账号
    • 若未设置 isAnonymousMode 参数,则根据是否传入 account 参数来判断是否为匿名模式登录,即不传 account 则为匿名模式登录;传入 account 参数则为非匿名模式登录
    • 若已设置为匿名模式登录(isAnonymousMode 为 true),SDK 将使用自动生成的匿名账号进行登录。若此时 account 不为空,则表示匿名模式下自定义账号名
    token String 静态 token,动态 Token 鉴权方式下该字段可不填
    loginAuthType Integer 聊天室鉴权方式,采用动态 Token 鉴权方式时传入 1
    loginExt String 聊天室登录自定义扩展字段,若在初始化时实现了 chatroomLoginExtProvider 方法,并且回调该方法时返回了非空的 loginExt 值,则优先取返回值,忽略此处输入的 loginExt 值
    avatar String 聊天室中用户头像,匿名模式下(isAnonymousMode = true)该字段必填
    nick String 聊天室中用户昵称,匿名模式下(isAnonymousMode = true)该字段必填
  3. 调用 enterChatRoomEx 方法进入聊天室。

    示例代码如下:

    EnterChatRoomData data = new EnterChatRoomData(roomId);
    data.setIndependentMode((roomId, account) -> {
        // implementation of ChatRoomIndependentCallback
        return List<String>;
    }, account, null);	// independentModeCallback, account, 其中 token 不填
    data.setNick("nick name");
    data.setAvatar("https://avatar.uri");
    }
    data.setLoginAuthType(1); // 动态 Token,传入1; 可使用 loginInfo.getAuthType(); 
    data.setLoginExt("设置登录自定义字段"); // 可使用 loginInfo.getLoginExt();
    
    AbortableFuture<EnterChatRoomResultData> enterRequest = NIMClient.getService(ChatRoomService.class).enterChatRoomEx(data, 1);
    
第三方回调登录

如采用第三方鉴权登录方式,云信服务端不做聊天室登录鉴权,鉴权工作需由指定的第三方服务器(可以是应用服务器)进行。

第三方服务器可通过回调获取的动态 token 和动态 loginExt 来实现鉴权登录聊天室。

  1. 前往云信控制台,开通和配置第三方服务

  2. 在初始化时实现 chatroomAuthProviderchatroomLoginExtProvider 方法,SDK 会在登录过程时动态获取第三方回调的动态 Token 和动态扩展字段(loginExt)。

  3. 设置 EnterChatRoomData 的各项属性,并注册获取聊天室地址的回调方法(ChatRoomIndependentCallback)。

    EnterChatRoomData 部分参数说明如下:

    参数 类型 是否必传 说明
    roomId String 聊天室 ID
    independentModeCallback ChatRoomIndependentCallback 独立模式回调函数,用于 SDK 向 APP 获取聊天室地址信息的数据
    independentMode Boolean 是否为独立登录模式,独立模式下需设置为 true
    isAnonymousMode Boolean 是否为匿名登录模式,匿名模式下需设置为 true
    account String 独立登录模式下的用户账号
    • 若未设置 isAnonymousMode 参数,则根据是否传入 account 参数来判断是否为匿名模式登录,即不传 account 则为匿名模式登录;传入 account 参数则为非匿名模式登录
    • 若已设置为匿名模式登录(isAnonymousMode 为 true),SDK 将使用自动生成的匿名账号进行登录。若此时 account 不为空,则表示匿名模式下自定义账号名
    token String 静态 token,第三方回调鉴权方式下该字段可不填
    loginAuthType Integer 聊天室鉴权方式,采用第三方回调鉴权方式时传入 2
    loginExt String 聊天室登录自定义扩展字段,第三方服务器可以使用该字段来鉴权。若在初始化时实现了 dynamicChatRoomLoginExtForAccount: 方法,并且回调该方法时返回了非空的 loginExt 值,则优先取返回值,忽略此处输入的 loginExt 值
    avatar String 聊天室中用户头像,匿名模式下(isAnonymousMode = true)该字段必填
    nick String 聊天室中用户昵称,匿名模式下(isAnonymousMode = true)该字段必填
  4. 调用 enterChatRoomEx 方法进入聊天室。

    示例代码如下:

    EnterChatRoomData data = new EnterChatRoomData(roomId);
    data.setIndependentMode((roomId, account) -> {
        // implementation of ChatRoomIndependentCallback
        return List<String>;
    }, account, null);	// independentModeCallback, account, 其中 token 不填
    data.setNick("nick name");
    data.setAvatar("https://avatar.uri");
    }
    data.setLoginAuthType(2); // 第三方回调登录,传入2; 可使用 loginInfo.getAuthType(); 
    data.setLoginExt("设置登录自定义字段"); // 可使用 loginInfo.getLoginExt();
    
    AbortableFuture<EnterChatRoomResultData> enterRequest = NIMClient.getService(ChatRoomService.class).enterChatRoomEx(data, 1);
    
  5. 发起聊天室登录回调的请求,由第三方服务器进行鉴权并判定聊天室登录事件是否放行通过。

    若不通过,云信服务端将返回 302 错误码。

登出聊天室

注销聊天室登录(即退出聊天室)后,会断开聊天室对应的连接,不再接收关于此聊天室的任何消息。如果应用退出时聊天室仍处于登录状态,请手动调用 exitChatRoom 方法退出聊天室。

也可以调用 exitChatRooms 方法退出某个类型的所有聊天室。

聊天室类型枚举:

ChatRoomModeEnum 说明
INDEPENDENT 独立聊天室,以独立模式登录的聊天室类型
DEPENDENT 非独立聊天室,以非独立模式登录的聊天室类型
ALL 所有聊天室

示例代码如下:

// 根据 roomId 退出聊天室
NIMClient.getService(ChatRoomService.class).exitChatRoom(roomId);

// 根据 ChatRoomModeEnum 聊天室类型退出聊天室
NIMClient.getService(ChatRoomService.class).exitChatRooms(ChatRoomModeEnum.ALL);

相关信息

断网重连

SDK 提供了自动重连机制(自动重新建立与网易云信服务器的连接并重新登录)。

当成功登录聊天室后,若因为网络状态差或其他问题导致网络超时时,SDK 会持续有策略地进行自动重连,此时不需要上层开发者去做额外的重登逻辑

如果断网自动重连失败时(即监听到在线状态变更为 UNLOGIN 时),可以在状态变更观察者(observeOnlineStatus)的回调中调用 getEnterErrorCode 方法查询登录失败的原因。

重试次数超过预定上限时,SDK 不会继续重连。重试次数(retryCount)可以通过 enterChatRoomEx 方法设置,默认重连 3 次,需在登录聊天室时配置。

多端登录与互踢

当前 NIM SDK 支持配置两种不同的聊天室多端登录与互踢策略,具体参见多端登录与互踢

EnterChatRoomData 详细说明

单击查看 EnterChatRoomData 的参数说明
参数 类型 说明
roomId String 聊天室 ID
independentMode Boolean 是否为独立登录模式,默认为 false,即默认为非独立模式
loginAuthType Integer 聊天室鉴权方式,默认为 0,即采用静态 Token 鉴权方式
loginExt String 聊天室登录自定义扩展字段,若在初始化时实现了 chatroomLoginExtProvider 方法,并且回调该方法时返回了非空的 loginExt 值,则优先取返回值,忽略此处输入的 loginExt 值
isAnonymousMode Boolean 是否为匿名登录模式,匿名模式下需设置为 true
account String 独立登录模式下的用户账号
token String 独立登录模式的鉴权 Token,静态 Token 鉴权方式下必填。当 account 为 null 时,token 无效
nick String 聊天室中用户昵称,匿名模式下(isAnonymousMode = true)该字段必填
avatar String 聊天室中用户头像,匿名模式下(isAnonymousMode = true)该字段必填
appKey String 聊天室 AppKey,如果不填则使用云信 IM AppKey
该参数在独立登录模式(independentMode = ture)下才有效
extension String 用户在聊天室中的自定义扩展信息,如权限、头衔等,可以从 ChatRoomMessage#ChatRoomMessageExtension#getSenderExtension 中获取消息发送者的用户信息扩展字段;若没有设置,则这个字段为 null,最大长度为 4k 字节
notifyExtension String 通知事件扩展字段,其他聊天室在线成员会收到该用户进入聊天室的通知消息,可在聊天室通知消息的 ChatRoomNotificationAttachment 中可以获取到此扩展字段,最大长度为 2k 字节
tag String 聊天室登录标签,可以设置多个标签
notifyTargetTags String 登录登出通知的目标标签,是一个标签表达式
antiSpamConfig AntiSpamConfig 反垃圾的业务 ID,若不填则使用原来的反垃圾配置
chatRoomSpatialLocation ChatRoomSpatialLocation 本用户所在的地理位置空间坐标
chatRoomAuthProvider ChatRoomAuthProvider 获取聊天室动态 token
independentModeCallback ChatRoomIndependentCallback 独立模式回调函数,用于 SDK 向 APP 获取聊天室地址信息的数据
chatRoomSpatialLocation ChatRoomSpatialLocation 地理位置信息

常见问题

如何获取聊天室地址

调用 setIndependentMode 方法设置独立模式登录的各项属性,并注册获取聊天室地址的回调方法(ChatRoomIndependentCallback)。

参数说明:

参数
类型
说明
account String 用户名称,若设置为 nil,SDK 将使用自动生成的匿名账号进行登录
token String Token,匿名模式下,token 无效
cb ChatRoomIndependentCallback 独立模式登录时,必须提供回调函数,用于 SDK 向 APP 获取聊天室地址信息的数据

如何处理登录请求被拒绝问题

若您开启了应用标识安全验证,需要在将列表中写入允许的客户端应用标识。当请求登录的客户端应用标识不在列表中时,登录请求将被拒绝。

在控制台首页应用管理选择应用进入应用配置页面,顶部选择标识管理页签,添加对应的客户端应用标识。

应用标识管理.png

独立登录模式日活计算

  • 独立模式的非匿名模式,同一个账号同一天无论进入多少个聊天室,进入多少次,都只计算一个日活。
  • 独立模式的匿名模式,每进入一次聊天室,就计算一个日活。
此文档是否对你有帮助?
有帮助
去反馈
  • 前提条件
  • 登录聊天室
  • 步骤1:准备 Token
  • 获取静态Token
  • 获取动态Token
  • 获取动态LoginExt
  • 动态获取 Token 和 LoginExt 示例代码
  • 步骤2:注册相关监听
  • 监听聊天室连接状态
  • 查询登录聊天室失败原因
  • 步骤3:登录
  • 登录方式概览
  • 模式1:非独立模式
  • 静态 Token 登录
  • 动态 Token 登录
  • 第三方回调登录
  • 模式2:独立模式
  • 静态 Token 登录
  • 动态 Token 登录
  • 第三方回调登录
  • 登出聊天室
  • 相关信息
  • 断网重连
  • 多端登录与互踢
  • EnterChatRoomData 详细说明
  • 常见问题
  • 如何获取聊天室地址
  • 如何处理登录请求被拒绝问题
  • 独立登录模式日活计算