登录管理

更新时间: 2024/03/14 17:08:35

圈组是网易云信开发的类 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
}
注册多端登录状态回调
objc// 添加监听
- (void)addListener {
    [[[NIMSDK sharedSDK] qchatManager] addDelegate:self];
}

// 移除监听
- (void)removeListener {
    [[[NIMSDK sharedSDK] qchatManager] removeDelegate:self];
}

// 回调方法
- (void)qchatMultiSpotLogin:(NIMMultiLoginType)type {
    // your code
}
注册被踢下线回调
objcNSArray<NIMLoginClient *> *clients = [[[NIMSDK sharedSDK] qchatManager] currentLoginClients];
[[[NIMSDK sharedSDK] qchatManager] kickOtherClient:clients[0] completion:^(NSError *error) {
    // your code
}];

步骤2:手动登录

调用login:completion:方法手动登录圈组。

调用该方法登录圈组时,一般无需传入参数,SDK 会直接获取并使用登录 IM 时传入的参数。


示例代码如下:

objcNIMQChatLoginParam *param = [[NIMQChatLoginParam alloc] init];
[[[NIMSDK sharedSDK] qchatManager] login:param completion:^(NSError *error, NIMQChatLoginResult *result) {
    // your code
}];

登出圈组

调用logout:方法登出圈组。

示例代码如下

objc- (void)testLogout {
[[[NIMSDK sharedSDK] qchatManager] logout:^(NSError *error) {
    // your code
}];
}

登录相关机制与策略

多端登录与互踢

您可通过云信控制台或者接口对多端登录进行管控。

方式1:通过控制台管控

可在云信控制台配置如下多端登录与互踢策略

  • 只允许一端登录
  • 桌面端(PC 与 Web)互踢、移动端(Android 和 iOS )互踢、桌面端与移动端可同时登录。
  • 各端均可以同时登录在线(最多 10 个设备同时在线)

方式2:调用接口管控

也可通过调用如下方法将同时登录圈组的其他设备端踢下线。

  1. 调用currentLoginClients方法获取同时登录圈组的设备列表(不包含当前设备)。

    示例代码如下:

    objcNSArray<NIMLoginClient *> *clients = [[[NIMSDK sharedSDK] qchatManager] currentLoginClients];
    
  2. 调用kickOtherClient:completion:方法,将同时登录圈组的其他设备端踢下线。

    示例代码如下:

    objcNSArray<NIMLoginClient *> *clients = [[[NIMSDK sharedSDK] qchatManager] currentLoginClients];
    [[[NIMSDK sharedSDK] qchatManager] kickOtherClient:clients[0] completion:^(NSError *error) {
        // your code
    }];
    

登录状态转换流程

圈组的登录状态变化流程参见下图。图中,深蓝色元素代表登录状态,浅绿色元素代表手动登录。

下图仅以IM 登录状态的变化流程为例,圈组登录状态变化逻辑与 IM 的基本一致,但不支持自动登录

iOS登录状态转换简图.png

IM 和圈组的登录状态分别由NIMLoginStepNIMQChatLoginStep枚举定义,圈组登录状态和 IM 登录状态的对应关系及说明如下:

IM 登录状态 圈组登录状态 说明
NIMLoginStepLinking, NIMQChatLoginStepLinking, 连接服务端
NIMLoginStepLinkOK, NIMQChatLoginStepLinkOK, 连接服务端成功
NIMLoginStepLinkFailed, NIMQChatLoginStepLinkFailed, 连接服务端失败
NIMLoginStepLoginOK, NIMQChatLoginStepLoginOK, 登录成功
NIMLoginStepLoginingFailed, NIMQChatLoginStepLoginFailed, 登录失败
NIMLoginStepSyncing, NIMQChatLoginStepSyncing, 开始同步数据
NIMLoginStepSyncOK, NIMQChatLoginStepSyncOK, 同步数据完成
NIMLoginStepLoseConnection, NIMQChatLoginStepLoseConnection, 与服务端的长连接断开
NIMLoginStepNetChanged, NIMQChatLoginStepNetChanged, 网络切换,并不是登录状态的一种, 您可通过这个状态按需进行 UI 展现
此文档是否对你有帮助?
有帮助
去反馈
  • 前提条件
  • 实现流程
  • 登录圈组
  • 步骤1:注册监听
  • 步骤2:手动登录
  • 登出圈组
  • 登录相关机制与策略
  • 多端登录与互踢
  • 方式1:通过控制台管控
  • 方式2:调用接口管控
  • 登录状态转换流程