概述与资源

OneLogin Android SDK提供给集成Android原生客户端开发的开发者使用。

环境需求

条目 资源
开发目标 4.0以上
开发环境 Android Studio 2.1.3
系统依赖 v7包
sdk三方依赖 com.cmic.sso.sdkcom.unicom.xiaowo.logincn.com.chinatelecom.account.api

相关开发资料

条目 资源
产品结构流程 交互流程, 通讯流程
接口文档 onelogin-android-api-docs
错误码 Error Code 列表

安装

获取 SDK 及 Demo

点击下载

导入 SDK 到项目工程并配置开发环境

  1. 在 Demo 的libs包下,将获取的.aar文件拖拽到工程中的 libs 文件夹下。

  2. 在拖入.aar到 libs 文件夹后, 还要检查.aar是否被添加到Library,要在项目的build.gradle下添加如下代码:

    repositories {
    flatDir {
    dirs 'libs'
    }
    }
  3. 手动将aar包添加依赖:

    compile(name: 'geetest_onelogin_android_vx.y.z', ext: 'aar')
  4. 添加权限

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
    <uses-permission android:name="android.permission.GET_TASKS" />

配置接口

开发者集成客户端 SDK 前, 必须先在您的服务器上搭建相应的服务端获取登录信息的接口,并配置从极验后台获取的AppID。这里以服务端配置成功,客户端开发步骤为例,如下:

  1. 配置初始化接口

    //`OneLogin`的授权页面将与此处配置的`Activity`绑定
    OneLoginHelper.with().init(MainActivity.this);
  2. 调用预取号接口

    //第一个参数为所需要配置的App_ID
    //第二个参数为设置的超时时间
    //第三个参数为所需实现监听回调结果接口
    OneLoginHelper.with().preGetToken(appID,timeout,oneLoginListener);
  1. 调用取号接口

    //第一个参数为自定义的全局配置接口
    //第二个参数为所需实现监听回调结果接口
    OneLoginHelper.with().requestToken(oneLoginThemeConfig,oneLoginListener);

集成代码参考下方的代码示例。更进一步的示例, 见相关 Demo。

代码示例

初始化与校验

初始化

在项目的具体页面的onCreate方法里面进行初始化。使用OneLogin授权页面将与此处配置的Activity绑定。

OneLoginHelper.with().init(MainActivity.this);

预取号

OneLoginHelper.with().preGetToken(app_id,timeout,oneLoginListener);;

取号

OneLoginHelper.with().preGetToken(App_ID, 5000, new AbstractOneLoginListener() {
@Override
public void onResult(JSONObject jsonObject) {
try {
int status = jsonObject.getInt("status");
if (status == 200) {
//预取号成功
} else {
Toast.makeText(getApplicationContext(), jsonObject.toString(), Toast.LENGTH_SHORT).show();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
});

获取免密登录 token 并使用 token 获取用户登录信息

获取 token 后, 通过接口进行校验, 并获取登录信息。

OneLoginHelper.with().requestToken(new OneLoginThemeConfig.Builder().build(), new AbstractOneLoginListener() {
@Override
public void onResult(JSONObject jsonObject) {
try {
int statusResult = jsonObject.getInt("status");
if (statusResult == 200) {
new Thread(new Runnable() {
@Override
public void run() {
JSONObject jsonObject = new JSONObject();
try {
jsonObject.put("process_id", jsonObject.getString("process_id"));
jsonObject.put("token", jsonObject.getString("token"));
} catch (JSONException e) {
e.printStackTrace();
}
String result = HttpUtils.requestNetwork(<---获取用户登录信息的接口--->, jsonObject);
//根据结果判断是否成功,并在主线程关闭授权页。实现方法为:
//OneLoginHelper.with().quitAuthActivity();
}
}).start();
} else {
Toast.makeText(getApplicationContext(), jsonObject.toString(), Toast.LENGTH_SHORT).show();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
});

页面关闭

在页面关闭的时候执行此方法。

@Override
protected void onDestroy() {
super.onDestroy();
OneLoginHelper.with().cancel();
}

常见错误

1. 全机型,全系统兼容吗?

答:本产品只兼容4.0以上系统。

2. Demo的运行有什么注意问题?

答:需要申请对应的app_id,并需配置相应的服务接口。这样,Demo就可以正常使用了。

3. 只有一个回调,该怎样处理页面切换等逻辑呢?

答:页面的所有状态都有错误码输出,可以根据错误码来实现。

4. 怎样控制关闭授权页的时机?

答:在requestToken()方法执行完成之后,根据错误码来自主实现关闭授权页的时机,默认授权页返回触发是直接关闭的。当请求成功之后需要页面跳转的时候也是关闭授权页的时机。开发者自定义控件的事件发生时也是关闭授权页的时机。

5. 授权页面的沉浸式状态栏或者设置状态栏的颜色怎么实现呢?

答:在application中registerActivityLifecycleCallbacks,然后在onActivityStarted中根据if (activity instanceof LoginAuthActivity||activity instanceof OneLoginActivity)来实现。

6. OneLogin与OnePass一起使用包冲突错误怎么解决?

答:在OnePass的demo中有具体的脚本实现,详见OnePass项目。