本文档仅适用于3.0以前的gysdk。
3.0以后版本,请统一在《API接口》中查看文档
如果您已经接入了一键登录功能,那么可以跳过以下配置SDK步骤。
在接入本机号码校验之前,请先确认已经集成个验SDK。下文使用到的资源文件,均可在官网下载的SDK资源包中获得。调用一键认证接口前请先完成个验SDK的接入与初始化。
dependencies {
implementation 'com.getui:gysdk:2.3.1.0'
implementation 'com.getui:elogin:1.3.1.0'
implementation 'com.getui:gtc:3.2.4.0'
}
将官网下载下来的 aar包 放置到项目的libs目录下
build.gradle
defaultConfig {
....
}
repositories {
flatDir {
dirs 'libs'
}
}
dependencies {
// 添加个验 aar 依赖,name与aar包的名字同步
compile(name: 'gysdk-1.6.0.0', ext: 'aar')
compile(name: 'gtc-2.1.0', ext: 'aar')
//添加一键登录扩展包
compile(name: 'elogin-1.1.0.0', ext: 'aar')
}
-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.**
-keep class cn.com.chinatelecom.** {*;}
API 类名: com.g.gysdk.GYManager
方法 | 功能说明 |
---|---|
getVerifyToken | 【本机号码校验】获取本机号码校验通行证 |
verifyPhoneNumber | 【本机号码校验】手机号码校验 |
cancelGetVerifyToken | 【本机号码校验】关闭获取本机号码校验通行证 |
本机号码校验需要先获取通行证,然后再进行本机号码校验。
/**
* 获取本机号码校验通行证.
*
* @param phone 待校验手机号码.
* @param timeout 超时时间.
* @param gyCallBack 回调.
*/
public void getVerifyToken(String phone, int timeout, GyCallBack gyCallBack);
参数名称 | 是否必填 | 类型 | 描述 |
---|---|---|---|
phone | 是 | String | 待校验手机号码 |
timeout | 是 | int | 超时时间(建议8000ms-15000ms) |
gyCallBack | 否 | GyCallBack | 回调 |
GYManager.getInstance().getVerifyToken(phone, 5000, new GyCallBack() {
@Override
public void onSuccess(final GYResponse response) {
try {
JSONObject jsonObject = new JSONObject(response.getMsg());
String accessCode = jsonObject.getString("accessCode");
String processId = jsonObject.getString("process_id");
int operatorType = jsonObject.getInt("operatorType");
String phone = jsonObject.getString("phone");
} catch (Throwable t) {
t.printStackTrace();
}
}
@Override
public void onFailed(GYResponse response) {
Log.d("onFailed", "response:" + response);
showToast(response.toString());
}
});
通过GyCallBack
返回结果.
GyCallBack:
public interface GyCallBack {
/**
* description:获取成功.
*/
void onSuccess(GYResponse response);
/**
* description:获取失败.
*/
void onFailed(GYResponse response);
}
GYResponse返回示例:
//获取成功
{
gyuid='cd529bfde4c641d0bc42257e2ed7300131',
success=true,
code=30000,
msg='{"process_id":"c9c27556b973d4b9c1f952795f02a2ef","accessCode":"nm360b88d6e1a64ac4b4d7e70776a35b2e","phone":"17768345313","operatorType":4}'
}
//获取失败
{
gyuid='8f41f31b0e7a43e6bbb4d1e6da77489b62',
success=false,
code=30007,
msg='{"msg":1,"process_id":"9dfbfce85f8214af57be674d2b1069b8","operatorType":"CU","clienttype":"1","errorCode":"-20205","metadata":{"resultCode":1,"resultMsg":"请求sdk超时","resultData":"","traceId":""}}'
}
属性 | 类型 | 属性说明 |
---|---|---|
gyuid | String | 个验用户唯一标识 |
success | boolean | 是否获取成功 |
code | int | 状态码,30000表示获取成功 |
msg | String | 获取成功的时候,包含accessCode信息,验证失败的时候,为失败详细信息 |
预登录成功时msg:
字段 | 必须 | 类型 | 解释 |
---|---|---|---|
process_id | 是 | String | 流水号 |
accessCode | 是 | String | 运营商返回的accessCode |
phone | 是 | String | 发往运营商的手机号 |
operatorType | 是 | int | 运营商验证类型,下一步校验手机号需要用到该参数 |
预登录失败时msg:
当code为30007时,msg是具体的错误信息JSON字符串。其他情况为code的简单说明,例如网络异常
。以下是code为30007时msg的详细说明:
字段 | 必须 | 类型 | 解释 |
---|---|---|---|
errorCode | 是 | String | 错误码 |
msg | 否 | String | 运营商返回的状态信息 |
process_id | 否 | String | 流水号 |
metadata | 是 | JSONObject | 具体的错误原因 |
operatorType | 否 | String | 客户端获取的运营商 |
clienttype | 是 | String | 客户端,1表示Android |
/**
* 验证本机号码.
*
* @param accessCode 本机号码校验通行证.
* @param processId processId.
* @param phone 待校验号码.
* @param operatorType 运营商验证类型.
* @param gyCallBack 回调.
*/
public void verifyPhoneNumber(String accessCode, String processId, String phone, int operatorType, GyCallBack gyCallBack);
我们还提供了服务端的本机号码校验接口,如果开发者有这方面的需求,请参考服务端的文档。
参数名称 | 是否必填 | 类型 | 描述 |
---|---|---|---|
accessCode | 是 | String | 本机号码校验通行证 |
processId | 是 | String | 流水号 |
phone | 是 | String | 待验证号码 |
operatorType | 是 | int | 运营商验证类型,由获取本机号码校验通行证接口返回 |
gyCallBack | 否 | GyCallBack | 回调 |
GYManager.getInstance().verifyPhoneNumber(accessCode, processId, phone, operatorType, new GyCallBack() {
@Override
public void onSuccess(GYResponse response) {
showToast("校验成功");
}
@Override
public void onFailed(GYResponse response) {
showToast("校验失败:" + response.getMsg());
}
});
通过GyCallBack
返回结果.
GyCallBack:
public interface GyCallBack {
/**
* description:验证成功.
*/
void onSuccess(GYResponse response);
/**
* description:验证失败.
*/
void onFailed(GYResponse response);
}
GYResponse返回示例:
{
gyuid='cd529bfde4c641d0bc42257e2ed7300131',
success=true,
code=30000,
msg='成功'
}
属性 | 类型 | 属性说明 |
---|---|---|
gyuid | String | 个验用户唯一标识 |
success | boolean | 是否获取成功 |
code | int | 状态码,30000表示验证成功 |
msg | String | 返回码说明 |
/**
* 关闭获取本机号码校验通行证.
*/
public void cancelGetVerifyToken();
SDK返回码
状态码 | 含义 |
---|---|
30000 | 操作成功 |
30001 | 当前网络环境不适合执行该操作 |
30004 | 其他错误 |
30005 | 预登录失败 |
30006 | 一键登录失败 |
30007 | 获取本机号码校验token失败 |
40047 | 一键登录取号失败 |
40053 | 手机号校验失败 |
errorCode | Description |
---|---|
-20100 | 手机号未传 |
-20101 | app_id未传 |
-20104 | 没有预取号就进行取号 |
-20200 | 当前网络不可用 |
-20201 | 当前手机没有电话卡 |
-20202 | 当前没有开启流量 |
-20203 | 未获取到运营商 |
-20204 | 获取运营商错误 |
-20205 | 预取号超时 |
-20206 | 没有预取号成功就进行取号 |
-20207 | WIFI下请求切换网络失败 |
-20301 | 退出取号页面 |
-20302 | 按返回键退出取号页面 |
-20303 | 切换账号登陆方式 |
-20304 | 授权页面加载异常 |
-30200 | SDK内部请求PreGateWay接口超时 |
-40101 | 移动运营商预取号失败 |
-40102 | 移动运营商取号失败 |
-40104 | 移动不支持的网络制式 |
-40201 | 联通运营商预取号失败 |
-40202 | 联通运营商取号失败 |
-40204 | 联通不支持的网络制式(不支持2G) |
-40301 | 电信运营商预取号失败 |
-40302 | 电信运营商取号失败 |
-40305 | 电信不支持的网络制式(不支持2G, 3G) |
-50100 | 服务接口返回异常 |
-50101 | 服务接口解密失败 |
-50102 | 服务接口返回错误 |
其余情况请参考状态码汇总说明
建议开发者在开发期间开启debug模式,通过查看debug日志,可以更好的排查问题。
//在初始化之前调用
GYManager.getInstance().setDebug(true);
目前支持移动 2G、3G、4G、5G,联通 3G、4G、5G,电信 4G、5G
支持,双卡手机以开启数据流量的 SIM 卡进行认证。
在数据网络开通的前提下,WiFi 环境中会强制使用数据网络触发网关请求,请求仅为几K,可正常校验。
SDK 不提供接口判断用户是否为携号转网用户,但可以判断用户流量卡当前的运营商。即携号转网用户可正常使用。
仅支持三大运营商(移动、联通、电信)的手机号进行一键登录。
三大运营商(移动、联通、电信)的卡,能够正常使用数据网络,运营商通过网关能够正常取号,均会被作为正常的卡来判断。
目前一键认证不支持分屏幕显示。
部分OPPO手机上新安装APP默认只有wifi网络权限,默认没有给予访问移动数据流量的权限。需要用户在设置中手动授予权限。开发者可以引导用户开启,有以下两种方案:
以上文档对您是否有帮助?