IM 即时通讯
登录管理
更新时间: 2023/09/12 19:11:36
圈组是网易云信开发的类 Discord 场景能力模块。在使用圈组的相关能力前,需要先登录圈组。
前提条件
登录圈组前,请确保:
登录圈组前,必须先登录 IM。否则将无法成功登录圈组。
实现流程
本节介绍圈组登录与登出的实现流程。
登录圈组
步骤1:注册监听
- 注册
qchatOnlineStatus:
圈组登录状态回调函数。该回调函数在NIMQChatOnlineStatusResult
中的NIMQChatLoginStep
中返回登录状态。 - 注册
qchatMultiSpotLogin:
多端登录状态回调函数。当其他端登录或者注销时,SDK 会通过此回调函数通知到 UI。登录成功后,如果有其他端也处于登录状态,SDK 也会通过此回调函数向其他端发出通知。 - 注册
qchatKickedOut:
被踢下线回调函数。当本端被其他同时在线的设备端踢下线时,可通过此回调收到被踢下线的通知。
示例代码如下:
注册登录状态回调
// 添加监听
- (void)addListener {
[[[NIMSDK sharedSDK] qchatManager] addDelegate:self];
}
// 移除监听
- (void)removeListener {
[[[NIMSDK sharedSDK] qchatManager] removeDelegate:self];
}
// 回调方法
- (void)qchatOnlineStatus:(NIMQChatOnlineStatusResult *)result {
// your code
}
注册多端登录状态回调
// 添加监听
- (void)addListener {
[[[NIMSDK sharedSDK] qchatManager] addDelegate:self];
}
// 移除监听
- (void)removeListener {
[[[NIMSDK sharedSDK] qchatManager] removeDelegate:self];
}
// 回调方法
- (void)qchatMultiSpotLogin:(NIMMultiLoginType)type {
// your code
}
注册被踢下线回调
NSArray<NIMLoginClient *> *clients = [[[NIMSDK sharedSDK] qchatManager] currentLoginClients];
[[[NIMSDK sharedSDK] qchatManager] kickOtherClient:clients[0] completion:^(NSError *error) {
// your code
}];
步骤2:手动登录
调用login:completion:
方法手动登录圈组。
调用该方法登录圈组时,一般无需传入参数,SDK 会直接获取并使用登录 IM 时传入的参数。
示例代码如下:
NIMQChatLoginParam *param = [[NIMQChatLoginParam alloc] init];
[[[NIMSDK sharedSDK] qchatManager] login:param completion:^(NSError *error, NIMQChatLoginResult *result) {
// your code
}];
登出圈组
调用logout:
方法登出圈组。
示例代码如下
- (void)testLogout {
[[[NIMSDK sharedSDK] qchatManager] logout:^(NSError *error) {
// your code
}];
}
登录相关机制与策略
多端登录与互踢
您可通过云信控制台或者接口对多端登录进行管控。
方式1:通过控制台管控
可在云信控制台配置如下多端登录与互踢策略:
- 只允许一端登录
- 桌面端(PC 与 Web)互踢、移动端(Android 和 iOS )互踢、桌面端与移动端可同时登录。
- 各端均可以同时登录在线(最多 10 个设备同时在线)
方式2:调用接口管控
也可通过调用如下方法将同时登录圈组的其他设备端踢下线。
-
调用
currentLoginClients
方法获取同时登录圈组的设备列表(不包含当前设备)。示例代码如下:
NSArray<NIMLoginClient *> *clients = [[[NIMSDK sharedSDK] qchatManager] currentLoginClients];
-
调用
kickOtherClient:completion:
方法,将同时登录圈组的其他设备端踢下线。示例代码如下:
NSArray<NIMLoginClient *> *clients = [[[NIMSDK sharedSDK] qchatManager] currentLoginClients]; [[[NIMSDK sharedSDK] qchatManager] kickOtherClient:clients[0] completion:^(NSError *error) { // your code }];
登录状态转换流程
圈组的登录状态变化流程参见下图。图中,深蓝色元素代表登录状态,浅绿色元素代表手动登录。
下图仅以IM 登录状态的变化流程为例,圈组登录状态变化逻辑与 IM 的基本一致,但不支持自动登录。
IM 和圈组的登录状态分别由NIMLoginStep
和NIMQChatLoginStep
枚举定义,圈组登录状态和 IM 登录状态的对应关系及说明如下:
IM 登录状态 | 圈组登录状态 | 说明 |
---|---|---|
NIMLoginStepLinking, |
NIMQChatLoginStepLinking, |
连接服务端 |
NIMLoginStepLinkOK, |
NIMQChatLoginStepLinkOK, |
连接服务端成功 |
NIMLoginStepLinkFailed, |
NIMQChatLoginStepLinkFailed, |
连接服务端失败 |
NIMLoginStepLoginOK, |
NIMQChatLoginStepLoginOK, |
登录成功 |
NIMLoginStepLoginingFailed, |
NIMQChatLoginStepLoginFailed, |
登录失败 |
NIMLoginStepSyncing, |
NIMQChatLoginStepSyncing, |
开始同步数据 |
NIMLoginStepSyncOK, |
NIMQChatLoginStepSyncOK, |
同步数据完成 |
NIMLoginStepLoseConnection, |
NIMQChatLoginStepLoseConnection, |
与服务端的长连接断开 |
NIMLoginStepNetChanged, |
NIMQChatLoginStepNetChanged, |
网络切换,并不是登录状态的一种, 您可通过这个状态按需进行 UI 展现 |
此文档是否对你有帮助?
有帮助
去反馈