# 登录

本章节将介绍如何初始化 JC SDK 并登录。

# 初始化

开发者在使用 JC SDK 所有功能之前,必须先调用初始化方法初始化 SDK。 在 App 的整个生命周期中,开发者只需要将 SDK 初始化一次。

在主线程调用 JCClient create (opens new window) 接口创建 JCClient (opens new window) 实例对象。传入获取到的 appKey ,即可初始化 JCClient (opens new window)

TIP

由于 JC SDK 功能以模块为基础,且模块实例将被频繁使用,建议使用单例对 JC SDK 中的类进行管理。

Appkey是菊风视频能力平台中的唯一标识,请联系菊风市场客服获取

//初始化
-(bool)initialize {
    JCClient *client = [JCClient create:@"创建应用获取的 AppKey" callback:self creatParam:nil];
    return client.state == JCClientStateIdle;
}

其中,callback 为 JCClientCallback 协议的代理对象,该协议用于将 client 的状态变化通知给上层。因此需要先指定 callback 的代理对象,然后在该代理对象中实现 JCClientCallback 的方法。

JCClientCallback 中的主要方法如下。

//登陆结果回调
-(void)onLogin:(bool)result reason:(JCClientReason)reason;

//登出回调
-(void)onLogout:(JCClientReason)reason;

//登陆状态变化通知
-(void)onClientStateChange:(JCClientState)state oldState:(JCClientState)oldState;

初始化成功后,JCClientState 状态从 JCClientStateNotInit(未初始化) 变为 JCClientStateIdle(未登录)。

# 发起登录

SDK 初始化之后,即可进行登录的集成。

登录涉及 JCClient 类及其回调 JCClientCallback,其主要作用是负责登录、登出管理及帐号信息存储。

登录接口调用流程如下所示:

login

先创建 JCClientLoginParam (opens new window) 实例以调整登录参数,后调用 login (opens new window) 发起登录。

JCClientLoginParam* loginParam = [[JCClientLoginParam alloc] init];
// 发起登录
[client login:userID password:password loginParam:loginParam];

TIP

  1. userID 用户名不能为空,可由英文、数字和 +-_. 组成(特殊字符不能作为第一个字符),大小写不敏感,长度不能超过 64 个字符。

  2. password 密码,不能为空,长度不能超过 128 字符。

  3. 调用该接口返回 true 时只代表调用接口成功,并不代表登录成功。登录的结果会通过 onLogin 回调上报。

  4. 默认登录地址为国内环境 http:cn.router.justalkcloud.com:8080 。如果需要修改为国外环境,需要在登录前通过 JCClient 的 serverAddress 属性设置为 http:intl.router.justalkcloud.com:8080 .

调用发起登录接口成功后,会触发 JCClientCallback 回调中的方法将 client 的状态通知给上层。具体逻辑如下:

首先会触发 JCClientCallback 中的登录状态改变回调 onClientStateChange (opens new window) 。您可以在上层实现 onClientStateChange (opens new window) 方法并处理相关的逻辑。

-(void)onClientStateChange:(JCClientState)state oldState:(JCClientState)oldState
{
    if (state == JCClientStateIdle) { // 未登录
    ...
    } else if (state == JCClientStateLogining) { // 登录中
    ...
    } else if (state == JCClientStateLogined) {  // 登录成功
    ...
    } else if (state == JCClientStateLogouting) {  // 登出中
    ...
    }
}

之后会触发 JCClientCallback 中的 onLogin (opens new window) 回调。您可以在上层实现 onLogin (opens new window) 方法并处理相关的逻辑。

-(void)onLogin:(bool)result reason:(JCClientReason)reason {
    if (result) {// 登录成功
        ...
    }
    if (reason == JCClientReasonAuth) {// 账号密码错误
        ...
    }
}

登录成功后,JCClientState 状态从 JCClientStateIdle(未登录)变为 JCClientStateLogined(登录成功)。SDK 会自动保持与服务器的连接状态,直到用户主动调用登出接口,或者因为帐号在其他设备登录导致该设备登出。登录成功/失败原因 参考 JCClientReason (opens new window)

# 登出

登出是指断开与菊风服务器的连接,登出后不能进行平台上的各种业务操作。

登出接口调用流程如下所示:

611593

调用 logout (opens new window) 可以发起登出。

[client logout];

登出同样会触发登录状态改变(onClientStateChange)回调,之后将通过 onLogout 回调上报登出结果。

-(void)onLogout:(JCClientReason)reason {
    if (reason == JCClientReasonServerLogout) {// 强制登出
        ...
    }
}

更多登出原因参考:JCClientReason (opens new window)

登出成功后,JCClientState 状态从 JCClientStateLogined(登录成功) 变为 JCClientStateIdle(未登录)。

# 设置昵称

开发者可以通过 JCClient 类中的 displayName 属性设置昵称

/**
 *  @brief 昵称,用于通话,消息等,可以更直观的表明身份
 */
@property (nonatomic, copy) NSString* __nonnull displayName;

示例代码:

client.displayName = @"小张";

登录集成成功之后,即可进行相关业务的集成。