一.准备工作
概述
本文是创蓝闪验 SDK_Android 端接入文档,用于指导 SDK 的集成使用。在对接之前您需要花 5-10 分钟阅读以下条目,可减少对接过程中的问题。
合规性说明
能力介绍
一键登录:SDK获取当前流量卡对应的token,通过服务端可置换当前流量卡的手机号码。
本机校验:SDK获取当前流量卡对应的token,提供手机号码,通过服务端可校验提供的手机号是否为当前流量卡的手机号码。
注意:本机校验和一键登录是两个单独的能力,两者的token不能互用,否则会报"应用能力不匹配"。
前置条件
- 创蓝闪验 SDK 支持 minSdkVersion 16 及以上版本
- 创蓝闪验 SDK 支持中国移动 3/4G/5G、联通 3/4G/5G、电信 4G/5G 的取号能力,在 3G 网络下时延会更高
- 创蓝闪验 SDK 支持单数据网络、数据网络与 WiFi 网络双开,不支持单 WiFi 网络
- 对于双卡手机,创蓝闪验 SDK 只对当前流量卡取号,双卡均未开数据流量 SDK 将会返回错误码
注意:三网运营商内部执行逻辑不同,必须分别使用三网运营商的卡进行测试,防止功能异常
创建应用
应用的创建流程及APPID的获取,请查看「
账号创建」文档
注意:应用 AppId 与包名、包签名一一绑定,如果应用有多个包名或签名不同的应用,须创建多个对应包名和签名的应用,否则初始化会报包名或签名校验不通过。
快速体验 demo
开发环境搭建
本地集成
a.将 SDK 中 libs 目录下的 aar 包拷贝到您工程的 libs 目录下,如没有该目录需新建。
b.在 build 文件的 dependencies 中添加 aar 包依赖:
repositories {
flatDir {
dirs '../app/libs'
}
}
dependencies {implementation fileTree(include: ['*.aar'], dir: 'libs')}
权限配置
必要权限:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
配置权限说明
权限名称 | 权限说明 | 使用说明 |
---|
INTERNET | 允许应用程序联网 | 用于访问网关和认证服务器 |
ACCESS_WIFI_STATE | 允许访问 WiFi 网络状态信息 | 允许程序访问 WiFi 网络状态信息 |
ACCESS_NETWORK_STATE | 允许访问网络状态 | 区分移动网络或 WiFi 网络 |
CHANGE_NETWORK_STATE | 允许改变网络连接状态 | 设备在 WiFi 跟数据双开时,强行切换使用数据网络 |
CHANGE_WIFI_STATE | 允许改变 WiFi 网络连接状态 | 设备在 WiFi 跟数据双开时,强行切换使用数据网络 |
注册授权页 activity
在 application 标签内配置授权登录 activity,screenOrientation 和 theme 可以根据项目需求自行修改
<!-- *******************************授权页*********************************** -->
<activity
android:name="com.chuanglan.shanyan_sdk.view.ShanYanOneKeyActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:launchMode="singleTop"
android:screenOrientation="behind"
/>
<!-- *******************************协议页*********************************** -->
<activity
android:name="com.chuanglan.shanyan_sdk.view.CTCCPrivacyProtocolActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:launchMode="singleTop"
android:screenOrientation="behind"
/>
配置对 http 协议的支持
两种方式(任选其一):
方式一:在 application 标签中配置 usesCleartextTraffic,示例如下
<application
android:name=".view.MyApplication"
***
android:usesCleartextTraffic="true"
></application>
方式二:将域名 10010.com 设置为白名单,示例如下
<application
android:name=".view.MyApplication"
***
android:networkSecurityConfig="@xml/network_security_config"
></application>
[network_security_config.xml]文件:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">10010.com</domain>
</domain-config>
</network-security-config>
混淆规则
-dontwarn com.cmic.gen.sdk.**
-keep class com.cmic.gen.sdk.**{*;}
-dontwarn cn.com.chinatelecom.account.**
-keep class cn.com.chinatelecom.account.**{*;}
-keep class com.unicom.online.account.shield.** {*;}
-keep class com.unicom.online.account.kernel.** {*;}
-dontwarn org.bouncycastle.**
-keep class org.bouncycastle.** { *;}
资源压缩过滤
如果使用 AndResGuard 资源压缩,需添加过滤,参考 demo 示例:
"R.anim.umcsdk*",
"R.drawable.umcsdk*",
"R.layout.layout_shanyan*",
"R.id.shanyan_view*",
如果使用系统 shrinkResources true,需要在 raw/keep 里面配置资源过滤[keep.xml]:
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools" tools:keep="R.anim.umcsdk*,
R.drawable.umcsdk*,
R.layout.layout_shanyan*,
R.id.shanyan_view*" />
添加示例:
通过上面的几个步骤,工程就配置完成了,接下来就可以在工程中使用创蓝闪验 SDK 进行开发了。
二.一键登录 api
0.提升授权页的打开速度
- 建议在执行拉取授权登录页的方法前,提前一段时间调用预取号方法,中间最好有 2-3 秒的缓冲(因为预取号方
法需要 1~3s 的时间取得临时凭证)
- 如果条件允许,超时时间设置为 6 秒有助于网络不好的时候取号成功率,SDK 默认 4 秒。
1.初始化
调用 SDK 其他流程方法前,请确保已调用过初始化,否则会返回未初始化。(会采集信息,建议放到同意协议后调用)
方法原型
public void init(Context context, String appId, InitListener initListener)
参数描述
参数 | 类型 | 说明 |
---|
context | Context | 传 ApplicationContext 对象 |
appId | String | 创蓝闪验平台获取到的 appId |
initListener | InitListener | 初始化回调监听 |
示例代码
OneKeyLoginManager.getInstance().init(getApplicationContext(), appId, new InitListener() {
@Override
public void getInitStatus(int code, String result) {
}
});
getInitStatus(int code, String result)返回参数 code 和 result,含义如下:
字段 | 类型 | 含义 |
---|
code | int | code 为 1022:成功;其他:失败 |
result | String | 初始化结果描述 |
2.预取号
示例代码:
OneKeyLoginManager.getInstance().getPhoneInfo(new GetPhoneInfoListener() {
@Override
public void getPhoneInfoStatus(int code, String result) {
}
});
getPhoneInfoStatus(int code, String result)
返回参数 code 和 result,含义如下:
字段 | 类型 | 含义 |
---|
code | Int | code 为 1022:成功;其他:失败 |
result | String | 预取号结果描述 |
3.拉起授权页&获取 token
- 拉起授权页方法将会调起运营商授权页面。已登录状态请勿调用 。
- 每次调用拉起授权页方法前均需先调用授权页配置方法,否则授权页可能会展示异常。
- 必须保证上一次拉起的授权页已经销毁再调用,否则 SDK 会返回请求频繁。
- 拉起一次授权页,登录按钮最多只能点击 4 次,第五次默认会置灰,不返回信息。
方法原型:
public void openLoginAuth(boolean isFinish, OpenLoginAuthListener openLoginAuthListener, OneKeyLoginListener oneKeyLoginListener){}
参数描述
字段 | 类型 | 含义 |
---|
isFinish | boolean | 点击授权页一键登录按钮有回调时是否自动销毁授权页:true:自动销毁 false:不自动销毁,开发者需主动调用销毁授权页方法进行授权页销毁操作 |
openLoginAuthListener | OpenLoginAuthListener | 授权页是否拉起成功监听 |
oneKeyLoginListener | OneKeyLoginListener | 点击授权页登录按钮及返回键监听(code 等于 1011 为点击返回键(包括物理返回键),其他均为点击一键登录按钮的回调) |
示例代码
OneKeyLoginManager.getInstance().openLoginAuth(false, new OpenLoginAuthListener() {
@Override
public void getOpenLoginAuthStatus(int code, String result) {
}
}, new OneKeyLoginListener() {
@Override
public void getOneKeyLoginStatus(int code, String result) {
}
});
getOpenLoginAuthStatus(int code,String result)返回参数 code 和 result,含义如下:
字段 | 类型 | 含义 |
---|
code | int | code 为 1000:授权页成功拉起其他:失败 |
result | String | 打开授权页结果描述 |
getOneKeyLoginStatus(int code,String result)返回参数 code 和 result,含义如下:
字段 | 类型 | 含义 |
---|
code | int | code 为 1000:成功 其他:失败 (包含点击返回键 code==1011) |
result | String | 结果描述 |
当外层 code 为 1000 时,result 的返回示例格式为
{"token":"A1-Gv-q1ORHeOOZyFe261VJAD_JetfjvVNzJyoQqJxq_lSY39xXmtagZ0VA66IMr7htOQWSHBhnvM4wNDJlZV0DsUtGZDU640ItGCdYuA0N0k3cjkcg4omJWm_1YEMEa55TE-cCo6DsE3LAsc7nmzp5ortoS9f5QjBV9RGGBQYDbX74Er2N9Or8alWzAyP5KzvhJ3mUe3gQFWjYomTpw-fohsjv8ldi0AqaBUxYittipt3l69j3uMK07WAWe_kmSj1biQvbs5hVnCKofFXyvhw_9A"}
含义如下:
字段 | 类型 | 含义 |
---|
token | String | 置换手机号接口所需的 token。每个 token 只能使用一次,一次有效。 |
4.置换手机号
当一键登录外层 code 为 1000 时,会获取到置换手机号所需的 token。请参考「
服务端」文档来实现获取手机号码的步骤
5.其他 API
a.设置 log 开关
OneKeyLoginManager.getInstance().setDebug(true);
注:需要放到 SDK 初始化之前调用,用 ProcessShanYanLogger 可以过滤方法调用及回调等信息,用 UIShanYanTask 可以过滤 UI 配置相关日志,用 ActivityLifecycleShanYanTask 可以过滤界面生命周期相关日志。
b.设置 loading 显示状态
点登录按钮时默认会显示 loading,本方法可在 loading 显示后改变 loading 状态时调用,如果需要点击登录按钮不显示 loading,请请看常见问题
OneKeyLoginManager.getInstance().setLoadingVisibility(false);
参数描述
参数 | 类型 | 说明 |
---|
visibility | boolean | 点击一键登录后,授权页展示的 loading view(设置 true 显示;false 隐藏) |
c.设置协议勾选框状态
本方法仅在授权页拉起后想改变 CheckBox 状态时使用,设置进入授权页时的默认状态,请使用授权页配置 ShanYanUIConfig 里面的 setPrivacyState 方法
OneKeyLoginManager.getInstance().setCheckBoxValue(false);
参数描述
参数 | 类型 | 说明 |
---|
isChecked | boolean | 设置协议复选框是否选中(设置 true 选中;false 未选中) |
d.清理预取号缓存
OneKeyLoginManager.getInstance().clearScripCache(getApplicationContext());
e.获取运营商类型
OneKeyLoginManager.getInstance().getOperatorType(getApplicationContext());
返回值 4 种:CMCC、CUCC、CTCC、UNKNOWN_OPERATOR;
释义:CMCC(移动);CUCC(联通);CTCC(电信); Unknown_Operator(无 SIM 卡或非三网运营商)
f.设置预取号超时时间
需要初始化之前调用,方法原型:
OneKeyLoginManager.getInstance().setTimeOutForPreLogin(6);
参数描述
参数 | 类型 | 说明 |
---|
time | int | 超时时间;单位秒,不设置默认 4 |
注:不建议设置小于 4 的值,否则可能会导致超时的概率增加。
g.获取运营商信息
OneKeyLoginManager.getInstance().getOperatorInfo(getApplicationContext());
返回示例:
{"telecom":"CTCC",
"protocolName":"天翼服务及隐私协议",
"protocolUrl":"https:\/\/e.189.cn\/sdk\/agreement\/detail.do?hidetop=true"}
返回信息描述
字段 | 类型 | 含义 |
---|
telecom | String | 当前流量卡运营商类型,共四种情况:CMCC(移动);CUCC(联通);CTCC(电信); Unknown_Operator(无 SIM 卡或非三网运营商) |
protocolName | String | 当前流量卡对应的协议名称 |
protocolUrl | String | 当前流量卡对应的协议链接 |
h.授权页协议点击事件监听
OneKeyLoginManager.getInstance().setPrivacyOnClickListener((url, name) -> {
});
返回参数:
字段 | 类型 | 含义 |
---|
url | String | 点击的协议链接 |
name | String | 点击的协议名称 |
i.设置是否只允许主进程调用
OneKeyLoginManager.getInstance().checkProcessesEnable(false);
参数描述
参数 | 类型 | 说明 |
---|
enable | boolean | true:只在主进程可以调用;false:不判断进程;默认:true(每次调用方法会执行一次系统的 getRunningAppProcesses 方法); |
j.授权页点击事件监听
需要对授权页点击事件监听的用户,可调用此方法监听授权页点击事件,无此需求可以不写。
OneKeyLoginManager.getInstance().setActionListener(new ActionListener() {
@Override
public void ActionListner(int type, int code, String message) {
}
});
ActionListners(int type,int code,String message)返回参数含义如下:
字段 | 类型 | 含义 |
---|
type | int | type=1 ,隐私协议点击事件 type=2 ,checkbox 点击事件 type=3 ,一键登录按钮点击事件 |
code | int | type=1 ,隐私协议点击事件,code 分为 0,1,2,3(协议页序号)type=2 ,checkbox 点击事件,code 分为 0,1(0 为未选中,1 为选中)type=3 ,一键登录点击事件,code 分为 0,1(0 为协议未勾选时,1 为协议勾选时) |
message | String | 点击事件的详细信息 |
k.销毁授权页
A.自动销毁
1.在授权登录页面,当用户主动点击左左上角返回按钮时,返回码为 1011,授权页面将自动销毁授权页;
2.当用户点击物理返回键返回键(相当于取消登录),返回码为 1011,授权页面将自动销毁授权页
3.当用户设置一键登录或者其他自定义控件为自动销毁时,得到回调后,授权页面将自动销毁
B.手动销毁
OneKeyLoginManager.getInstance().finishAuthActivity();
注意:销毁授权页时,请不要在销毁后回到的界面主线程中做耗时操作,避免堵塞授权页 onDestroy 方法,导致再次调用拉起授权页时报请求频繁。
l.跳转到 SDK 内部协议页
public void startPrivacyProtocolActivity(Context context, String url, String name){}
参数描述
参数 | 类型 | 说明 |
---|
context | Context | 上下文 |
url | url | 协议链接 |
name | name | 协议名称 |
m.授权页启动|销毁监听
OneKeyLoginManager.getInstance().setLoginActivityStatusListener(new LoginActivityStatusListener() {
@Override
public void onActivityCreated(Activity activity) {
}
@Override
public void onActivityDestroyed(Activity activity) {
}
});
n.获取授权页协议勾选框 CheckBox 对象
需要在授权页 activity 创建后并且未销毁的情况下调用。
CheckBox privacyCheckBox=OneKeyLoginManager.getInstance().getPrivacyCheckBox();
o.配置初始化支持ipv6
初始化之前调用。
OneKeyLoginManager.getInstance().ipv6Enable(true);
6.授权页界面配置
可选方法,SDK 有内置默认授权页配置,如需自定义界面,请调用此方法。
a.设计规范
注意:
1、开发者不得通过任何技术手段,破解授权页,或将授权页面的号码栏、隐私栏、品牌露出内容隐 藏、覆盖。
2、登录按钮文字描述必须包含“登录”或“注册”等文字,不得诱导用户授权。
3、对于接入SDK并上线的应用,我方会对上线的应用授权页面做审查,如果有出现未按要 求弹出或设计授权页面的,将关闭应用的认证取号服务。
b.授权页配置
调用该方法可实现对三网运营商授权页面个性化设计,配置一次有效,每次调用拉起授权页方法前必须先调用该方法,否则授权界面会展示异常,具体实现可参考 demo 示例的 ConfigUtils 配置类。(三网界面配置内部实现逻辑不同,请务必使用移动、联通、电信卡分别测试)
方法原型
public void setAuthThemeConfig(ShanYanUIConfig shanPortraitYanUIConfig, ShanYanUIConfig shanLandYanUIConfig) {}
参数说明
参数 | 参数类型 | 说明 |
---|
shanPortraitYanUIConfig | ShanYanUIConfig | 竖屏页面样式配置对象,开发者在 ShanYanUIConfig.java 类中调用对应的方法配置授权页中对应的元素(该参数不能传 null,否则展示默认页面) |
shanLandYanUIConfig | ShanYanUIConfig | 横屏页面样式主题配置对象,开发者在 ShanYanUIConfig.java 类中调用对应的方法配置授权页中对应的元素(针对指定屏幕方向的,该参数传 null) |
示例代码
OneKeyLoginManager.getInstance().setAuthThemeConfig(ConfigUtils.getCJSConfig(getApplicationContext()), ConfigUtils.getCJSLandscapeUiConfig(getApplicationContext()))
背景
三选一,支持图片,gif 图,视频;注意:如果通过自定义控件配置图片,图片伸入不到状态栏
方法 | 参数类型 | 说明 |
---|
setAuthBGImgPath | Drawable | 设置授权页背景图片 |
setAuthBgGifPath | String | 只支持本地 gif 图,需要放置到 drawable 文件夹中。传入图片名称即可。 |
setAuthBgVideoPath | String | 支持本地路径如:"android.resource://" + context.getPackageName() + "/" + R.raw.testvideo"支持网络路径:"https://xxx" |
整体属性
方法 | 参数类型 | 说明 |
---|
setActivityTranslateAnim | string | 设置授权页进出场动画(默认跟随系统):参数 1:进场动画传 xml 文件名即可参数 2:退场动画传 xml 文件名即可 |
setTextSizeIsdp | boolean | 设置固有控件字体是否以 dp 为单位(true:dp;false:sp;默认:false) |
setBackPressedAvailable | boolean | 设置授权页物理返回键是否可用(true:可用;false:禁用;默认:true;禁用后仍会执行 getOneKeyLoginStatus 回调,只是不销毁授权页) |
setFitsSystemWindows | boolean | 同系统 setFitsSystemWindows;视频背景需要伸入到状态栏时可以调用此方法 |
setFullScreen | boolean | 是否全屏展示,会隐藏掉虚拟物理返回键(true:全屏;false:正常显示;默认:false) |
setAuthFlagSecureEnable | boolean | 进入后台列表授权页是否模糊显示(true:显示空白页;false:正常显示;默认:false) |
setPrivacyFlagSecureEnable | boolean | 进入后台列表协议页是否模糊显示(true:显示空白页;false:正常显示;默认:false) |
状态栏
方法 | 参数类型 | 说明 |
---|
setStatusBarColor | int | 设置状态栏背景颜色(默认透明) |
setLightColor | boolean | 设置状态栏字体颜色是否为白色(true:白色;false:不是白色;默认:false) |
setStatusBarHidden | boolean | 设置状态栏是否隐藏(true:隐藏;false:不隐藏;默认:false) |
setVirtualKeyTransparent | boolean | 设置虚拟键是否透明(true:透明;false:不透明;默认:false) |
导航栏(默认高度:50dp)
方法 | 参数类型 | 说明 |
---|
setNavColor | int | 设置导航栏背景颜色(默认:0xffffffff) |
setNavText | string | 设置导航栏标题文字(默认:免密登录) |
setNavTextColor | int | 设置导航栏标题文字颜色(默认:0xff080808) |
setNavTextSize | int(单位 sp) | 设置导航栏标题文字大小(默认:16sp) |
setNavReturnImgPath | Drawable | 设置导航栏返回按钮图标 |
setNavReturnImgHidden | boolean | 设置导航栏返回按钮是否隐藏(true:隐藏;false:不隐藏;默认:false) |
setNavReturnBtnWidth | int(单位 dp) | 设置导航栏返回按钮宽度(默认 25dp) |
setNavReturnBtnHeight | int(单位 dp) | 设置导航栏返回按钮高度(默认 25dp) |
setNavReturnBtnOffsetRightX | int(单位 dp) | 设置导航栏返回按钮距离屏幕右侧 X 偏移(默认:以 setNavReturnBtnOffsetX 为准) |
setNavReturnBtnOffsetX | int(单位 dp) | 设置导航栏返回按钮距离屏幕左侧 X 偏移(默认:8dp) |
setNavReturnBtnOffsetY | int(单位 dp) | 设置导航栏返回按钮距离屏幕上侧 Y 偏移(默认:8dp) |
setAuthNavHidden | boolean | 设置导航栏是否隐藏(true:隐藏;false:不隐藏;默认:false) |
setAuthNavTransparent | boolean | 设置导航栏是否透明(true:透明;false:不透明;默认:true) |
setNavTextBold | boolean | 设置导航栏字体是否加粗(true:加粗;false:不加粗;默认:false) |
logo 图标
方法 | 参数类型 | 说明 |
---|
setLogoImgPath | Drawable | 设置 logo 图片 |
setLogoWidth | int(单位 dp) | 设置 logo 宽度(默认:75dp) |
setLogoHeight | int(单位 dp) | 设置 logo 高度(默认:75dp) |
setLogoOffsetY | int(单位 dp) | 设置 logo 相对于标题栏下边缘 y 偏移(默认:50dp) |
setLogoOffsetBottomY | int(单位 dp) | 设置 logo 相对于屏幕底部 y 偏移(默认:以 setLogoOffsetY 为准) |
setLogoHidden | boolean | 设置 logo 是否隐藏(true:隐藏;false:不隐藏;默认:false) |
setLogoOffsetX | int(单位 dp) | 设置 logo 相对屏幕左侧 X 偏移(默认:水平居中) |
号码栏
方法 | 参数类型 | 说明 |
---|
setNumberColor | int | 设置号码栏字体颜色(默认:0xff333333) |
setNumFieldOffsetY | int(单位 dp) | 设置号码栏相对于标题栏下边缘 y 偏移(默认:140dp) |
setNumFieldOffsetBottomY | int(单位 dp) | 设置号码栏相对于屏幕底部 y 偏移(默认:以 setNumFieldOffsetY 为准) |
setNumFieldWidth | int(单位 dp) | 设置号码栏宽度(默认:自适应) |
setNumFieldHeight | int(单位 dp) | 设置号码栏高度(默认:自适应) |
setNumberSize | int(单位 sp) | 设置号码栏字体大小(默认:18sp) |
setNumFieldOffsetX | int(单位 dp) | 设置号码栏相对屏幕左侧 X 偏移(默认:水平居中) |
setNumberBold | boolean | 设置号码栏字体是否加粗(true:加粗;false:不加粗,默认:false) |
登录按钮(默认高度:46dp)
方法 | 参数类型 | 说明 |
---|
setLogBtnText | string | 设置登录按钮文字(默认:本机号码一键登录) |
setLogBtnTextColor | int | 设置登录按钮文字颜色 |
setLogBtnBackgroundColor | int | 设置登录按钮背景色 |
setLogBtnImgPath | Drawable | 设置授权登录按钮图片 |
setLogBtnOffsetY | int(单位 dp) | 设置登录按钮相对于标题栏下边缘 Y 偏移(默认:220dp) |
setLogBtnOffsetBottomY | int(单位 dp) | 设置登录按钮相对于屏幕底部 Y 偏移(默认:以 setLogBtnOffsetY 为准) |
setLogBtnTextSize | int(单位 sp) | 设置登录按钮字体大小(默认:15sp) |
setLogBtnHeight | int(单位 dp) | 设置登录按钮高度(默认:46dp) |
setLogBtnWidth | int(单位 dp) | 设置登录按钮宽度(默认:屏幕宽减 94dp,即两边各 47dp) |
setLogBtnOffsetX | int(单位 dp) | 设置登录按钮相对屏幕左侧 X 偏移(默认:水平居中) |
setLogBtnTextBold | boolean | 设置登录按钮字体是否加粗(true:加粗;false:不加粗;默认:false) |
隐私栏
方法 | 参数类型 | 说明 |
---|
setAppPrivacyOne | string(链接) | 设置开发者隐私条款 1 名称和 URL 参数 1:名称参数 2:url |
setAppPrivacyTwo | string(链接) | 设置开发者隐私条款 2 名称和 URL 参数 1:名称参数 2:url |
setAppPrivacyThree | string(链接) | 设置开发者隐私条款 3 名称和 URL 参数 1:名称参数 2:url |
setPrivacySmhHidden | boolean | 设置协议名称是否显示书名号《》,默认显示书名号(true:不显示;false:显示;默认:false) |
setPrivacyTextSize | int(单位 sp) | 设置隐私栏字体大小(默认:10sp) |
setAppPrivacyColor | int | 设置隐私条款名称颜色参数 1:基础文字颜色(默认:0xff666666)参数 2 : 协议文字颜色(默认:0xff0085d0) |
setPrivacyOffsetBottomY | int(单位 dp) | 设置隐私条款相对于授权页面底部下边缘 y 偏移(默认:30dp) |
setPrivacyOffsetY | int(单位 dp) | 设置隐私条款相对于授权页面标题栏下边缘 y 偏移(默认:以 setPrivacyOffsetBottomY 为准) |
setPrivacyOffsetX | int(单位 dp) | 设置隐私条款相对屏幕左侧 X 偏移(默认:水平居中) |
setPrivacyOffsetGravityLeft | boolean | 设置隐私条款文字多行显示时是否左对齐(true:左对齐;false:居中;默认:false) |
setPrivacyState | boolean | 设置隐私条款的 CheckBox 复选框默认状态(true:选中;false:未选中,默认:true) |
setUncheckedImgPath | Drawable | 设置隐私条款的 CheckBox 未选中时图片 |
setCheckedImgPath | Drawable | 设置隐私条款的 CheckBox 选中时图片 |
setCheckBoxHidden | boolean | 设置隐私条款的 CheckBox 是否隐藏(true:隐藏;false:不隐藏;默认:false) |
setCheckBoxWH | int(单位 dp) | 设置 checkbox 的宽高,包含两个参数:1.宽 2.高(默认:各 13dp) |
setPrivacyWidth | int(单位 dp) | 设置隐私栏宽度 |
setcheckBoxOffsetXY(2.3.1.6 及之后版本新增方法) | int(单位 dp) | 设置 checkbox 在协议框父控件中的位置,包含两个参数:1.左偏移量 2.上偏移量(默认:在父控件内居中) |
setCheckBoxMargin | int(单位 dp) | 设置 checkbox 热点区域范围,包含四个参数:1.向左扩大 2.向上扩大 3.向右扩大 4.向下扩大(默认:各 10dp) |
setPrivacyText | String | 设置隐私条款名称外的文字,包含五个参数,参数示例(红色 字体为传入参数):同意《》和《》、《》、《》并授权创蓝创蓝闪验获取本机号码参数 1: 同意 参数 2:和参数 3:、参数 4:、参数 5:并授权创蓝闪验获取本机号码 |
setPrivacyTextBold | boolean | 设置协议栏字体是否加粗(true:加粗;false:不加粗;默认:false) |
setPrivacyCustomToast | Toast | 未勾选时,自定义点击一键登录的 Toast 提示 |
setPrivacyCustomToastText | String | 未勾选协议时 toast 提示文字(默认:请勾选协议) |
setCheckBoxTipDisable | boolean | 未勾选协议时 toast 提示是否关闭(true:关闭,false:开启,默认:false) |
setPrivacyNameUnderline | boolean | 协议是否显示下划线(true:显示;false:不显示;默认:false) |
setOperatorPrivacyAtLast | boolean | 运营商协议是否为最后一个显示(true:最后显示;false:显示在最前;默认:false) |
setPrivacyGravityHorizontalCenter | boolean | 设置隐私协议栏是否居中显示(true:居中;false:居左;默认:false) |
setPrivacyActivityEnabled | boolean | 是否使用 SDK 内置协议页 activity(true:使用;false:不使用,只给回调,由开发者根据回调内容自行实现协议页 activity 及相关跳转;默认:true) |
如果需要增加 3 个以上自定义协议,可使用如下方法(具体可参数 demo 示例源码 A 配置):
方法 | 参数类型 | 说明 |
---|
setMorePrivacy | List | ConfigPrivacyBean 为协议配置类,包含三个构造函数,分别是双参、三参、四参。参数按照顺序分别为: name:协议名称,url:协议链接,color:协议文字颜色, midStr:协议之间的文字,title:协议页导航栏标题。可以用构造函数赋值,也可以用对象方法赋值,对应方法分别为:setName,setUrl,setColor,setMidStr,setTitle |
构造函数原型
//四参构造函数
public ConfigPrivacyBean(String name, String url, int color, String midStr)
//三参构造函数
public ConfigPrivacyBean(String name, String url, int color)
//双参构造函数
public ConfigPrivacyBean(String name, String url)
多协议配置及调用示例
private static List<ConfigPrivacyBean> getMorePrivacy() {
List<ConfigPrivacyBean> list = new ArrayList();
list.add(new ConfigPrivacyBean("闪验隐私政策1", "https://api.253.com.html", Color.parseColor("#cc00cc"), "间隔1"));
list.add(new ConfigPrivacyBean("闪验隐私政策2", "https://api.253.com.html", Color.parseColor("#00cc00")));
list.add(new ConfigPrivacyBean("闪验隐私政策3", "https://api.253.com.html"));
ConfigPrivacyBean bean4 = new ConfigPrivacyBean("闪验隐私政策4", "https://api.253.com.html");
bean4.setColor(Color.parseColor("#0000cc"));
bean4.setMidStr("间隔4");
bean4.setTitle("闪验隐私政策4");
list.add(bean4);
ConfigPrivacyBean bean5 = new ConfigPrivacyBean("闪验隐私政策5", "https://api.253.com.html", Color.parseColor("#aacc00"));
bean5.setMidStr("间隔5");
bean5.setTitle("闪验隐私政策5");
list.add(bean5);
return list;
}
//引用多协议配置配置
ShanYanUIConfig uiConfig = new ShanYanUIConfig.Builder()
.....
.setPrivacyText("我已阅读并同意", "默认间隔", "", "", "")
.setMorePrivacy(getMorePrivacy())
....
.build
运营商 slogan(提供认证服务)
方法 | 参数类型 | 说明 |
---|
setSloganTextColor | int | 设置 slogan 文字颜色(默认:0xff999999) |
setSloganTextSize | int(单位 sp) | 设置 slogan 文字字体大小(默认:10sp) |
setSloganOffsetY | int(单位 dp) | 设置 slogan 相对于标题栏下边缘 y 偏移(默认:195dp) |
setSloganHidden | boolean | 设置 slogan 是否隐藏(true:隐藏;false:不隐藏;默认:false) |
setSloganOffsetBottomY | int(单位 dp) | 设置 slogan 相对屏幕底部 Y 偏移(默认:以 setSloganOffsetY 为准) |
setSloganOffsetX | int(单位 dp) | 设置 slogan 相对屏幕左侧 X 偏移(默认:水平居中) |
setSloganTextBold | boolean | 设置 slogan 文字字体是否加粗(true:加粗;false:不加粗;默认:false) |
创蓝 slogan(创蓝 253 提供技术支持;默认:隐藏)
方法 | 参数类型 | 说明 |
---|
setShanYanSloganTextColor | int | 设置创蓝 slogan 文字颜色 |
setShanYanSloganTextSize | int(单位 sp) | 设置创蓝 slogan 文字字体大小 |
setShanYanSloganOffsetY | int(单位 dp) | 设置创蓝 slogan 相对于标题栏下边缘 y 偏移 |
setShanYanSloganHidden | boolean | 设置创蓝 slogan 是否隐藏(true:隐藏;false:不隐藏) |
setShanYanSloganOffsetBottomY | int(单位 dp) | 设置创蓝 slogan 相对屏幕底部 Y 偏移 |
setShanYanSloganOffsetX | int(单位 dp) | 设置创蓝 slogan 相对屏幕左侧 X 偏移 |
setShanYanSloganTextBold | boolean | 设置创蓝 slogan 文字字体是否加粗(true:加粗;false:不加粗) |
登录 loading
方法 | 参数类型 | 说明 |
---|
setLoadingView | ViewGroup | 设置自定义 loading |
添加自定义控件
1.添加相对控件(指定在登录按钮和协议栏之间;默认铺满按钮和协议之间区域)
方法原型
public Builder setRelativeCustomView(View view, boolean isFinish, int cvMarginLeft, int cvMarginTop, int cvMarginRigth, int cvMarginBottom, ShanYanCustomInterface shanYanCustomInterface) {}
参数 | 参数类型 | 说明 |
---|
view | View | 设置自定义布局 |
isFinish | boolean | 点击布局是否需要销毁授权页:true 销毁 false 不销毁 |
cvMarginLeft | int(单位 dp) | 布局左间距 |
cvMarginTop | int(单位 dp) | 距登录按钮的上边距 |
cvMarginRigth | int(单位 dp) | 布局右边距 |
cvMarginBottom | int(单位 dp) | 距协议栏的下边距 |
shanYanCustomInterface | ShanYanCustomInterface | 整个 view 的点击事件,如果想设置内部的子view的点击事件,此参数需要传null,并自行实现 |
注意:使用此方法添加自定义控件时,登录按钮必须使用setLogBtnOffsetY设置偏移,协议栏必须使用 setPrivacyOffsetBottomY 设置偏移,否则可能不显示
2.添加普通自定义控件
方法原型
public ShanYanUIConfig.Builder addCustomView(View view, boolean isFinish, boolean type, ShanYanCustomInterface shanYanCustomInterface) {}
参数说明
参数 | 参数类型 | 说明 |
---|
view(必填) | View | 自定义控件对象 |
isFinish(必填) | boolean | 是否需要销毁授权页:true 销毁 false 不销毁 |
type(必填) | boolean | 设置自定义控件的位置:true 为授权页导航栏 false 为授权页导航栏以下空白处 |
shanYanCustomInterface | ShanYanCustomInterface | 自定义控件监听 |
注意:如果添加布局为自定义控件,监听实现请参考 demo 示例。如果通过自定义控件方法添加授权页背景,背景伸入不到状态栏。
设置弹窗样式
调用该方法可实现将授权页设置成弹窗样式。
方法原型
public ShanYanUIConfig.Builder setDialogTheme(boolean isdialogTheme, int dialogWidth, int dialogHeight, int dialogX, int dialogY ,boolean isDialogBottom) {}
参数说明
参数 | 参数类型 | 说明 |
---|
isdialogTheme(必填) | boolean | 是否用弹窗样式:true 弹窗样式 false 非弹窗样式 |
dialogWidth(必填) | int(单位 dp) | 授权页弹窗宽度 |
dialogHeight(必填) | int(单位 dp) | 授权页弹窗高度 |
dialogX | int(单位 dp) | 授权页弹窗 X 偏移量(以屏幕中心为原点) |
dialogY | int(单位 dp) | 授权页弹窗 Y 偏移量(以屏幕中心为原点) |
isDialogBottom | boolean | 授权页弹窗是否贴于屏幕底部:true:显示到屏幕底部,dialogY 参数设置将无效 false:不显示到屏幕底部,以 dialogY 参数为准 |
注意:设置弹窗效果背景的透明度需要在 Manifest.xml 里面配置授权界面主题样式
样式示例:
1.为授权界面的 activity 设置弹窗 theme 主题:
<activity
android:name="com.chuanglan.shanyan_sdk.view.ShanYanOneKeyActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:launchMode="singleTop"
android:screenOrientation="behind"
android:theme="@style/Theme.ActivityDialogStyle" />
2.设置 theme 主题的 style 样式
<style name="Theme.ActivityDialogStyle" parent="Theme.AppCompat.Light.NoActionBar">
<!--背景透明-->
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowIsTranslucent">true</item>
<!--dialog的整个屏幕的背景是否有遮障层-->
<item name="android:backgroundDimEnabled">true</item>
</style>
注意:如果需要触摸弹窗外部销毁授权页,style 的 parent 请使用系统 dialog 相关主题。
弹窗样式时的遮盖层灰度设置
方法 | 参数类型 | 说明 |
---|
setDialogDimAmount | float | 授权页遮盖层灰度设置范围是(0~1) |
设置横竖屏
在 manifest 文件中,指定授权页 activity 的 screenOrientation 即可
注意:只有全屏不透明的 activity 才能指定方向,否则在 8.0 系统版本上会报“Only fullscreen opaque activities can request orientation”或其他异常。
即:弹框或者透明主题,授权页不能指定方向。如需指定方向,可以指定授权页前个页面的方向,授权页设置跟随前个界面方向,即:“android:screenOrientation="behind"”
隐私协议提示弹框(具体实现见常见问题)
方法 | 参数类型 | 说明 |
---|
addCustomPrivacyAlertView | view | 添加授权页上显示隐私协议弹框 |
c.协议页配置
方法 | 参数类型 | 说明 |
---|
setPrivacyActivityTranslateAnim | String | 设置授权页进出场动画(默认跟随系统):参数 1:进场动画传 xml 文件名即可参数 2:退场动画传 xml 文件名即可 |
setPrivacyStatusBarHidden | boolean | 协议页是否隐藏状态栏(true:隐藏,false:不隐藏;默认:false) |
setPrivacyStatusBarColor | int | 协议页状态栏颜色(默认:0xffffffff) |
setPrivacyLightColor | boolean | 协议页状态栏文字颜色是否为白色(true:白色;false:不是白色;默认:false) |
setPrivacyTitleArray | String[] | 协议页标题名称(默认:授权页对应的协议名称) |
setPrivacyNavColor | int | 设置协议页导航栏背景颜色(默认:0xffffffff) |
setPrivacyNavTextBold | boolean | 设置协议页导航栏标题文字是否加粗(true:加粗;false:不加粗;默认:false) |
setPrivacyNavTextColor | int | 设置协议页导航栏标题文字颜色(默认:0xff080808) |
setPrivacyNavTextSize | int(单位 sp) | 设置协议页导航栏标题文字大小(默认:16sp) |
setPrivacyNavReturnImgPath | Drawable | 设置协议页导航栏返回按钮图标 |
setPrivacyNavReturnImgHidden | boolean | 设置协议页导航栏返回按钮是否隐藏(true:隐藏;false:不隐藏;默认:false) |
setPrivacyNavReturnBtnWidth | int(单位 dp) | 设置协议页导航栏返回按钮宽度(默认:25dp) |
setPrivacyNavReturnBtnHeight | int(单位 dp) | 设置协议页导航栏返回按钮高度(默认:25dp) |
setPrivacyNavReturnBtnOffsetRightX | int(单位 dp) | 设置协议页导航栏返回按钮距离屏幕右侧 X 偏移(默认:以 setPrivacyNavReturnBtnOffsetX 为准) |
setPrivacyNavReturnBtnOffsetX | int(单位 dp) | 设置协议页导航栏返回按钮距离屏幕左侧 X 偏移(默认:8dp) |
setPrivacyNavReturnBtnOffsetY | int(单位 dp) | 设置协议页导航栏返回按钮距离屏幕上侧 Y 偏移(默认:8dp) |
setViewPortEnabled | boolean | 协议页 H5 是否支持 viewport 适配(true:支持,false:不支持;默认:false) |
三.本机校验 api
注:本机认证同免密登录,需要初始化,本机认证、一键登录可共用初始化,两个功能同时使用时,只需调用一次初始化。
1.初始化
同一键登录初始化
2.本机校验获取 token
在初始化执行之后调用,本机号校验界面需自行实现,可以在多个需要校验的页面中调用。
示例代码:
OneKeyLoginManager.getInstance().startAuthentication(new AuthenticationExecuteListener() {
@Override
public void authenticationRespond(int code, String result) {
}
});
authenticationRespond(int code,String result)返回参数 code 和 result,含义如下:
字段 | 类型 | 含义 |
---|
code | int | code 为 2000:成功其他:失败 |
result | String | 返回信息 |
当外层 code 为 2000 时,result 的返回为
{"token":""}
含义如下:
字段 | 类型 | 含义 |
---|
token | String | 检验手机号接口所需的 token。每个 token 只能使用一次,一次有效。 |
3.校验手机号
当一键登录外层 code 为 2000 时,会获取到检验手机号所需的 token。请参考「
服务端」文档来实现检验手机号码的步骤。
四.返回码
此表为 SDK 外层返回码,如需查看内层码及服务端返回码,请查看官网[返回码]文档
返回码 | 返回码描述 |
---|
1000 | 一键登录获取 token 成功/拉起授权页成功 |
1001 | 运营商返回错误 |
1002 | 运营商信息获取失败,请结合 result 查看具体失败原因 |
1003 | 一键登录获取 token 失败,请结合 result 查看具体失败原因 |
1004 | 未初始化 |
1005 | 预取号请求失败,请结合 result 查看具体失败原因 |
1006 | 无法识别sim卡或没有sim卡 |
1007 | 网络请求失败,请结合 result 查看具体失败原因 |
1008 | 数据流量不稳定 |
1011 | 点击返回,用户取消免密登录 |
1014 | SDK 内部异常,请结合 result 查看具体失败原因 |
1016 | APPID 为空 |
1019 | 其他错误,请结合 result 查看具体失败原因 |
1022 | 网络初始化、预取号成功 |
1023 | 初始化、预取号失败,请结合 result 查看具体失败原因 |
1031 | 请求过于频繁 |
1032 | 用户禁用 |
2000 | 本机号校验获取 token 成功 |
2003 | 本机号校验返回失败,请结合 result 查看具体失败原因 |
没有更多了