云信一键登录Android开发文档
一.准备工作
概述
本文是1.0.0 版本SDK的接入文档,用于指导SDK的使用方法,默认读者已经熟悉 IDE(Eclipse 或者 Android Studio)的基本使用方法,以及具有一定的 Android 编程知识基础。
前置条件
- SDK支持minSdkVersion 16及以上版本
- SDK支持中国移动3/4G/5G、联通3/4G/5G、电信4G/5G的取号能力,在3G网络下时延会更高
- SDK支持单数据网络/数据网络与WiFi网络双开,不支持单WiFi网络
- 对于双卡手机,SDK只对当前流量卡取号,双卡均未开数据流量SDK将会返回错误码
本机号码校验使用场景: 用户输入手机号码,通过SDK获取token(通过authenticationRespond获取),服务端携带输入的手机号码和token去运营商网关进行校验(服务端调用mobile-validate接口),返回的结果时用户当前上网使用的号码与输入的号码是否一致。 一键登录使用场景: 用户无需输入手机号码,SDK会拉起授权页,用户确认授权后,SDK会获取token(通过getOneKeyLoginStatus中获取),服务端携带token到运营商网关获取用户当前上网使用的号码(服务端调用mobile-query接口),并返回给APP服务端。
创建应用
应用的创建流程及APPID的获取,请先在控制台创建应用 注意:如果应用有多个包名或签名不同的马甲包,须创建多个对应包名和签名的应用,否则马甲包将报包名或签名校验不通过。 **
快速体验demo
- Android压缩包附带的apk文件夹中是安装包,可以直接安装到Android手机上。并快速体验在您的手机上的表现。
- Android压缩包附带的demo文件夹中是示例工程,使用Android studio打开示例工程,完成以下步骤配置,然后直接运行起来测试。
a.将build里面的applicationId换成您的包名 b.将build里面的签名配置改成您的签名配置 c.将build里面的APP_ID换成您在控制台创建应用后生成的appId
开发环境搭建
(1)将开发包拷贝到工程
a.将SDK中libs目录下的aar包拷贝到自己工程的libs目录下,如没有该目录需新建。 b.将SDK中assets目录下login文件拷贝到自己工程的assets目录下,如没有该目录需新建。 (2)配置AndroidManifest.xml文件
必要的权限:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
<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"/>
<uses-permission android:name="android.permission.GET_TASKS"/>
建议的权限:如果选用该权限,需要在预取号步骤前提前动态申请。
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
建议开发者申请本权限,本权限只用于移动运营商在双卡情况下,更精准的获取数据流量卡的运营商类型, 缺少该权限,存在取号失败概率上升的风险。
配置权限说明
权限名称 | 权限说明 | 使用说明 |
---|---|---|
INTERNET | 允许应用程序联网 | 用于访问网关和认证服务器 |
ACCESS_WIFI_STATE | 允许访问WiFi网络状态信息 | 允许程序访问WiFi网络状态信息 |
ACCESS_NETWORK_STATE | 允许访问网络状态 | 区分移动网络或WiFi网络 |
CHANGE_NETWORK_STATE | 允许改变网络连接状态 | 设备在WiFi跟数据双开时,强行切换使用数据网络 |
CHANGE_WIFI_STATE | 允许改变WiFi网络连接状态 | 设备在WiFi跟数据双开时,强行切换使用 |
READ_PHONE_STATE | 允许读取手机状态 | (可选)获取IMSI用于判断双卡和换卡 |
WRITE_SETTINGS | 允许读写系统设置项 | 电信SDK在6.0系统以下进行数据切换用到的权限,添加后可增加电信在WiFi+4G下网络环境下的取号成功率。6.0系统以上可去除 |
GET_TASKS | 允许应用程序访问TASK |
在application标签内配置授权登录activity
<activity
android:name="com.netease.yunxin.login.view.CmccLoginActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="false"
android:launchMode="singleTop"
/>
<activity-alias
android:name="com.cmic.sso.sdk.login.activity.LoginAuthActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="false"
android:launchMode="singleTop"
android:targetActivity="com.netease.yunxin.login.view.CmccLoginActivity"
/>
<activity
android:name="com.netease.yunxin.login.view.YunXinOneKeyActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="false"
android:launchMode="singleTop"
/>
<activity
android:name="com.netease.yunxin.login.view.CTCCPrivacyProtocolActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="false"
android:launchMode="standard"
/>
配置Android9.0对http协议的支持两种方式:
方式一:
android:usesCleartextTraffic="true"
示例代码:
<application
android:name=".view.MyApplication"
...
android:usesCleartextTraffic="true"
></application>
方式二:
设置Http白名单,运营商http接口域名:cmpassport.com
(3) 混淆规则:
-dontwarn com.cmic.sso.sdk.login.**
-keep class com.cmic.sso.sdk.login.**{*;}
-dontwarn com.sdk.login.**
-keep class com.sdk.login.** { *;}
-dontwarn com.unicom.xiaowo.account.shield.login.**
-keep class com.unicom.xiaowo.account.shield.login.** {*;}
-keep class cn.com.chinatelecom.account.api.**{*;}
(4) AndResGuard资源压缩过滤:
"R.anim.umcsdk*",
"R.drawable.umcsdk*",
"R.layout.layout_yunxin*",
"R.id.yunxin_view*",
通过上面的几个步骤,工程就配置完成了,接下来就可以在工程中使用SDK进行开发了。
二.SDK使用说明
1.初始化
使用一键登录功能前,必须先进行初始化操作,建议放在Application的onCreate() 方法中。
方法原型
public void init(Context context, String appId, InitListener initListener){}
参数描述
参数 | 类型 | 说明 |
---|---|---|
context | Context | 传ApplicationContext对象 |
appId | String | 控制台生成的appId |
initListener | InitListener | 初始化回调监听,getInitStatu是该监听唯一的抽象方法,即void getInitStatus(int code, String result) |
示例代码
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.预取号
- 建议在判断当前用户属于未登录状态时使用,**已登录状态用户请不要调用该方法**
- 建议在执行拉取授权登录页的方法前,提前一段时间调用预取号方法,中间最好有2-3秒的缓冲(因为预取号方法需要1~3s的时间取得临时凭证),比如放在启动页的onCreate()方法中,或者app启动的application中的onCreate()方法中去调用,不建议放在用户登录时和拉取授权登录页方法一起调用,会影响用户体验和成功率。
- 请勿频繁的多次调用、请勿与拉起授权登录页同时和之后调用
- 避免大量资源下载时调用,例如游戏中加载资源或者更新补丁的时候要顺序执行
方法原型:
public void getPhoneInfo(GetPhoneInfoListener getPhoneInfoListener){}
参数描述
参数 | 类型 | 说明 |
---|---|---|
getPhoneInfoListener | GetPhoneInfoListener | 预取号回调监听,getPhoneInfoStatus是该监听中唯一的抽象方法,即void getPhoneInfoStatus(int code, String result) |
示例代码:
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.拉起授权页
- 调用拉起授权页方法后将会调起运营商授权页面。已登录状态请勿调用 。
- 每次调用拉起授权页方法前均需先调用授权页配置方法,否则授权页可能会展示异常。
- 1秒之内只能调用一次,而且必须保证上一次拉起的授权页已经销毁再调用,否则SDK会返回请求频繁。
方法原型:
public void openLoginAuth(boolean isFinish, OpenLoginAuthListener openLoginAuthListener, OneKeyLoginListener oneKeyLoginListener){}
参数描述
字段 | 类型 | 含义 |
---|---|---|
isFinish | boolean | 点击授权页一键登录按钮有回调时是否自动销毁授权页: |
true:自动销毁 false:不自动销毁,开发者需主动调用销毁授权页方法进行授权页销毁操作 | | openLoginAuthListener | OpenLoginAuthListener | 授权页是否拉起成功监听,getOpenLoginAuthStatus是该接口中唯一的抽象方法,即void getOpenLoginAuthStatus(int code,String result) | | oneKeyLoginListener | OneKeyLoginListener | 点击授权页登录按钮及返回键监听,getPhoneCode是该接口中唯一的抽象方法,即void getOneKeyLoginStatus(int code,String result) (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": ""
}
含义如下:
字段 | 类型 | 含义 |
---|---|---|
token | String | 用来和后台置换手机号。一次有效。 |
4.销毁授权页
A.授权页面自动销毁 1.在授权登录页面,当用户主动点击左左上角返回按钮时,返回码为1011,SDK将自动销毁授权页; 2.安卓 SDK,当用户点击手机的硬件返回键(相当于取消登录),返回码为1011,SDK将自动销毁授权页 3.当用户设置一键登录或者其他自定义控件为自动销毁时,得到回调后,授权页面会自动销毁
B.授权页手动销毁 1.当设置一键登录为手动销毁时,点击授权页一键登录按钮成功获取token不会自动销毁授权页,请务必在回调中处理完自己的逻辑后手动调用销毁授权页方法。 2.当设置自定义控件为手动销毁时,请务必在回调中处理完自己的逻辑后手动调用销毁授权页方法。 ** 方法原型
public void finishAuthActivity(){}
示例代码
OneKeyLoginManager.getInstance().finishAuthActivity();
注意:点击授权页的返回按钮或者自定义控件时,请不要回调或者返回到的界面主线程中做耗时操作,避免堵塞授权页销毁,导致再次调用拉起授权页时返回请求频繁。
5.授权页点击事件监听
需要对授权页点击事件监听的用户,可调用此方法监听授权页点击事件,无此需求可以不写。
方法原型
public void setActionListener(ActionListener actionListener) {}
参数描述
参数 | 类型 | 说明 |
---|---|---|
actionListener | ActionListener | 点击事件回调监听,ActionListner是该监听唯一的抽象方法,即void ActionListner(int code, String result,String operator) |
示例代码
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 | 点击事件的详细信息 |
6.其他API
(1)设置授权页loading显示隐藏 方法原型
public void setLoadingVisibility(boolean visibility) {}
参数描述
参数 | 类型 | 说明 |
---|---|---|
visibility | boolean | 点击一键登录后,授权页展示的loading view(设置true 显示;false隐藏) |
示例代码
OneKeyLoginManager.getInstance().setLoadingVisibility(false);
(2)设置授权页协议复选框是否选中 方法原型
public void setCheckBoxValue(boolean isChecked) {}
参数描述
参数 | 类型 | 说明 |
---|---|---|
isChecked | boolean | 设置协议复选框是否选中(设置true 选中;false 未选中) |
示例代码
OneKeyLoginManager.getInstance().setCheckBoxValue(false);
7.置换手机号
当一键登录外层code为1000时,您将获取到返回的参数,请将这些参数传递给后端开发人员,并参考服务端文档来实现获取手机号码的步骤。Demo工程已经按照Demo服务器文档配置接口(AuthenticationRequestApi.java)和参数(build.gradle中的APP_KEY、APP_SECRET、CERT_NAME字段)。
三.授权页界面修改
1.设计规范
注意:开发者不得通过任何技术手段,将授权页面的隐私栏、品牌露出内容隐藏、覆盖,对于接入SDK并上线的应用,我方和运营商会对授权页面做审查,如果有出现未按要求设计授权页面,我方有权将应用的登录功能下线。**
2.授权页配置
调用该方法可实现对三网运营商授权页面个性化设计,每次调用拉起授权页方法前必须先调用该方法,否则授权界面会展示异常。(三网界面配置内部实现逻辑不同,请务必使用移动、联通、电信卡分别测试三网界面)
方法原型
public void setAuthThemeConfig(TenDINsvUIConfig portraitYanUIConfig, TenDINsvUIConfig landYanUIConfig) {}
参数说明
参数 | 参数类型 | 说明 |
---|---|---|
portraitYanUIConfig | YunXinUIConfig | 竖屏页面样式配置对象,开发者在 YunXinUIConfig.java类中调用对应的方法配置授权页中对应的元素(该参数不能传null,否则展示默认页面) |
landYanUIConfig | YunXinUIConfig | 横屏页面样式主题配置对象,开发者在 YunXinUIConfig.java类中调用对应的方法配置授权页中对应的元素(针对指定屏幕方向的,该参数传null) |
示例代码
//自定义运营商授权页界面
OneKeyLoginManager.getInstance().setAuthThemeConfig(ConfigUtils.getCJSConfig(getApplicationContext()), ConfigUtils.getCJSLandscapeUiConfig(getApplicationContext()))
YunXinUIConfig.java配置元素说明
授权页背景配置三选一,支持图片,gif图,视频
方法 | 参数类型 | 说明 |
---|---|---|
setAuthBGImgPath | Drawable | 设置授权页背景图片 |
setAuthBgGifPath | String | 只支持本地gif图,需要放置到drawable文件夹中。传入图片名称即可。 |
setAuthBgVideoPath | String | 支持本地路径如:"android.resource://" + context.getPackageName() + "/" + R.raw.testvideo" |
支持网络路径:"https://xxx" |
设置授权页进出场动画
方法 | 参数类型 | 说明 |
---|---|---|
setActivityTranslateAnim | string | 参数1:进场动画传xml文件名即可 |
参数2:退场动画传xml文件名即可 |
授权页状态栏
方法 | 参数类型 | 说明 |
---|---|---|
setStatusBarColor | int | 设置状态栏背景颜色 |
setLightColor | boolean | 设置状态栏字体颜色是否为白色 |
setStatusBarHidden | boolean | 设置状态栏是否隐藏 |
setVirtualKeyTransparent | boolean | 设置虚拟键是否透明 |
授权页导航栏
方法 | 参数类型 | 说明 |
---|---|---|
setFullScreen | boolean | 设置是否全屏显示(true:全屏;false:不全屏)默认不全屏 |
setNavColor | int | 设置导航栏背景颜色(默认透明) |
setNavText | string | 设置导航栏标题文字 |
setNavTextColor | int | 设置导航栏标题文字颜色 |
setNavTextSize | int(单位sp) | 设置导航栏标题文字大小 |
setNavReturnImgPath | Drawable | 设置导航栏返回按钮图标 |
setNavReturnImgHidden | boolean | 设置导航栏返回按钮是否隐藏(true:隐藏;false:不隐藏) |
setNavReturnBtnWidth | int(单位dp) | 设置导航栏返回按钮宽度(默认25dp) |
setNavReturnBtnHeight | int(单位dp) | 设置导航栏返回按钮高度(默认25dp) |
setNavReturnBtnOffsetRightX | int(单位dp) | 设置导航栏返回按钮距离屏幕右侧X偏移 |
setNavReturnBtnOffsetX | int(单位dp) | 设置导航栏返回按钮距离屏幕左侧X偏移 |
setNavReturnBtnOffsetY | int(单位dp) | 设置导航栏返回按钮距离屏幕上侧Y偏移 |
setAuthNavHidden | boolean | 设置导航栏是否隐藏(true:隐藏;false:不隐藏) |
setAuthNavTransparent | boolean | 设置导航栏是否透明(true:透明;false:不透明) |
setNavTextBold | boolean | 设置导航栏字体是否加粗(true:加粗;false:不加粗) |
授权页logo
方法 | 参数类型 | 说明 |
---|---|---|
setLogoImgPath | Drawable | 设置logo图片 |
setLogoWidth | int(单位dp) | 设置logo宽度 |
setLogoHeight | int(单位dp) | 设置logo高度 |
setLogoOffsetY | int(单位dp) | 设置logo相对于标题栏下边缘y偏移 |
setLogoOffsetBottomY | int(单位dp) | 设置logo相对于屏幕底部y偏移 |
setLogoHidden | boolean | 设置logo是否隐藏(true:隐藏;false:不隐藏) |
setLogoOffsetX | int(单位dp) | 设置logo相对屏幕左侧X偏移 |
授权页号码栏
方法 | 参数类型 | 说明 |
---|---|---|
setNumberColor | int | 设置号码栏字体颜色 |
setNumFieldOffsetY | int(单位dp) | 设置号码栏相对于标题栏下边缘y偏移 |
setNumFieldOffsetBottomY | int(单位dp) | 设置号码栏相对于屏幕底部y偏移 |
setNumFieldWidth | int(单位dp) | 设置号码栏宽度 |
setNumFieldHeight | int(单位dp) | 设置号码栏高度 |
setNumberSize | int(单位sp) | 设置号码栏字体大小 |
setNumFieldOffsetX | int(单位dp) | 设置号码栏相对屏幕左侧X偏移 |
setNumberBold | boolean | 设置号码栏字体是否加粗(true:加粗;false:不加粗) |
授权页登录按钮
方法 | 参数类型 | 说明 |
---|---|---|
setLogBtnText | string | 设置登录按钮文字 |
setLogBtnTextColor | int | 设置登录按钮文字颜色 |
setLogBtnImgPath | Drawable | 设置授权登录按钮图片 |
setLogBtnOffsetY | int(单位dp) | 设置登录按钮相对于标题栏下边缘Y偏移 |
setLogBtnOffsetBottomY | int(单位dp) | 设置登录按钮相对于屏幕底部Y偏移 |
setLogBtnTextSize | int(单位sp) | 设置登录按钮字体大小 |
setLogBtnHeight | int(单位dp) | 设置登录按钮高度 |
setLogBtnWidth | int(单位dp) | 设置登录按钮宽度 |
setLogBtnOffsetX | int(单位dp) | 设置登录按钮相对屏幕左侧X偏移 |
setLogBtnTextBold | boolean | 设置登录按钮字体是否加粗(true:加粗;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:显示) | | setPrivacyTextSize | int(单位sp) | 设置隐私栏字体大小 | | setAppPrivacyColor | int | 设置隐私条款名称颜色 参数1:基础文字颜色 参数2 : 协议文字颜色 | | setPrivacyOffsetBottomY | int(单位dp) | 设置隐私条款相对于授权页面底部下边缘y偏移 | | setPrivacyOffsetY | int(单位dp) | 设置隐私条款相对于授权页面标题栏下边缘y偏移 | | setPrivacyOffsetX | int(单位dp) | 设置隐私条款相对屏幕左侧X偏移 | | setPrivacyOffsetGravityLeft | boolean | 设置隐私条款控件左对齐(true:左对齐;false:居中) | | setPrivacyState | boolean | 设置隐私条款的CheckBox是否选中(true:选中;false:未选中) | | setUncheckedImgPath | Drawable | 设置隐私条款的CheckBox未选中时图片 | | setCheckedImgPath | Drawable | 设置隐私条款的CheckBox选中时图片 | | setCheckBoxHidden | boolean | 设置隐私条款的CheckBox是否隐藏(true:隐藏;false:不隐藏) | | setCheckBoxWH | int(单位dp) | 设置checkbox的宽高,包含两个参数:1.宽 2.高(默认宽高13dp) | | 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:不加粗) | | setPrivacyCustomToast | Toast | 未勾选时,自定义点击一键登录的Toast提示 | | setPrivacyCustomToastText | String | 未勾选协议时toast提示文字 | | setPrivacyNameUnderline | boolean | 协议是否显示下划线(true:显示;false:不显示) | | setOperatorPrivacyAtLast | boolean | 运营商协议是否为最后一个显示(true:最后显示;false:不在最后显示) | | setPrivacyGravityHorizontalCenter | boolean | 隐私协议栏父控件内容居中对齐(true:居中;false:居左) |
授权页slogan
方法 | 参数类型 | 说明 |
---|---|---|
setSloganTextColor | int | 设置slogan文字颜色 |
setSloganTextSize | int(单位sp) | 设置slogan文字字体大小 |
setSloganOffsetY | int(单位dp) | 设置slogan相对于标题栏下边缘y偏移 |
setSloganHidden | boolean | 设置slogan是否隐藏(true:隐藏;false:不隐藏) |
setSloganOffsetBottomY | int(单位dp) | 设置slogan相对屏幕底部Y偏移 |
setSloganOffsetX | int(单位dp) | 设置slogan相对屏幕左侧X偏移 |
setSloganTextBold | boolean | 设置slogan文字字体是否加粗(true:加粗;false:不加粗) |
授权页loading
方法 | 参数类型 | 说明 |
---|---|---|
setLoadingView | View | 设置自定义loading |
授权页相对控件设置(指定在登录按钮和协议栏之间)
方法 | 参数类型 | 说明 |
---|---|---|
setRelativeCustomView | View | 设置自定义布局 |
boolean | 点击布局是否需要销毁授权页:true销毁 false不销毁 | |
int(单位dp) | 布局左间距 | |
int(单位dp) | 距登录按钮的上边距 | |
int(单位dp) | 布局右边距 | |
int(单位dp) | 距协议栏的下边距 | |
YunXinCustomInterface | 整个view的点击事件,内部的子view点击事件需自行实现 |
协议页导航栏
方法 | 参数类型 | 说明 |
---|---|---|
setPrivacyActivityTranslateAnim | String | 参数1:进场动画传xml文件名即可 |
参数2:退场动画传xml文件名即可 | | setPrivacyStatusBarHidden | boolean | 协议页是否隐藏状态栏 | | setPrivacyStatusBarColor | int | 协议页状态栏颜色 | | setPrivacyTitleArray | String[] | 协议页标题名称,不设置默认展示授权页对应的协议名称 | | setPrivacyNavColor | int | 设置协议页导航栏背景颜色 | | setPrivacyNavTextBold | boolean | 设置协议页导航栏标题文字是否加粗(true:加粗;false:不加粗) | | setPrivacyNavTextColor | int | 设置协议页导航栏标题文字颜色 | | setPrivacyNavTextSize | int(单位sp) | 设置协议页导航栏标题文字大小 | | setPrivacyNavReturnImgPath | Drawable | 设置协议页导航栏返回按钮图标 | | setPrivacyNavReturnImgHidden | boolean | 设置协议页导航栏返回按钮是否隐藏(true:隐藏;false:不隐藏) | | setPrivacyNavReturnBtnWidth | int(单位dp) | 设置协议页导航栏返回按钮宽度 | | setPrivacyNavReturnBtnHeight | int(单位dp) | 设置协议页导航栏返回按钮高度 | | setPrivacyNavReturnBtnOffsetRightX | int(单位dp) | 设置协议页导航栏返回按钮距离屏幕右侧X偏移 | | setPrivacyNavReturnBtnOffsetX | int(单位dp) | 设置协议页导航栏返回按钮距离屏幕左侧X偏移 | | setPrivacyNavReturnBtnOffsetY | int(单位dp) | 设置协议页导航栏返回按钮距离屏幕上侧Y偏移 |
授权页遮盖层
方法 | 参数类型 | 说明 |
---|---|---|
setDialogDimAmount | float | 授权页遮盖层灰度设置范围是(0~1) |
隐私协议提示弹框
方法 | 参数类型 | 说明 |
---|---|---|
addCustomPrivacyAlertView | view | 添加授权页上显示隐私协议弹框 |
注意: a.控件X偏移如果不设置默认居中。
3.添加自定义控件
调用该方法可实现在授权页添加自定义控件。
方法原型
public YunXinUIConfig.Builder addCustomView(View view, boolean isFinish, boolean type, TenDINsvCustomInterface tenDINsvCustomInterface) {}
参数说明
参数 | 参数类型 | 说明 |
---|---|---|
view(必填) | View | 自定义控件对象 |
isFinish(必填) | boolean | 是否需要销毁授权页:true销毁 false不销毁 |
type(必填) | boolean | 设置自定义控件的位置: |
true为授权页导航栏 false为授权页导航栏以下空白处 | | yunXinCustomInterface | YunXinCustomInterface | 自定义控件监听 |
注意:如果添加布局为自定义控件,监听实现请参考demo示例。
4.设置弹窗样式
调用该方法可实现将授权页设置成弹窗样式。
方法原型
public YunXinCustomInterface.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.netease.yunxin.login.view.YunXinOneKeyActivity"
android:launchMode="singleTop"
android:theme="@style/Theme.ActivityDialogStyle"
android:configChanges="keyboardHidden|orientation|screenSize"
android:screenOrientation="behind" />
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相关主题。
5.设置横竖屏
在manifest文件中,指定授权页activity的screenOrientation即可
注意:只有全屏不透明的activity才能指定方向,否则在8.0系统版本上会报“Only fullscreen opaque activities can request orientation”或其他异常。 即:弹框或者透明主题,授权页不能指定方向。如需指定方向,可以指定授权页前个页面的方向,授权页设置跟随前个界面方向,即:“android:screenOrientation="behind"”**
四.本机认证
注:本机认证同免密登录,需要初始化,本机认证、免密登录可共用初始化,两个功能同时使用时,只需调用一次初始化即可。 **
1.初始化
同SDK使用说明-->初始化 **
2.本机号校验
在初始化执行之后调用,本机号校验界面需自行实现,可以在多个需要校验的页面中调用。
方法原型:
public void startAuthentication(AuthenticationExecuteListener authenticationExecuteListener) {}
参数描述:
参数 | 类型 | 说明 |
---|---|---|
authenticationExecuteListener(必填) | AuthenticationExecuteListener | 本机号校验回调监听器,需要调用者自己实现;authenticationRespond是该接口中唯一的抽象方法,即void authenticationRespond(int code,String result) |
示例代码:
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 | 用来和后台校验手机号。一次有效。 |
**
3.校验手机号
当本机号校验外层code为2000时,您将获取到返回的参数,请将这些参数传递给后端开发人员,并参考服务端文档来实现校验本机号的步骤
五.返回码
返回码 | 返回码描述 |
---|---|
1000 | 一键登录获取token成功 |
1001 | 运营商通道关闭 |
1002 | 运营商信息获取失败,请结合result查看具体失败原因 |
1003 | 一键登录获取token失败,请结合result查看具体失败原因 |
1007 | 网络请求失败,请结合result查看具体失败原因 |
1011 | 点击返回,用户取消免密登录 |
1014 | SDK内部异常,请结合result查看具体失败原因 |
1016 | APPID为空 |
1019 | 其他错误,请结合result查看具体失败原因 |
1022 | 初始化、预取号成功 |
1023 | 初始化、预取号失败,请结合result查看具体失败原因 |
1031 | 请求过于频繁(一般是由授权页未销毁情况下,再次调用拉起授权页方法导致) |
1032 | 用户禁用 |
2000 | 本机号校验返回成功,解析result,可得到网络请求参数 |
2003 | 本机号校验返回失败 |