登录与连接状态

本文介绍与 Linkus Android SDK 登录及连接状态相关的功能及实现方法。

支持功能

功能 说明
首次登录 (手动登录) 初始化 Linkus SDK 后的首次登录。首次登录需要提供完整的登录凭证以及 PBX 服务器的地址,用于与 PBX 服务器建立连接并进行身份验证。
缓存登录 首次登录后,Linkus SDK 会将登录凭据及 PBX 服务器信息缓存在本地设备上,以便用户在后续的登录中可以直接使用,而无需再次输入。
查询用户登录状态 检查当前用户的 Linkus SDK 登录状态。
查询与 PBX 服务器的连接状态 判断 Linkus SDK 是否与 PBX 服务器相连接。
SDK 通知回调 监听及处理用户账号登出、与 PBX 重连成功及 CDR 变更等事件。

首次登录 (手动登录)

此方法会在用户首次登录 Linkus SDK 时使用。此方法要求用户输入自己的分机号或邮箱地址及登录签名作为登录凭证,以及 PBX 的 IP 地址用于与 PBX 服务器建立连接。
前提条件
获取 Linkus Android SDK 登录签名
实现方法
/**
 * 手动登录
 *
 * @param context
 * @param userName:用户的分机号或邮箱地址
 * @param passWord:用户的 Linkus SDK 登录签名
 * @param localeIp:PBX 的本地 IP 地址
 * @param localePort:PBX 本地 IP 地址所使用的端口
 * @param remoteIp:PBX 的远程 IP 地址
 * @param remotePort:PBX 远程 IP 地址所使用的端口
 * 根据用户的实际使用环境,"localeIp,localePort" 和 "remoteIp, remotePort" 两组数据中至少有一组必须填写对应的值。
 * @param requestCallback 登录结果回调
 * @return 登录接口返回值,表示登录失败或异常的原因。更多信息参见代码下方的表格。
 */
public void loginBlock(Context context, String userName, String passWord, String localeIp, int localePort,
        String remoteIp, int remotePort, RequestCallback<Boolean> requestCallback)
//手动登录示例
        YlsLoginManager.getInstance().loginBlock(this, userName, password, localeIp,
        localePortI, remoteIp, remotePortI, new RequestCallback<>() {

@Override // 登录成功回调
public void onSuccess(Boolean result) {
        closeProgressDialog();
        startActivity(new Intent(LoginActivity.this, DialPadActivity.class));
        }

@Override// 登录失败回调
public void onFailed(int code) {
        closeProgressDialog();
        Toast.makeText(LoginActivity.this, R.string.login_tip_login_failed, Toast.LENGTH_LONG).show();
        }

@Override// 登录异常回调
public void onException(Throwable exception) {
        closeProgressDialog();
        Toast.makeText(LoginActivity.this, R.string.login_tip_login_failed, Toast.LENGTH_LONG).show();
        }
        });
登录接口返回值说明
返回值 说明
1 无法连接 PBX 服务器。
-5 登录请求无响应。
403 用户名或登录签名错误。
405 Linkus 客户端被禁用。
407 该用户账号已被锁定。
416 禁止访问所请求的 IP 地址 (PBX 已启用 国家地区 IP 访问防御)。

缓存登录

首次登录后,Linkus SDK 会缓存登录信息。此方法会自动读取已有的缓存信息进行登录,无需用户再次输入。
int networkType = NetWorkUtil.getNetWorkType(this);
        YlsLoginManager.getInstance().cacheLogin(networkType);

查询用户登录状态

/**
 * 判断用户是否已登录 Linkus SDK
 * @return 返回值,表示用户的登录状态;true:用户已登录,false:用户未登录
 */
public boolean isLoginEd()
//调用示例
        boolean isLoginEd = YlsLoginManager.getInstance().isLoginEd();

查询与 PBX 服务器的连接状态

/**
 * 判断 Linkus SDK 是否与 PBX 服务器相连接
 * @return 返回值,表示连接状态;true:已连接,false:未连接
 */
public synchronized boolean isConnected()
//调用示例
        YlsLoginManager.getInstance().isConnected();

SDK 通知回调

SDK 通知回调可用于监听及处理用户账号登出、与 PBX 重连成功及通话记录变更等事件。
YlsBaseManager.getInstance().setSdkCallback(new SdkCallback() {
// 账号登出回调。账号登出事件类型参见代码下方表格
@Override
public void onLogout(int type) {
        context.startActivity(new Intent(context, LoginActivity.class));
        }

// Linus SDK 与 PBX 服务器重连成功回调
@Override
public void onReconnectSuccess() {}

// 通话记录(CDR)变更回调
@Override
public void onCdrChange(int syncResult) {
        EventBus.getDefault().post(new CallLogChangeEvent(syncResult));
        }
        });
用户账号登出事件类型
事件 事件码 说明
SdkEventCode.EVENT_USER_RELOGIN 1005 该帐号已在其他设备登录。
SdkEventCode.P_EVENT_DISABLE_LINKUS_APP 20014 Linkus 手机端被禁用。
SdkEventCode.EVENT_LOGIN_LOCKED 1009 该账号已被锁定。
SdkEventCode.EVENT_LOGIN_INFO_ILLEGAL 1010 缓存登录信息错误。
SdkEventCode.EVENT_CACHE_LOGIIN_USER_NOTFOUND 1011 缓存登录信息为空。
SdkEventCode.P_EVENT_LOGIN_MODE_CHANGE 20008 登录模式 (手动登录或缓存登录) 发生变更。
SdkEventCode.P_EVENT_COUNTRY_IP_LIMIT 20083 禁止访问所请求的 IP 地址 (PBX 已启用 国家地区 IP 访问防御)。
SdkEventCode.P_EVENT_LICENSE_EXPIRE 20093 Linkus SDK 服务不可用 (PBX 未购买该服务或服务已过期)。
SdkEventCode.P_EVENT_SDK_STATUS_CHANGE 20153 Linkus SDK 的可用状态发生变更 (PBX 上禁用 Linkus SDK 功能)。
SdkEventCode.P_EVENT_SDK_ACCESSKEY_CHANGE 20154 Linkus SDK 的 访问密钥 发生变更 (PBX 上刷新了 Linkus SDK 的 访问秘钥)。