一键登录

最近更新时间:2020-06-04 18:53:15

目录

OneLogin(一键登录)

进阶模式和常规模式是一键登录的两种调用逻辑,如无特别需求建议直接使用进阶模式,两模式不可混合调用。

1、进阶模式

1.1、调用逻辑

预取号逻辑封装在 SDK 内部,开发者只需控制授权页拉起时机。SDK 内部处理预取号的逻辑,包括预取号超期后的重新预取号,以及弱网状态下的重试等。

  1. init()初始化 SDK 并配置APPID
  2. register()注册(应用启动或进入登录页的前一个页面、用户登出时是调用该方法的时机)
  3. requestToken()拉起授权页面(调用该方法前可以调用isPreGetTokenResultValidate判断预取号是否成功
  4. dismissAuthActivity()关闭授权页面

register方法内会自动进行预取号,如果应用启动就调用,建议先判断或者请求网络权限之后再调用,否则可能因为网络不可达导致预取号失败。另外建议registerrequestToken方法不要同时调用,预留预取号一定的时间以及内部初始化。

1.2、初始化

  • 初始化init

SDK 初始化接口init,可放在 ApplicationonCreate 方法中进行初始化。

方法描述

public void init(Context context);
public void init(Context context, String appId);

参数说明

参数 类型 说明
context Context 上下文
appId String 金山云后台配置唯一产品APPID,请在官网申请
  • 注册register

方法描述

注册接口,可同init方法一起放在 Application 的 onCreate 方法中进行注册,或者在登录页前一个页面初始化时调用;登录成功后 SDK 内部不再维护预取号的有效性,如果用户退出登录后,为了方便下次重新登录能快速拉起授权页,也可以重新调用register进行预取号。

public void register(String appId)
public void register(String appId, int timeout)

参数说明

参数 类型 说明
app_id String 金山云后台配置唯一产品APPID,请在官网申请, 如init接口传了 appId 此处可传空值
timeout int 超时时间,单位:ms,取值范围:1000~15000,默认5000

代码示例

OneLoginHelper
        .with()
        //开启 SDK 日志打印功能
        .setLogEnable(true)
        //第一个参数为当前 Application 或 Activity 的 Context
        //第二个参数为所需要配置的 APPID
        .init(this, APPID)
        .register("", 5000);

1.3、拉起授权页

  • 拉起授权页requestToken

方法描述

在需要登录的地方调用requestToken接口拉起一键登录授权页,待用户点一键登录授权后获取运营商token,获取成功后即可请求服务端换取本机手机号码。

public void requestToken(OneLoginThemeConfig oneLoginThemeConfig, AbstractOneLoginListener listener)

参数说明

参数 类型 说明
oneLoginThemeConfig OneLoginThemeConfig 自定义全局配置接口,用来配置授权页面 UI 样式
listener AbstractOneLoginListener 回调监听器,需要开发者自己实现

代码示例

取号并获取免密登录的 token,通过接口进行校验,并获取登录信息。

OneLoginHelper
        .with()
        .requestToken(new OneLoginThemeConfig.Builder().build(), new AbstractOneLoginListener() {
    @Override
    public void onResult(JSONObject jsonObject) {
        try {
            int statusResult = jsonObject.getInt("status");
            // status=200 为取号成功,其他返回码请参考返回码章节
            if (statusResult != 200) {
                Toast.makeText(getApplicationContext(), jsonObject.toString(), Toast.LENGTH_SHORT).show();
                return;
            }
            new Thread(() -> {
                JSONObject json = new JSONObject();
                try {
                    json.put("process_id", jsonObject.getString("process_id"));
                    json.put("token",  jsonObject.getString("token"));
                    json.put("authcode",  jsonObject.optString("authcode")); //必选参数
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                String result = HttpUtils.requestNetwork(<---获取用户登录信息的接口--->, json);
                ///
                /// TODO 判断 result 是否有效
                ///
            }).start();
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
});

1.4、关闭授权页

  • 关闭授权页dismissAuthActivity

方法描述

用户主动关闭授权页。SDK 除了返回按钮触发关闭以外,默认是不 finsih 授权页的,需要开发者在回调结束后自行实现关闭授权页

public void dismissAuthActivity()

代码示例

OneLoginHelper.with().dismissAuthActivity();

2、常规模式

2.1、调用逻辑

预取号和授权页拉起时机均由开发者自主控制。使用此调用逻辑,开发者需自主处理预取号的时机和超期重试的逻辑等。

  1. init()初始化 SDK 并配置APPID
  2. preGetToken()预取号(应用启动或进入登录页的前一个页面、用户登出时是调用该方法的时机)
  3. requestToken()拉起授权页面(调用该方法前建议先调用isPreGetTokenResultValidate判断预取号是否成功
  4. dismissAuthActivity()关闭授权页

2.2、初始化

  • 初始化init

SDK 初始化接口init,可放在 ApplicationonCreate 方法中进行初始化,或者其他预取号之前调用。

方法描述

public void init(Context context);
public void init(Context context, String appId);

参数说明

参数 类型 说明
context Context 上下文
appId String 金山云后台配置唯一产品APPID,请在官网申请

2.3、预取号

  • 预取号preGetToken

方法描述

预取号接口,可同init方法一起放在 Application 的 onCreate 方法中进行注册,或者在登录页前一个页面初始化时调用;登录成功后预取号失效,如果用户退出登录后,为了方便下次重新登录能快速拉起授权页,也可以重新调用preGetToken进行预取号。

public void preGetToken(String appId, int timeout, AbstractOneLoginListener oneLoginListener);

参数说明

参数 类型 说明
appId String 产品 APPID, 如init接口传了 appId 此处可传空值
timeout int 超时时间,单位:ms,取值范围:1000~15000
oneLoginListener AbstractOneLoginListener 回调监听器,需要开发者自己实现

代码示例

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

OneLoginHelper
        .with()
        .setLogEnable(true)
        //第一个参数为当前 Application 或 Activity 的 Context
        //第二个参数为所需要配置的 APPID
        .init(context, APPID)
        .preGetToken("", 5000, new AbstractOneLoginListener() {
            @Override
            public void onResult(JSONObject jsonObject) {
                oneLoginResult.onResult();
                Log.i(TAG, "预取号结果为:" + jsonObject.toString());
                try {
                    int status = jsonObject.getInt("status");
                    // status=200 为预取号成功,其他返回码请参考返回码章节
                    if (status == 200) {
                        if (isRequestToken) {
                            oneLoginRequestToken();
                        }
                    } else {
                        ToastUtils.toastMessage(context, "预取号失败:" + jsonObject.toString());
                    }
                } catch (JSONException e) {
                    ToastUtils.toastMessage(context, "预取号失败:" + jsonObject.toString());
                }
            }
        });
    };

2.4、拉起授权页

  • 拉起授权页requestToken

方法描述

在需要登录的地方调用requestToken接口拉起一键登录授权页,待用户点一键登录授权后获取运营商token,获取成功后即可请求服务端换取本机手机号码。

public void requestToken(OneLoginThemeConfig oneLoginThemeConfig, AbstractOneLoginListener listener)

参数说明

参数 类型 说明
oneLoginThemeConfig OneLoginThemeConfig 自定义全局配置接口,用来配置授权页面 UI 样式
listener AbstractOneLoginListener 回调监听器,需要开发者自己实现

代码示例

取号并获取免密登录的 token,通过接口进行校验,并获取登录信息。

if (!OneLoginHelper.with().isPreGetTokenResultValidate()) {
    //预取号已过期或者失效,需要重新预取号, 此处可显示自定义加载对话框
    return;
}
OneLoginHelper
        .with()
        .requestToken(new OneLoginThemeConfig.Builder().build(), new AbstractOneLoginListener() {
    @Override
    public void onResult(JSONObject jsonObject) {
        try {
            int statusResult = jsonObject.getInt("status");
            // status=200 为取号成功,其他返回码请参考返回码章节
            if (statusResult != 200) {
                Toast.makeText(getApplicationContext(), jsonObject.toString(), Toast.LENGTH_SHORT).show();
                return;
            }
            new Thread(() -> {
                JSONObject json = new JSONObject();
                try {
                    json.put("process_id", jsonObject.getString("process_id"));
                    json.put("token",  jsonObject.getString("token"));
                    json.put("authcode",  jsonObject.optString("authcode"));  //必选参数
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                String result = HttpUtils.requestNetwork(<---获取用户登录信息的接口--->, json);
                ///
                /// TODO 判断 result 是否有效
                ///
            }).start();
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
});

2.5、关闭授权页

  • 关闭授权页dismissAuthActivity

方法描述

用户主动关闭授权页。SDK 除了返回按钮触发关闭以外,默认是不 finsih 授权页的,需要开发者在回调结束后自行实现关闭授权页

public void dismissAuthActivity()

代码示例

OneLoginHelper.with().dismissAuthActivity();

金山云,开启您的云计算之旅

免费注册