登录/登出聊天室
更新时间: 2024/03/14 16:36:34
用户在聊天室收发消息前需要先调用 SDK 的聊天室登录接口进入聊天室。登录成功后,用户才能正常在聊天室收发消息并使用其他聊天室相关功能。
本文介绍实现聊天室登录的流程以及相关常见问题。
前提条件
实现登录聊天室前,请确保:
- 已开通聊天室功能。
- 已完成初始化。
- 已创建聊天室,目前只能通过服务端 API 创建聊天室。
- 在云信控制台配置应用的聊天室登录策略。如未配置相应的登录策略,可能导致后续调用登录接口时因无登录权限而报错。
登录聊天室
步骤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
进行鉴权。
-
注册云信 IM 账号,获取 IM 账号(
accid
)和静态token
。 -
基于App Key、App Secret 和
accid
,通过约定算法在应用服务端生成动态token
。 -
客户端可通过在初始化时实现
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 登录
-
成功登录 IM。
采用非独立模式&静态登录方式鉴权时,需要确保调用
AuthService#login
方法登录 IM 时传入了静态 token。非独立模式静态登录聊天室时使用已传入的静态 token。 -
设置
EnterChatRoomData
的各项属性。EnterChatRoomData
部分参数说明如下:参数 类型 是否必传 说明 roomId
String 是 聊天室 ID independentMode
Boolean 否 是否为独立登录模式,默认为 false,即默认为非独立模式,因此非独立模式下该参数无需设置 loginAuthType
Integer 否 聊天室鉴权方式,采用静态 Token 鉴权方式时传入 0(默认) loginExt
String 否 聊天室登录自定义扩展字段,若在初始化时实现了 chatroomLoginExtProvider
方法,并且回调该方法时返回了非空的 loginExt 值,则优先取返回值,忽略此处输入的 loginExt 值 -
调用
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
破解难度,降低密码泄露风险。
-
初始化时,实现
SDKOptions#chatroomAuthProvider
获取动态 token。 -
成功登录 IM。
-
设置
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。
- 若在初始化时实现了
-
调用
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
来实现鉴权登录聊天室。
-
前往云信控制台,开通和配置第三方服务。
-
在初始化时实现
chatroomAuthProvider
和chatroomLoginExtProvider
方法,SDK 会在登录过程时动态获取第三方回调的动态 Token 和动态扩展字段(loginExt)。 -
成功登录 IM。
-
设置
EnterChatRoomData
的各项属性。EnterChatRoomData
部分参数说明如下:参数 类型 是否必传 说明 roomId
String 是 聊天室 ID independentMode
Boolean 否 是否为独立登录模式,默认为 false,即默认为非独立模式,因此非独立模式下该参数无需设置 loginAuthType
Integer 是 聊天室鉴权方式,采用第三方回调 Token 鉴权方式时传入 2 loginExt
String 否 聊天室登录自定义扩展字段,第三方服务器可以使用该字段来鉴权。若在初始化时实现了 chatroomLoginExtProvider
方法,并且回调该方法时返回了非空的 loginExt 值,则优先取返回值,忽略此处输入的 loginExt 值 -
调用
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);
-
发起聊天室登录回调的请求,由第三方服务器进行鉴权并判定聊天室登录事件是否放行通过。
若不通过,云信服务端将返回 302 错误码。
模式2:独立模式
在 IM 处于未登录的情况下,登录聊天室的方式,针对只需要聊天室功能的业务场景。
独立模式由于不依赖 IM 连接,SDK 无法自动获取聊天室服务器的地址,需要客户端向开发者应用服务器请求该地址,而应用服务器需要向网易云信服务器请求,然后将请求结果原路返回给客户端。因此 SDK 需要提前注册获取聊天室地址的回调方法(ChatRoomIndependentCallback
)。
独立模式下可通过鉴权方式分为静态 token 登录方式、动态 token 登录方式以及第三方回调登录方式。
-
当选择以独立模式登录聊天室时,必须将
independentMode
设置为 true。 -
可以通过
isAnonymousMode
字段来设置是否以匿名模式登录聊天室。其中isAnonymousMode
和account
存在以下关联:-
若未设置
isAnonymousMode
参数,则根据是否传入account
参数来判断是否为匿名模式登录,即不传account
则为匿名模式登录;传入account
参数则为非匿名模式登录。 -
若已设置为匿名模式登录(
isAnonymousMode
为 true),SDK 将使用自动生成的匿名账号进行登录。若此时account
不为空,则表示匿名模式下自定义账号名。 -
匿名登录聊天室的用户,只能接收消息,不能发送消息。
-
匿名登录时必须设置匿名用户在聊天室中的昵称(
nick
)和头像(avatar
)。
-
静态 Token 登录
-
设置
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)该字段必填 - 若未设置
-
调用
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
破解难度,降低密码泄露风险。
-
初始化时,实现
SDKOptions#chatroomAuthProvider
获取动态 token。 -
设置
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)该字段必填 - 若未设置
-
调用
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 来实现鉴权登录聊天室。
-
前往云信控制台,开通和配置第三方服务。
-
在初始化时实现
chatroomAuthProvider
和chatroomLoginExtProvider
方法,SDK 会在登录过程时动态获取第三方回调的动态 Token 和动态扩展字段(loginExt)。 -
设置
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)该字段必填 - 若未设置
-
调用
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);
-
发起聊天室登录回调的请求,由第三方服务器进行鉴权并判定聊天室登录事件是否放行通过。
若不通过,云信服务端将返回 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 获取聊天室地址信息的数据 |
如何处理登录请求被拒绝问题
若您开启了应用标识安全验证,需要在将列表中写入允许的客户端应用标识。当请求登录的客户端应用标识不在列表中时,登录请求将被拒绝。
在控制台首页应用管理选择应用进入应用配置页面,顶部选择标识管理页签,添加对应的客户端应用标识。
独立登录模式日活计算
- 独立模式的非匿名模式,同一个账号同一天无论进入多少个聊天室,进入多少次,都只计算一个日活。
- 独立模式的匿名模式,每进入一次聊天室,就计算一个日活。