本机号码认证集成文档
1. 概述
官网下载SDK后进行解压,解压后包含两个文件是:
a) Demo工程
b) 相关依赖包
SDK同时包含了本机号码认证和一键登录两个功能。号码认证服务包含本机号码认证和一键登录时两个不同的功能,使用场景不一样,无需一起使用。
本机号码认证使用场景:用户输入手机号码,通过SDK获取token(通过getVerifyToken获取),服务端携带输入的手机号码和token去运营商网关进行校验(服务端调用VerifyMobile接口),返回的结果时用户当前上网使用的号码与输入的号码是否一致。
一键登录使用场景:用户无需输入手机号码,SDK会拉起授权页,用户确认授权后,SDK会获取token(通过getLoginToken获取),服务端携带token到运营商网关获取用户当前上网使用的号码(服务端调用GetMobile接口),并返回给APP服务端。
2. 准备工作
a) 请确保您的终端设备已经开启了4G网络(联通、移动支持3G网络,但接口耗时会增加)
b) 请确保已经在友盟+控制台开通了号码认证服务并创建了对应的方案,点击进入控制台。
c) 您也可以点击查看完整使用流程。
3. 运行demo工程
您可以直接运行解压后的demo工程。Demo工程
4. 开发环境搭建
1) maven自动集成
在工程build.gradle配置脚本中buildscript和allprojects段中添加【友盟+】SDK新maven仓库地址。
maven { url 'https://repo1.maven.org/maven2/' }buildscript {
repositories {
google()
jcenter()
maven { url 'https://repo1.maven.org/maven2/' }
}
dependencies {
classpath 'com.android.tools.build:gradle:3.4.0'
}
}
allprojects {
repositories {
google()
jcenter()
maven { url 'https://repo1.maven.org/maven2/' }
}
}在工程App 对应build.gradle配置脚本dependencies段中添加common SDK库和认证库依赖:
dependencies {
implementation 'com.umeng.umsdk:common:+'// 必选
implementation 'com.umeng.umsdk:asms:+'// 必选
implementation 'com.umeng.umsdk:uverify:+'// 必选
implementation 'com.umeng.umsdk:uverify-main:+'// 必选
implementation 'com.umeng.umsdk:uverify-logger:+'// 必选
implementation 'androidx.appcompat:appcompat:1.3.1'(最低版本)
}2) 手动集成
下载SDK并解压后,将aar拷贝至工程的libs目录下。强依赖包:
umeng-uverify-2...aar
umeng-common-9...jar
umeng-asms-armeabi-v1...aar
umeng-logger-2.x.x.aar
umeng-main-2.x.x.aar
以及动态引入v7包:com.android.support:appcompat-v7:27.1.1(最低版本)
3) 配置Android9.0对http协议的支持方式
在res/xml目录新建网络安全配置文件:network_security_config.xml
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">enrichgw.10010.com</domain>
</domain-config>
</network-security-config>在app项目AndroidManifest.xml中application节点增加启用明文传输数据的配置
<application android:networkSecurityConfig="@xml/network_security_config" >4) 相关调用函数
注意:
/**
* 为满足工信部合规要求,请确保按照合规指南进行预初始化
* https://developer.umeng.com/docs/119267/detail/182050
*/
UMConfigure.preInit(this, "替换为Appkey,服务后台位置:应用管理 -> 应用信息 -> Appkey", "渠道信息");
/*
* 0.在Application的onCreate方法中初始化Appkey等信息
*/
UMConfigure.init(this, "替换为Appkey,服务后台位置:应用管理 -> 应用信息 -> Appkey", "渠道信息", UMConfigure.DEVICE_TYPE_PHONE, "");
/*
* 1.初始化获取token实例
*/
mTokenListener = new UMTokenResultListener() {}
/*
* 2.初始化SDK实例
*/
umVerifyHelper =UMVerifyHelper.getInstance(context, mTokenListener);
/*
* 3.设置SDK密钥
*/
umVerifyHelper.setAuthSDKInfo();
/*
* 4.检测终端网络环境是否支持一键登录或者号码认证
*/
umVerifyHelper.checkEnvAvailable();
/*
* 5.若步骤4支持,则根据业务情况,调用预取号或者一键登录接口
* 详见demo接入工程
*/
umVerifyHelper.getVerifyToken(context, 5000);5) 混淆keep规则
-keep class com.umeng.** {*;}
-keepclassmembers class * {
public <init> (org.json.JSONObject);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}6)若开启资源混淆,需配置
"R.drawable.authsdk*",
"R.layout.authsdk*",
"R.anim.authsdk*",
"R.id.authsdk*",
"R.string.authsdk*",
"R.style.authsdk*",
"R.drawable.umcsdk*",
"R.layout.umcsdk*",
"R.anim.umcsdk*",
"R.id.umcsdk*",
"R.string.umcsdk*",
"R.style.umcsdk*",5. 智能认证SDK方法说明
5.1 获取认证实例(getInstance)
/**
* 函数名:getInstance
* @param context
* @param tokenResultListener
* @return UMVerifyHelper 实例
*/
public static UMVerifyHelper getInstance(Context context, UMTokenResultListener tokenResultListener)5.2设置SDK密钥(setAuthSDKInfo)
/**
* 设置SDK密钥信息
* @param secret 密钥信息 需要从服务端获取
*/
public void setAuthSDKInfo(String secret)5.3检查终端是否支持号码认证(checkEnvAvailable)
/**
* SDK环境检查函数,检查终端是否支持号码认证,通过UMTokenResultListener返回code
* @param type 1:本机号码校验 2:一键登录
* 600024 终端支持认证
* 600013 系统维护,功能不可用
*/
public void checkEnvAvailable(@IntRange(from =1, to =2)int type)5.4关键日志开关(setLoggerEnable)
/**
* 设置SDK 是否开启日志
* @param isDebug 为true则输出关键步骤运行日志
*/
public void setLoggerEnable(boolean isDebug)5.5加速本机号码校验(accelerateVerify)
/**
* 加速本机号码校验
*
* @param overdueTime 预取号有效期
* @param listener 预取号回调
*/
public void accelerateVerify(int overdueTime, final UMPreLoginResultListener listener)5.6本机号码认证获取token(getVerifyToken)
/**
* 获取本机号码认证token
* @param timeout 超时时间,单位ms
*/
public void getVerifyToken(int timeout)5.7 SDK回调接口
获取token回调
public interface UMTokenResultListener {
/**
* 授权页唤起成功或获取token成功
* @param ret 返回码
*/
void onTokenSuccess(String ret);
/**
* 获取token失败
* @param ret 返回信息
*/
void onTokenFailed(String ret);
}获取预取号码回调
public interface UMPreLoginResultListener {
/**
*
* @param vendor 返回预取成功运营商
*/
void onTokenSuccess(String vendor);
/**
*
* @param vendor 返回预取失败运营商
* @param ret 返回失败原因
*/
void onTokenFailed(String vendor, String ret);
}SDK返回码
编号 | 返回描述 | 建议 |
600000 | 获取token成功 | 无 |
600001 | 唤起授权页成功 | 无 |
600002 | 唤起授权页失败 | 建议切换到到其他登录方式 |
600004 | 获取运营商配置信息失败 | 创建工单 |
600005 | 手机终端不安全 | 建议切换到到其他登录方式 |
600007 | 未检测到sim卡 | 提示用户检查sim卡后重试 |
600008 | 蜂窝网络未开启 | 提示用户开启移动网络后重试 |
600009 | 无法判断运营商 | 创建工单 |
600010 | 未知异常 | 创建工单 |
600011 | 获取token失败 | 切换到其他登录方式 |
600012 | 获取预取号失败 | 无 |
600013 | 运营商维护升级 该功能不可用 | 创建工单 |
600014 | 运营商维护升级,该功能已达最大调用次数 | 创建工单 |
600015 | 接口超时 | 切换到其他登录方式 |
600017 | AppID、Appkey解析失败 | 创建工单 |
600021 | 点击登录时检测到运营商已切换 | 切换到其它登录方式 |
600024 | 终端环境检查⽀持认证 | 无 |
600025 | 终端检测参数错误 | 检查传⼊参数类型与范围是否正确 |
600026 | 授权页已加载时不允许调用加速或预取号接口 | 检查是否有授权页拉起后,去调用加速或预取号接口,该行为不允许 |
5.8获取运营商信息(getCurrentCarrierName)
/**
* 返回默认上网卡运营商
* @return CMCC-中国移动 CTCC-中国电信 CUCC-中国联通
*/
public String getCurrentCarrierName()5.9获取verifyId(getVerifyId)
/**
* 设备唯一识别标识上传接口,如需开启调用阈值设置,请务必上传,以更好识别并防控恶意重复认证的设备。android Q上传加密android ID,非android Q上传加密imei
* @param context
* @return
*/
public String getVerifyId(Context context)