一键认证

一键认证

1.能力简述

一键认证:一键认证方案,依托运营商的移动数据网络,采用“通信网关取号”及 SIM卡识别等技术,准确识别用户手机号码,实现一键认证,并可有效规避短信验证码泄露风险。 通过运营商网关认证能力,用户无需输入手机号码和短信验证码,即可使用手机号一键认证成功。

2.接入前准备

请联系QQ:3007288195 开通权限。

3.业务流程

业务流程图:

成功对接效果图:

4.配置SDK

在接入一键认证之前,请先确认已经集成个验SDK。下文使用到的资源文件,均可在官网下载的SDK资源包中获得。调用一键认证接口前请先完成个验SDK的接入与初始化。

4.1 maven接入方式

dependencies {
    compile 'com.getui:gysdk:1.5.0.1'
    compile 'com.getui:gtc:2.1.0'
    //一键认证
    compile 'com.getui:elogin:1.0.0.3'
}

4.2 aar 包接入方式

(1)添加 aar包文件

将官网下载下来的 aar包 放置到项目的libs目录下

(2)配置 build.gradle


    defaultConfig {
         ....
    }

    repositories {
    flatDir {
        dirs 'libs'
    }
   }

    dependencies {
        // 添加个验 aar 依赖,name与aar包的名字同步
        compile(name: 'gysdk-1.5.0.1', ext: 'aar')  
        compile(name: 'gtc-2.1.0', ext: 'aar')
        //添加一键认证
        compile(name: 'elogin-1.0.0.3', ext: 'aar')
    }

4.3 配置授权页activity

AndroidManifest文件中配置以下activity。

        <activity
             android:name="com.cmic.sso.sdk.activity.OAuthActivity"
             android:configChanges="orientation|keyboardHidden|screenSize"
             android:launchMode="singleTop"
             android:screenOrientation="behind" />
         <activity
             android:name="com.cmic.sso.sdk.activity.LoginAuthActivity"
             android:configChanges="orientation|keyboardHidden|screenSize"
             android:launchMode="singleTop"
             android:screenOrientation="behind" />
         <activity
             android:name="com.geetest.onelogin.activity.OneLoginActivity"
             android:configChanges="orientation|keyboardHidden|screenSize"
             android:launchMode="singleTop"
             android:screenOrientation="behind" />
         <activity
             android:name="com.geetest.onelogin.activity.OneLoginWebActivity"
             android:configChanges="orientation|keyboardHidden|screenSize"
             android:launchMode="singleTop"
             android:screenOrientation="behind" />

4.4 混淆配置

-dontwarn com.g.gysdk.**
-keep class com.g.gysdk.**{*;}
-dontwarn com.g.elogin.**
-keep class com.g.elogin.**{*;}
-dontwarn com.cmic.sso.sdk.**
-keep class com.cmic.sso.sdk.** {*;}
-dontwarn com.geetest.onelogin.**
-keep class com.geetest.onelogin.** {*;}
-dontwarn com.geetest.onepassv2.**
-keep class com.geetest.onepassv2.** {*;}
-dontwarn com.unicom.xiaowo.login.**
-keep class com.unicom.xiaowo.login.** {*;}
-dontwarn cn.com.chinatelecom.account.api.**
-keep class cn.com.chinatelecom.account.api.** {*;}

5.接口列表

API 类名: com.g.gysdk.GYManager

方法 功能说明
initELogin 初始化
isELoginInitSuccess 【一键认证】是否初始化成功
ePreLogin 【一键认证】预登录
eAccountLogin 【一键认证】一键认证
addRegisterViewConfig 【一键认证】添加自定义控件
finishAuthActivity 【一键认证】关闭一键认证界面
cancelELogin 【一键认证】关闭一键认证

5.1 初始化

使用一键认证之前,需要先调用初始化接口。

    /**
     * 初始化一键认证.
     *
     */
    public void initELogin();

注意:该接口需要在个验sdk初始化之后调用。

5.1.1 调用示例

//初始化一键认证
GYManager.getInstance().initELogin();

5.2 判断一键认证是否初始化

    /**
     * 一键认证是否初始化成功.
     */
    public boolean isELoginInitSuccess();

5.2.1 调用示例

if (!GYManager.getInstance().isELoginInitSuccess()) {
            Log.d(TAG, "一键认证未初始化,先初始化");
            GYManager.getInstance().initELogin();
        }

5.3 预登录

    /**
     * 预登录.
     *
     * @param timeOut    超时时间.
     * @param gyCallBack 回调.
     */
    public void ePreLogin(int timeOut, GyCallBack gyCallBack);

注意:预登录操作用于提前判定当前网络环境是否适合使用一键登录,建议在登录操作前调用,不影响登录流程,降低对用户体验的影响。例如:初次打开APP、进入个人中心页(“我的”),等。预登录结果的有效期是10分钟,且只能使用一次。也就是第二次调用一键认证接口时,需要再次先调用预登录。
预登录成功表示当前设备可以使用一键认证,失败则表示不可用,开发者在失败的时候可以换成其他登录方式。

一键认证需要用户授予android.permission.READ_PHONE_STATE权限,请开发者在调用相关接口之前确认已经获取了该权限,没有该权限会导致预登录失败.

输入参数 :

参数名称 是否必填 类型 描述
timeOut int 超时时间(1000ms-15000ms)
gyCallBack GyCallBack 回调

5.3.1 调用示例

 GYManager.getInstance().ePreLogin(5000, new GyCallBack() {
            @Override
            public void onSuccess(GYResponse response) {
                showToast("预登录成功");
                Log.d(TAG, "response:" + response);
            }

            @Override
            public void onFailed(GYResponse response) {
                showToast("预登录失败:" + response);
            }
        });

返回示例 :

预登录会通过GyCallBack返回结果.

GyCallBack:

public interface GyCallBack {

    /**
     * description:预登录成功.
     */
    void onSuccess(GYResponse response);

    /**
     * description:预登录失败.
     */
    void onFailed(GYResponse response);

}

GYResponse返回示例:

预登录成功:
{
    gyuid='1f4b078f06ad4867b641f1976a172f1232', 
    success=true,
    code=30000,
    msg='{"msg":"0","number":"155****7657","operatorType":"CU","clienttype":"1","accessCode":"a21dd93eed844fef8b3a2c995078999a","process_id":"8c1b6e9a548a15e6ac3344606f351375"}'
}
预登录失败:
{
    gyuid='1f4b078f06ad4867b641f1976a172f1232', 
    success=false, 
    code=30005, 
    msg='{"errorCode":"-20202","process_id":"7e407746a82a773dd2c7f1a24148ea84","metadata":{"error_data":"The current mobile phone has a calling card but no data network"},"operatorType":"CU","clienttype":"1"}'
}
  • 类 GYResponse 属性详细说明:
属性 类型 属性说明
gyuid String 个验用户唯一标识
success boolean 预登录是否成功
code int 状态码,30000表示预登录成功
msg String 详细信息
  • GYResponse中msg详细信息解释:

预登录成功时msg:

属性 必须 类型 解释
msg String 运营商返回的状态信息
process_id String 流水号
operatorType String 客户端获取的运营商(CT表示电信、CU表示联通、CM表示移动)
clienttype String 客户端,1表示Android
accessCode String 运营商返回的accessCode
number String 运营商返回的去敏手机号

预登录失败时msg:

字段 必须 类型 解释
errorCode String 错误码
msg String 运营商返回的状态信息
process_id String 流水号
metadata JSONObject 具体的错误原因
operatorType String 客户端获取的运营商(CT表示电信、CU表示联通、CM表示移动)
clienttype String 客户端,1表示Android

当前版本预登录返回的信息仅作为状态记录或者异常排查,不能用于其他接口,例如服务端取号或者号码验证。

5.4一键认证


    /**
     * 一键认证.
     *
     * @param config   界面配置参数.
     * @param callBack 一键认证回调.
     */
    public void eAccountLogin(ELoginThemeConfig config, GyCallBack callBack);   

5.4.1 输入参数

参数名称 是否必填 类型 描述
config ELoginThemeConfig 界面配置参数
callBack GyCallBack 回调

5.4.2 ELoginThemeConfig说明

5.4.2.1 创建示例
ELoginThemeConfig.Builder builder = new ELoginThemeConfig.Builder();
        //设置背景
builder.setAuthBGImgPath("login_bg")
        //设置状态栏颜色 字体颜色
       .setStatusBar(Color.WHITE, Color.WHITE, true)
       //设置标题栏布局
       .setAuthNavLayout(Color.WHITE, 49, true, false)
       ...

return builder.build();

5.4.2.2 方法说明
(1)设置背景图片

setAuthBGImgPath(String authBGImgPath)

参数说明

参数 参数类型 说明 默认值
authBGImgPath String 设置背景图⽚。放在drawable文件下,以下背景图片,路径与之保持一致 gt_one_login_bg
(2)设置弹窗主题相关

setDialogTheme(boolean isDialogTheme, int dialogWidth, int dialogHeight, int dialogX, int dialogY, boolean isDialogBottom, boolean isWebViewDialogTheme)

参数说明

参数 参数类型 说明 默认值
isDialogTheme boolean 是否使用弹窗模式,true为使用,false为不使用 false
dialogWidth int 弹窗模式宽度,长宽的单位都为dp,以下单位与之保持一致 300
dialogHeight int 弹窗模式高度 500
dialogX int 授权⻚弹窗X偏移量(以屏幕⼼为原点) 0
dialogY int 授权⻚弹窗Y偏移量(以屏幕⼼为原点) 0
isDialogBottom boolean 授权⻚弹窗是否贴于屏幕底部true:显示到屏幕底部, dialogY参数设置将⽆效 false:不显示到屏幕底部,以 dialogY参数为准 false
isWebViewDialogTheme boolean 隐私页面是否使用弹窗模式 false
(3)设置状态栏颜色、字体颜色

setStatusBar(int statusBarColor,int navigationBarColor,boolean isLightColor)

参数说明

参数 参数类型 说明 默认值
statusBarColor int 自定义状态栏背景颜色 0
navigationBarColor int 自定义底部导航栏背景颜色 0
isLightColor boolean 设置状态栏内容的颜色(只能黑白),true为黑色,false为白色 false
(4)设置标题栏布局

setAuthNavLayout(int navColor, int authNavHeight, boolean authNavTransparent, boolean authNavGone)

参数说明

参数 参数类型 说明 默认值
navColor int 标题栏颜色 0xFF3973FF
authNavHeight int 标题栏高度 49
authNavTransparent boolean 标题栏是否透明 true
authNavGone boolean 标题栏是否隐藏,此处的隐藏为View.GONE false
(5)设置标题栏中间文字相关

setAuthNavTextView(String navText, int navTextColor, int navTextSize, boolean navTextNormal, String navWebViewText, int navWebViewTextColor, int navWebViewTextSize)

参数说明

参数 参数类型 说明 默认值
navText String 文字设置 一键认证
navTextColor int 字体颜色 0xFFFFFFFF
navTextSize int 字体大小,单位为sp,以下设置字体大小的单位与之保持一致 17
navTextNormal boolean 设置是否隐私条款页面的标题栏中间文字使用默认值,true为使用navWebViewText,false为使用默认隐私条款的名字 false
navWebViewText String 隐私条款页面的标题栏中间文字 服务条款
navWebViewTextColor int 隐私条款页面的标题栏中间文字颜色 0xFF000000
navWebViewTextSize int 隐私条款页面的标题栏中间文字大小 9017
(6)设置标题栏返回按钮相关

setAuthNavReturnImgView(String navReturnImgPath, int returnImgWidth, int returnImgHeight, boolean navReturnImgHidden, int returnImgOffsetX)

参数说明

参数 参数类型 说明 默认值
navReturnImgPath String 返回按钮图片 gt_one_login_ic_chevron_left_black
returnImgWidth int 返回按钮图片宽度 24
returnImgHeight int 返回按钮图片高度 24
navReturnImgHidden boolean 返回按钮是否隐藏 false
returnImgOffsetX int 返回按钮图片距离屏幕左边X轴偏移量 12
(7)设置logo相关

setLogoImgView(String logoImgPath, int logoWidth, int logoHeight, boolean logoHidden, int logoOffsetY, int logoOffsetY_B, int logoOffsetX)

参数说明

参数 参数类型 说明 默认值
logoImgPath String logo图片 gt_one_login_logo
logoWidth int logo图片宽度 71
logoHeight int logo图片高度 71
logoHidden boolean logo是否隐藏 false
logoOffsetY int logo相对于状态栏下边缘y偏移 125
logoOffsetY_B int logo相对于底部y偏移 0
logoOffsetX int logo相对于屏幕左边X轴偏移量,当为0时表示居中显示 0
(8)设置号码相关

setNumberView(int numberColor, int numberSize, int numFieldOffsetY, int numFieldOffsetY_B, int numFieldOffsetX)

参数说明

参数 参数类型 说明 默认值
numberColor int 号码栏字体颜色 0xFF3D424C
numberSize int 号码栏字体大小 24
numFieldOffsetY int 号码栏相对于标题栏下边缘y偏移 200
numFieldOffsetY_B int 号码栏相对于底部y偏移 0
numFieldOffsetX int 号码栏相对于屏幕左边X轴偏移量,当为0时表示居中显示 0
(9)设置切换账号相关

setSwitchView(String switchText, int switchColor, int switchSize, boolean switchAccHidden, int switchAccOffsetY, int switchOffsetY_B, int switchOffsetX)

参数说明

参数 参数类型 说明 默认值
switchText int 切换账号文字 切换账号
switchColor String 切换账号字体颜色 0xFF3973FF
switchSize int 切换账号字体大小 14
switchAccHidden boolean 切换账号是否隐藏 false
switchAccOffsetY int 切换账号相对于标题栏下边缘y偏移 249
switchOffsetY_B int 切换账号相对于底部y偏移 0
switchOffsetX int 切换账号相对于屏幕左边X轴偏移量,当为0时表示居中显示 0
(10)设置登录按钮布局

setLogBtnLayout(String loginImgPath, int logBtnWidth, int logBtnHeight, int logBtnOffsetY, int logBtnOffsetY_B, int logBtnOffsetX)

参数说明

参数 参数类型 说明 默认值
loginImgPath String 登录按钮背景图片 gt_one_login_btn_normal
logBtnWidth int 登录按钮宽度 268
logBtnHeight int 登录按钮高度 36
logBtnOffsetY int 登录按钮相对于标题栏下边缘y偏移 324
logBtnOffsetY_B int 登录按钮相对于底部y偏移 0
logBtnOffsetX int 登录按钮相对于屏幕左边X轴偏移量,当为0时表示居中显示 0
(11)设置登录按钮中间文字相关

setLogBtnTextView(String loginButtonText, int loginButtonColor, int logBtnTextSize)

参数说明

参数 参数类型 说明 默认值
loginButtonText String 文字设置 一键认证
loginButtonColor int 文字颜色 0xFFFFFFFF
logBtnTextSize int 文字大小 15
(12)设置loading图片相关

setLogBtnLoadingView(String loadingView, int loadingViewWidth, int loadingViewHeight, int loadingViewOffsetRight)

参数说明

参数 参数类型 说明 默认值
loadingView String loading图片地址 umcsdk_load_dot_white
loadingViewWidth int loading图片宽度 20
loadingViewHeight int loading图片高度 20
loadingViewOffsetRight int loading图片距离按钮右边X轴偏移量 12
(13)设置Slogan相关

setSloganView(int sloganColor, int sloganSize, int sloganOffsetY, int sloganOffsetY_B, int sloganOffsetX)

参数说明

参数 参数类型 说明 默认值
sloganColor int 设置Slogan字体颜色 0xFFA8A8A8
sloganSize int 设置Slogan字体大小 10
sloganOffsetY int 设置Slogan相对于标题栏下边缘y偏移 382
sloganOffsetY_B int 设置Slogan相对于底部y偏移 0
sloganOffsetX int 设置Slogan相对于屏幕左边X轴偏移量,当为0时表示居中显示 0
(14)设置隐私条款布局

setPrivacyLayout(int privacyLayoutWidth, int privacyOffsetY, int privacyOffsetY_B, int privacyOffsetX)

参数说明

参数 参数类型 说明 默认值
privacyLayoutWidth int 设置隐私条款宽度,隐私条款大部分为字体,只规定宽度,高度自适应 256
privacyOffsetY int 设置隐私条款相对于标题栏下边缘y偏移 0
privacyOffsetY_B int 设置隐私条款相对于底部y偏移 18
privacyOffsetX int 设置隐私条款对于屏幕左边X轴偏移量,当为0时表示居中显示 0
(15)设置隐私条款选择框相关

setPrivacyCheckBox(String unCheckedImgPath, String checkedImgPath, boolean privacyState, int privacyCheckBoxWidth, int privacyCheckBoxHeight)

参数说明

参数 参数类型 说明 默认值
unCheckedImgPath String 设置未选中下按钮的图片地址 gt_one_login_unchecked
checkedImgPath String 设置选中下按钮的图片地址 gt_one_login_checked
privacyState boolean 设置选择框是否默认选中 true
privacyCheckBoxWidth int 选择框图片宽度 9
privacyCheckBoxHeight int 选择框图片高度 9
(16)设置隐私条款字体相关

setPrivacyClauseView(int baseClauseColor, int color, int privacyClauseTextSize)

参数说明

参数 参数类型 说明 默认值
baseClauseColor int 设置隐私条款基础文字颜色 0xFFA8A8A8
clauseColor int 设置隐私条款协议文字颜色 0xFF3973FF
privacyClauseTextSize int 设置隐私条款字体大小 10
(17)设置除了隐私条款其他的字体相关

setPrivacyTextView(String privacyTextViewTv1, String privacyTextViewTv2, String privacyTextViewTv3, String privacyTextViewTv4)

参数说明

参数 参数类型 说明 默认值
privacyTextViewTv1 String 设置隐私条款文字1 登录即同意
privacyTextViewTv2 String 设置隐私条款文字2
privacyTextViewTv3 String 设置隐私条款文字3
privacyTextViewTv4 String 设置隐私条款文字4 并使用本机号码登录
(18)设置开发者隐私条款相关

setPrivacyClauseText(String clauseNameOne, String clauseUrlOne, String clauseNameTwo, String clauseUrlTwo, String clauseNameThree, String clauseUrlThree)

自定义隐私条款顺序。按顺序设置,当有条款名称与条款URL一起为空时,则使用默认的运营商隐私条款。否则按照顺序排列,自定义隐私条款最多只能两个。

参数说明

参数 参数类型 说明 默认值
clauseNameOne String 设置隐私条款1名称 null
clauseUrlOne String 设置隐私条款1URL null
clauseNameTwo String 设置隐私条款2名称 null
clauseUrlTwo String 设置隐私条款2URL null
clauseNameThree String 设置隐私条款3名称 null
clauseUrlThree String 设置隐私条款3URL null

具体的使用请参考demo.

5.4.2.3 调用示例
ELoginThemeConfig.Builder builder = new ELoginThemeConfig.Builder();
        //设置背景
builder.setAuthBGImgPath("login_bg")
        //设置状态栏颜色 字体颜色
       .setStatusBar(Color.WHITE, Color.WHITE, true)
       //设置标题栏布局
       .setAuthNavLayout(Color.WHITE, 49, true, false)
       ...  

GYManager.getInstance().eAccountLogin(builder.build(), new GyCallBack() {
                    @Override
                    public void onSuccess(GYResponse response) {
                        Log.d(TAG, "response:" + response);
                        //关闭验证界面
                        GYManager.getInstance().finishAuthActivity();
                        showToast("登录成功");
                    }

                    @Override
                    public void onFailed(GYResponse response) {
                        Log.d(TAG, "response:" + response);
                        showToast("一键认证失败:" + response);
                        //关闭验证界面
                        GYManager.getInstance().finishAuthActivity();
                    }
                });
5.4.2.4 返回示例

一键认证会通过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}}'
}
失败示例:
{
    gyuid='8f41f31b0e7a43e6bbb4d1e6da77489b62', 
    success=false, 
    code=10006, 
    msg='网络请求异常', 
}
  • 类 GYResponse 属性详细说明:
属性 类型 属性说明
gyuid String 个验用户唯一标识
success boolean 登录是否成功
code int 状态码,30000表示登录成功
msg String 登录成功的时候,包含登录结果信息,登录失败的时候,为状态码描述信息
  • 登录成功的时候 msg说明:

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


//一键认证成功
{
    "msg":{
            "verifyType":0,
            "data":{
                "token":"qUiRvTAFLeAb36ubCtpcj",
                "expiredTime":1552887621123
            }
    }
}

一键认证成功返回参数解释:

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

5.4.3 添加自定义控件

    /**
     * 一键认证界面添加自定义控件.
     *
     * @param id         控件名称.
     * @param viewConfig 控件配置.
     */
    public void addRegisterViewConfig(String id, AuthRegisterViewConfig viewConfig)

在调用eAccountLogin之前,开发者可以在授权页面titlebar和body添加自定义的控件。
注意:自定义的控件不允许覆盖SDK默认的UI。

5.4.3.1 输入参数
参数名称 是否必填 类型 描述
id String 控件名称
viewConfig AuthRegisterViewConfig 控件配置
5.4.3.2 调用示例
Button mTitleBtn = new Button(context);
        mTitleBtn.setText("其他");
        mTitleBtn.setTextColor(0xff000000);
        mTitleBtn.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14);
        mTitleBtn.setBackgroundColor(Color.TRANSPARENT);
        RelativeLayout.LayoutParams mLayoutParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
        mLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, RelativeLayout.TRUE);
        mTitleBtn.setLayoutParams(mLayoutParams);

GYManager.getInstance().addRegisterViewConfig("title_button", new AuthRegisterViewConfig.Builder()
                .setView(mTitleBtn)
                .setRootViewId(AuthRegisterViewConfig.RootViewId.ROOT_VIEW_ID_TITLE_BAR)
                .setCustomInterface(new CustomInterface() {
                    @Override
                    public void onClick(Context context) {
                        showToast( "动态注册的其他按钮");
                    }
                })
                .build()
        );

5.4.4 AuthRegisterViewConfig说明:

AuthRegisterViewConfig authRegisterViewConfig =new AuthRegisterViewConfig.Builder().build();

方法说明:

方法名 传参类型 说明
setView View 开发者传入自定义的控件,需要设置好控件的布局属性,SDK只支持RelativeLayout布局
setRootViewId int 设置控件的位置。RootViewId.ROOT_VIEW_ID_TITLE_BAR指标题栏,RootViewId.ROOT_VIEW_ID_BODY指授权页空白处
setCustomInterface CustomInterface 设置控件事件。CustomInterface是一个接口,实现了点击方法

5.4.5 关闭一键认证界面

    /**
     * 关闭验证界面.
     */
    public void finishAuthActivity() 

SDK除了返回按钮触发以外,默认是不finsih授权页的,需要开发者自行实现。

5.4.6 关闭一键认证

    /**
     * 关闭一键认证.
     */
    public void cancelELogin();

一键认证结束后调用该方法,释放资源。

注意:该方法调用后,如果需要再次使用一键认证功能,需要重新初始化。一般的做法是在页面的onCreate中调用initELogin方法初始化一键认证,在onDestroy中调用cancelELogin关闭一键认证.

6.状态码

状态码 含义
30000 操作成功
30001 当前网络环境不适合执行该操作
30004 其他错误
30005 预登录失败
30006 一键认证失败
40047 一键认证取号失败

6.1 错误码

Code Description
-20101 app_id未传
-20102 当前上下文未传
-20103 授权页面未配置
-20104 没有预登录就进行取号
-20200 当前网络不可用
-20201 当前手机没有电话卡
-20202 当前没有开启流量
-20203 未获取到运营商
-20204 获取运营商错误
-20205 预登录超时
-20206 开启enableHIPRI失败
-20301 退出取号页面
-20302 按返回键退出取号页面
-20303 切换账号登陆方式
-20304 授权页面加载异常
-40101 移动运营商预登录失败
-40102 移动运营商取号失败
-40201 联通运营商预登录失败
-40202 联通运营商取号失败
-40301 电信运营商预登录失败
-40302 电信运营商取号失败
-50100 服务接口返回异常
-50101 服务接口解密失败
-50102 服务接口返回错误

6.2 运营商错误码

运营商接口返回失败常见的错误代码,位于错误回调JSON中meta_data内的运营商错误码

6.2.1 移动运营商

错误码 含义
102102 网络异常
102507 登录超时(授权页点登录按钮时)
103101 appkey错误
103102 包签名错误
103108 短信验证码错误
103109 短信验证码校验超时
103111 网关IP错误(运营商误判)
103119 appid不存在
103125 手机号码格式错误
103203 缓存失效
103211 其他错误
103901 短验下发次数已达上限(5次/min,10次/day)
103902 scrip失效
103911 token请求过于频繁,10分钟内获取token且未使用的数量不超过30个
105001 联通取号失败
105002 移动取号失败
105003 电信取号失败
105021 已达当天取号限额
105302 appid不在白名单
200005 用户未授权(READ_PHONE_STATE)
200010 取号请求时获取imsi失败
200014 手机号码不存在
200020 用户取消登录
200021 数据解析异常
200022 无网络
200023 请求超时
200024 数据网络切换失败
200025 其他错误(socket、系统未授权数据蜂窝权限等)
200026 输入参数错误
200027 未开启数据网络
200028 网络请求出错
200030 没有初始化参数
200038 电信重定向失败
200039 电信取号接口返回失败
200040 UI资源加载异常
200048 未安装sim卡
200050 EOF异常
200060 切换账号(未使用SDK短验时返回)
200061 授权页面异常
200062 预登录不支持联通
200063 预登录不支持电信

6.2.2 电信运营商

错误码 含义
-64 permission-denied(无权限访问)
-65 API-request-rates-Exceed-Limitations(调用接口超限)
-10001 取号失败
-10002 参数错误
-10003 解密失败
-10004 ip受限
-10005 异网取号回调参数异常
-10006 Mdn取号失败,且属于电信网络
-10007 重定向到异网取号
-10008 超过预设取号阈值
-10009 时间戳过期
-20005 sign-invalid(签名错误)
-20006 应用不存在
-20007 公钥数据不存在
-20100 内部解析错误
-20102 加密参数解析失败
-30001 时间戳非法
-30003 topClass失效,请查看5.3常见问题。
51002 参数为空
51114 无法获取手机号数据
-8001 请求网络异常
-8002 请求参数异常
-8003 请求超时
-8004 移动网络未开启
-8005 请先初始化SDK
-8100 网络无连接
-8101 响应码错误
-8102 Socket超时异常(读取超时、连接超时)
-8103 域名解析异常
-8104 IO异常
-8201 响应码错误
-720001 切换异常
-720002 切换异常超时

6.2.3 联通运营商

错误码 含义
100 应用未授权
101 应用秘钥错误
102 应用无效
103 应用未授权该IP访问
104 应用访问次数不足
105 应用包名不正确
200 tokenId无效
201 token已失效
202 token未授权该应用访问
203 登录鉴权级别不满足接口鉴权要求
300 接口未开放
301 应用未授权码访问该接口
302 IP未授权码访问该接口
303 应用访问接口次数超日限额
400 请求参数为空
401 请求参数不完整
402 请求参数非法
600 请求非法
1000 请求解析错误
1001 请求已失效
1002 验签失败
1003 授权码已过期
1004 加密方式不支持
1005 RSA加密错误
1010 服务间访问失败
1011 服务间访问错误
2004 用户不存在
3001 unikey无效
3002 跳转异网取号
3003 本网执行取号失败,不需要重定向
3004 NET取号失败
3005 上网方式为WIFI,无法取号
3006 urlencode编码失败
3007 请求认证接口异常
3008 imsi取号失败
3009 非联通号码
3010 网关取号错误
3011 源IP鉴权失败
3012 网关取号失败
3013 电信网关取号失败
3014 电信网关取号错误
3015 获取accessCode请求参数失败
3016 移动网关取号失败
3017 移动网关取号错误

7.常见问题

建议开发者在开发期间开启debug模式,通过查看debug日志,可以更好的排查问题。

//在初始化之前调用
GYManager.getInstance().setDebug(true);

一键认证支持哪些运营商和网络环境

目前支持移动 2G、3G、4G,联通 3G、4G,电信 4G。

是否支持双卡手机

支持,双卡手机以开启数据流量的 SIM 卡进行认证。

WIFI环境下能否验证

在数据网络开通的前提下,WiFi 环境中会强制使用数据网络触发网关请求,请求仅为几K,可正常校验。

是否支持携号转网用户

SDK 不提供接口判断用户是否为携号转网用户,但可以判断用户流量卡当前的运营商。即携号转网用户可正常使用。

是否支持虚拟运营商

仅支持三大运营商(移动、联通、电信)的手机号进行一键认证。

是否支持流量卡

三大运营商(移动、联通、电信)的卡,能够正常使用数据网络,运营商通过网关能够正常取号,均会被作为正常的卡来判断。

部分OPPO手机上预登录失败

部分OPPO手机上新安装APP默认只有wifi网络权限,默认没有给予访问移动数据流量的权限。需要用户在设置中手动授予权限。开发者可以引导用户开启,有以下两种方案:

  • 引导手动设置权限:设置->双卡与移动网络->使用WLAN与移动网络的应用->找到需要设置的APP->设置WLAN与移动数据即可
  • 关闭WIFI,操作应用,会弹出使用移动网络提醒,点击设为允许,即可正常使用

文档中心搜索