一键登录

一键登录

前言

进行一键登录接入前请先完成SDK的接入与初始化。

接入前准备

联系 QQ:2880983157 开通权限,获取一键登录参数。

功能说明

账号免密认证方案,依托运营商的移动数据网络,采用“通信网关取号”及 SIM卡识别等技术,准确识别用户手机号码,实现一键登录,并可有效规避短信验证码泄露风险。

整体流程

注意

"蓝色流程”由合作方实现对接。

“绿色流程”由个推实现,合作方可进行了解。

成功对接效果图:

配置CT_KEY和CT_SECRET

app/build.gradle 文件中的 android.defaultConfig 下添加 manifestPlaceholders,配置CT_KEYCT_SECRET


    defaultConfig {
        applicationId "你的应用包名"
         ....

        manifestPlaceholders = [
                GY_APP_ID       : "你的 GY_APP_ID",
                GY_CHANNEL      : "你的 GY_CHANNEL"
                CT_KEY          : "你的 CT_KEY",
                CT_SECRET       : "你的 CT_SECRET",
        ]
    }

混淆配置

-keepattributes *Annotation*
-keepattributes *JavascriptInterface*
-dontwarn cn.com.chinatelecom.account.lib.**
-keepclassmembers class cn.com.chinatelecom.account.lib.**{*;}
-keep class cn.com.chinatelecom.account.lib.**{*;}

接入方可以根据自己产品需要接入自己产品的Logo,如果不接入自己产品的Logo,将使用默认的Logo。
接入方添加自己应用的Logo的步骤如下:

  1. 接入方首先在自己应用目录下面建个assets目录,然后在assets目录下面建ctares目录,再在ctares目录下面建images目录,再在images目录下面建topIcon目录。
  2. 接入方把自己应用的Logo图标放入步骤1建的topIcon下面,注意Logo命名必须为topIcon-logo.png。添加完Logo整个目录如下图标注所示。

注意事项:ctares目录、images目录、topIcon目录的名称不能随意写也不能写错,必须是固定的;Logo图标名称必须命名为topIcon-logo.png,尺寸大小必须240*240。

接口列表

API 类名: com.getui.gysdk.GYManager

方法 功能说明
eAccountLogin 一键登录接口

接口说明


    /**
     * 一键登录.
     *
     * @param activity      当前activity.
     * @param smsTemplateId 短信模板.
     * @param callBack      一键登录回调.
     */
    public void eAccountLogin(Activity activity, String smsTemplateId, GyCallBack callBack) 

在一键登录未通过或者用户点击切换账号的时候,SDK会调用云验证进行验证。如果开发者需要自己处理这种情况,将smsTemplateId配置为null即可。

输入参数

参数名称 是否必填 类型 描述
activity Activity 当前Activity对象
smsTemplateId String 短信模板,在一键登录未通过,调用云验证的时候会用到该参数
callBack GyCallBack 回调

调用示例

GYManager.getInstance().eAccountLogin(this, "0", new GyCallBack() {
            @Override
            public void onSuccess(GYResponse response) {
                Log.d(TAG, "response:" + response);
                showToast("验证成功");
                 try {
                    JSONObject jsonObject = new JSONObject(response.getMsg());
                    int type = jsonObject.getInt("verifyType");
                    jsonObject = jsonObject.getJSONObject("data");
                    if (type == 0) {//一键登录
                        String token = jsonObject.getString("token");
                        String expiredTime = jsonObject.getString("expiredTime");
                    } else {//云短信验证
                        String pn = jsonObject.getString("pn");
                        String token = jsonObject.getString("token");
                    }
                } catch (Throwable t) {
                    t.printStackTrace();
                }
            }

            @Override
            public void onFailed(GYResponse response) {
                Log.d(TAG, "response:" + response);
                showToast("验证失败:" + response);
            }
        });

返回示例

一键登录会通过GyCallBack返回结果.

GyCallBack:

public interface GyCallBack {

    /**
     * description:验证成功.
     */
    void onSuccess(GYResponse response);

    /**
     * description:验证失败.
     */
    void onFailed(GYResponse response);

}

GYResponse返回示例:

{
    gyuid='20827b1266924eb691b61f4a538222f232', 
    success=true, 
    code=30000,             
    msg='{"verifyType":0,"data":{"token":"je3o9NNU0w6kpyDEBpIdC4","expiredTime":1553139758029}}'
}
  • 类 GYResponse 属性详细说明:
属性 类型 属性说明
gyuid String 个验用户唯一标识
success boolean 验证是否成功
code int 状态码
msg String 验证成功的时候,包含验证结果信息,验证失败的时候,为状态码描述信息
  • 验证成功的时候 msg说明:

验证成功的时候,GYResponse中msg会是如下的JSON格式字符串.


//一键登录成功
{
    "msg":{
            "verifyType":0,
            "data":{
                "token":"qUiRvTAFLeAb36ubCtpcj",
                "expiredTime":1552887621123
            }
    }
}
//一键登录失败,云短信验证成功
{
    "msg":{
            "verifyType":1,
            "data":{
                "pn":"17768345313",
                "token":"GY-20180918-1-omsG91sfte8LUteahzOh06"
            }
    }
}

一键登录成功返回参数解释:

字段 类型 说明
verifyType int 验证类型,0为一键登录验证,1为云短信验证。
data JSON 验证结果
token String 用户授权凭证信息,可用于从服务端获取完整手机号码。
expiredTime long token有效期

云短信验证成功返回参数解释:

字段 类型 说明
verifyType int 验证类型,0为一键登录验证,1为云短信验证。
data JSON 验证结果
token String 在云验证成功的时候,该值是请求唯一id,可用作服务端二次校验。
pn String 用户输入的完整手机号码

本地资源包安全校验

注意ctares目录下除logo外的其他文件不可修改,不可覆盖,否则将不能使用免密登录。修改后使用登录功能将会接收到-7999001的错误返回码。

状态码

错误码 含义
0 请求成功
-64 permission-denied(无权限访问)
-65 API-request-rates-Exceed-Limitations(调用接口超限)
-68 接口冻结(如测试次数达到上限、合同余额不足、合同到期等)
-10001 取号失败
-10002 参数错误
-10003 解密失败
-10004 ip受限
-10005 异网取号回调参数异常
-10006 Mdn取号失败,且属于电信网络
-10007 重定向到异网取号
-10008 超过预设取号阈值
-10009 时间戳过期
-20005 sign-invalid(签名错误)
客户端自定义
-7999 服务不可用(其他错误,默认返回值)
-8000 responseCode非200(网络错误,http状态码错误)
-8100 无网络连接(网络错误)
-8101 获取失败(切换失败)
30000 登录成功
30001 当前环境不适合免密登录
30002 用户点击了其他登录方式
30003 用户关闭验证界面

其余情况请参考状态码汇总说明

文档中心搜索