# 登录

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

# 初始化

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

/// JCClient 对象
JCClient mClient;

public bool initialize(Application app) {
    mClient = JCClient.create(app, "用户 appKey", this);
    /// 获取初始化状态(用来判断初始化状态)
    mInit = mClient.state == JCClientState.Idle;
    return mInit;
}

其中,this 是指实现 JCClientCallback (opens new window) 接口的对象,JCClientCallback 用于将 client 的状态变化通知给上层。

JCClientCallback 中的主要方法如下

//登录结果回调
public void onLogin(bool result, JCClientReason reason)
{
}
//登出结果回调
public void onLogout(JCClientReason reason)
{
}
//登录状态变化回调
public void onClientStateChange(JCClientState state, JCClientState oldState)
{
}

# 发起登录

SDK 初始化之后,即可进行登录的集成。登录接口调用流程如下所示:

../../../../_images/workflow_login_android.jpg

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

JCClient.LoginParam loginParam = new JCClient.LoginParam();
// 发起登录
mClient.login("userID", "password", loginParam);

TIP

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

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

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

  4. 默认登录地址为国内环境 http:cn.router.justalkcloud.com:8080 。如果需要修改为国际环境,需要在登录前调用 JCClient 的 setServerAddress 方法将地址改为 http:intl.router.justalkcloud.com:8080 .

调用接口成功后,首先会触发登录状态改变回调 onClientStateChange (opens new window) 。您可以通过重写 onClientStateChange (opens new window) 执行逻辑操作。

public void onClientStateChange(JCClientState state, JCClientState oldState) {
     if (state == JCClientState.Idel) { /// 未登录
        ...
    } else if (state == JCClientState.Logining) { /// 正在登录
        ...
    } else if (state == JCClientState.Logined) { /// 登录成功
        ...
    } else if (state == JCClientState.Logouting) { /// 登出中
        ...
    }
}

之后触发 onLogin (opens new window) 回调。您可以通过重写 onLogin (opens new window) 执行逻辑操作。

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

}

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

# 登出

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

../../../../_images/workflow_logout_android.jpg

调用 logout (opens new window) 可以发起登出。更多登出原因参考:JCClientReason (opens new window)

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

public void onLogout(JCClientReason reason) {
    if (reason == JCClientReason.ServerLogout) {/// 强制登出
        ...
    }
}