一.准备工作

概述

本文是闪验SDK_Android v2.3.1版本的接入文档,用于指导SDK的使用方法,默认读者已经熟悉 IDE(Eclipse 或者 Android Studio)的基本使用方法,以及具有一定的 Android 编程知识基础。

  • 闪验SDK支持minSdkVersion 16及以上版本
  • 闪验SDK支持中国移动3/4G、联通3/4G、电信4G的取号能力,在3G网络下时延会更高
  • 闪验SDK支持单数据网络/数据网络与WiFi网络双开,不支持单WiFi网络
  • 对于双卡手机,闪验SDK只对当前流量卡取号,双卡均未开数据流量SDK将会返回错误码

创建应用

应用的创建流程及APPID的获取,请查看「账号创建」文档**
**

快速体验demo

  • Android压缩包附带的apk文件夹中是闪验demo的安装包,可以直接安装到Android手机上。并快速体验闪验在您的手机上的表现。
  • Android压缩包附带的demo文件夹中是闪验的示例工程,使用Android studio打开示例工程,完成以下步骤配置,然后直接运行起来测试。

a.将build里面的applicationId换成对应的测试包名
b.将签名配置改成您的签名配置
c.将AppId换成您在闪验平台创建应用后生成的信息

开发环境搭建

(1)将开发包拷贝到工程

a.将SDK中libs目录下的aar包拷贝到自己工程的libs目录下,如没有该目录需新建。
b.SDK中jniLibs目录下包含多个so库,请根据项目情况,选择相应的so库。如果您的项目包含某个abi目录,则复制对应的so文件到您的项目,例如,您的项目中只有armeabi-v7a目录,则只复制jniLibs中的armeabi-v7a文件到您的项目;如果您的项目没有abi目录,请自行创建并复制。

jniLibs所在目录结构如下图:

在app文件夹下的build.gradle的dependencies中配置对应版本的aar依赖并添加repositories,详细代码如下:

repositories {
    flatDir {
        dirs '../app/libs'
    }
}
dependencies {api(name: 'aar包名', ext: 'aar')}

(2)配置AndroidManifest.xml文件

在manifest标签内添加必要的权限支持

<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.chuanglan.shanyan_sdk.view.CmccLoginActivity"
    android:configChanges="keyboardHidden|orientation|screenSize"
    android:launchMode="singleTop"
    android:theme="@style/dialogStyle" />

<activity-alias
   android:name="com.cmic.sso.sdk.activity.LoginAuthActivity"
   android:configChanges="keyboardHidden|orientation|screenSize"
   android:launchMode="singleTop"
   android:targetActivity="com.chuanglan.shanyan_sdk.view.CmccLoginActivity"
   android:theme="@style/dialogStyle" /> 
<activity
   android:name="com.chuanglan.shanyan_sdk.view.ShanYanOneKeyActivity"
   android:configChanges="keyboardHidden|orientation|screenSize"
   android:launchMode="singleTop"
   android:theme="@style/dialogStyle" />
<activity
   android:name="com.chuanglan.shanyan_sdk.view.CTCCPrivacyProtocolActivity"
   android:configChanges="keyboardHidden|orientation|screenSize"
   android:launchMode="singleTop"
   android:screenOrientation="behind"
   android:theme="@style/dialogStyle" /> 

配置Android9.0对http协议的支持两种方式:

方式一:

android:usesCleartextTraffic="true"

示例代码:

<application
    android:name=".view.MyApplication"
    android:allowBackup="true"
    android:icon="@mipmap/shanyan_sdk_icon"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/shanyan_sdk_icon"
    android:supportsRtl="true"
    android:theme="@style/AppTheme"
    android:usesCleartextTraffic="true"
    ></application>

方式二:

目前只有移动运营商个别接口为http请求,对于全局禁用Http的项目,需要设置Http白名单。以下为运营商http接口域名:cmpassport.com

(3) 混淆规则:

-dontwarn com.cmic.sso.sdk.**
-dontwarn com.sdk.**
-keep class com.cmic.sso.sdk.**{*;}
-keep class com.sdk.** { *;}
-keep class cn.com.chinatelecom.account.api.**{*;}

通过上面的几个步骤,工程就配置完成了,接下来就可以在工程中使用闪验SDK进行开发了。

二.SDK使用说明

1.初始化

使用一键登录功能前,必须先进行初始化操作,建议放在Application的onCreate() 方法中。

   OneKeyLoginManager.getInstance().init(getApplicationContext(), appId, new InitListener() {
                            @Override
                            public void getInitStatus(int code, String result) { 
                            }
                        });

2.预取号

  • **建议在判断当前用户属于未登录状态时使用,**已登录状态用户请不要调用该方法
OneKeyLoginManager.getInstance().getPhoneInfo(new GetPhoneInfoListener() {
    @Override
    public void getPhoneInfoStatus(int code, String result) {
    }
});

3.拉起授权页

  • 调用拉起授权页方法后将会调起运营商授权页面。已登录状态请勿调用 。
OneKeyLoginManager.getInstance().openLoginAuth(false, new OpenLoginAuthListener() {
    @Override
    public void getOpenLoginAuthStatus(int code, String result) {
    }
}, new OneKeyLoginListener() {
    @Override
    public void getOneKeyLoginStatus(int code, String result) {
    }
});

4.销毁授权页

OneKeyLoginManager.getInstance().finishAuthActivity();

**

5.授权页点击事件监听

需要对授权页点击事件监听的用户,可调用此方法监听授权页点击事件,无此需求可以不写。

   OneKeyLoginManager.getInstance().setActionListener(new ActionListener() {
            @Override
            public void ActionListner(int type, int code, String message) {
            }
        });

6.其他API

(1)设置授权页loading显示隐藏

 OneKeyLoginManager.getInstance().setLoadingVisibility(false);

(2)设置授权页协议复选框是否选中

 OneKeyLoginManager.getInstance().setCheckBoxValue(false);

7.置换手机号

当一键登录外层code为1000时,您将获取到返回的参数,请将这些参数传递给后端开发人员,并参考「服务端」文档来实现获取手机号码的步骤。

三.授权页界面修改

1.授权页配置

调用该方法可实现对三网运营商授权页面个性化设计,每次调用拉起授权页方法前必须先调用该方法,否则授权界面会展示异常。(三网界面配置内部实现逻辑不同,请务必使用移动、联通、电信卡分别测试三网界面

//自定义运营商授权页界面
OneKeyLoginManager.getInstance().setAuthThemeConfig(ConfigUtils.getCJSConfig(getApplicationContext()), ConfigUtils.getCJSLandscapeUiConfig(getApplicationContext()))

ShanYanUIConfig.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) 设置导航栏返回按钮宽度
setNavReturnBtnHeight int(单位dp) 设置导航栏返回按钮高度
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.高
setCheckBoxMargin int(单位dp) 设置checkbox的间距,包含四个参数:1.左间距 2.上间距 3.右间距 4.下间距
setPrivacyText String 设置隐私条款名称外的文字,包含五个参数,参数示例(红色 字体为传入参数):
同意《》和《》、《》、《》并授权闪验获取本机号码
参数1: 同意
参数2:和
参数3:、
参数4:、
参数5:并授权闪验获取本机号码
setPrivacyTextBold boolean 设置协议栏字体是否加粗(true:加粗;false:不加粗)
setPrivacyCustomToast Toast 未勾选时,自定义点击一键登录的Toast提示
setPrivacyCustomToastText String 未勾选协议时toast提示文字
setPrivacyNameUnderline boolean 协议是否显示下划线(true:显示;false:不显示)
setPrivacyCustomToastText String 未勾选协议时toast提示文字
setOperatorPrivacyAtLast 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:不加粗)

授权页上海璟梦信息科技有限公司slogan

方法 参数类型 说明
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 View 设置自定义loading

授权页相对控件设置(指定在登录按钮和协议栏之间)

方法 参数类型 说明
setRelativeCustomView View 设置自定义布局
boolean 点击布局是否需要销毁授权页:true销毁 false不销毁
int(单位dp) 布局左间距
int(单位dp) 距登录按钮的上边距
int(单位dp) 布局右边距
int(单位dp) 距协议栏的下边距
ShanYanCustomInterface 整个view的点击事件,内部的子view点击事件需自行实现

协议页导航栏

方法 参数类型 说明
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偏移如果不设置默认居中。

2.添加自定义控件

调用该方法可实现在授权页添加自定义控件。

/**
     * 闪验三网运营商授权页配置类
     *
     * @param context
     * @return
     */
public static ShanYanUIConfig getUiConfig(Context context) {
   
        /************************************************自定义控件**************************************************************/

        Button close = new Button(context);
        close.setBackgroundResource(context.getResources().getIdentifier("close_black", "drawable", context.getPackageName()));
        RelativeLayout.LayoutParams mLayoutParamsClose = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
        mLayoutParamsClose.setMargins(0, AbScreenUtils.dp2px(context, 15), AbScreenUtils.dp2px(context, 10), 0);
        mLayoutParamsClose.width = AbScreenUtils.dp2px(context, 20);
        mLayoutParamsClose.height = AbScreenUtils.dp2px(context, 20);
        mLayoutParamsClose.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
        close.setLayoutParams(mLayoutParamsClose);
        //其他方式登录
        TextView otherTV = new TextView(context);
        otherTV.setText("其他方式登录");
        otherTV.setTextColor(0xff3a404c);
        otherTV.setTextSize(TypedValue.COMPLEX_UNIT_SP, 13);
        RelativeLayout.LayoutParams mLayoutParams1 = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
        mLayoutParams1.setMargins(0, AbScreenUtils.dp2px(context, 175), 0, 0);
        mLayoutParams1.addRule(RelativeLayout.CENTER_HORIZONTAL);
        otherTV.setLayoutParams(mLayoutParams1);

        View view = new View(context);
        view.setBackgroundColor(0xffe8e8e8);
        RelativeLayout.LayoutParams mLayoutParams3 = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, AbScreenUtils.dp2px(context, 1));
        mLayoutParams3.setMargins(0, AbScreenUtils.dp2px(context, 44), 0, 0);
        view.setLayoutParams(mLayoutParams3);

        TextView tip = new TextView(context);
        tip.setText("使用该手机号登录");
        tip.setTextColor(0xff1E3179);
        tip.setTextSize(TypedValue.COMPLEX_UNIT_SP, 15);
        RelativeLayout.LayoutParams mLayoutParamsTip = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
        mLayoutParamsTip.setMargins(AbScreenUtils.dp2px(context, 15), AbScreenUtils.dp2px(context, 65), 0, 0);
        mLayoutParamsTip.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
        tip.setLayoutParams(mLayoutParamsTip);

        LayoutInflater inflater1 = LayoutInflater.from(context);
        RelativeLayout relativeLayout = (RelativeLayout) inflater1.inflate(R.layout.other_login_item_view, null);
        RelativeLayout.LayoutParams layoutParamsOther = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
        layoutParamsOther.addRule(RelativeLayout.CENTER_HORIZONTAL);
        layoutParamsOther.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
        relativeLayout.setLayoutParams(layoutParamsOther);
        ImageView weixin = relativeLayout.findViewById(R.id.weixin);
        ImageView qq = relativeLayout.findViewById(R.id.qq);
        ImageView weibo = relativeLayout.findViewById(R.id.weibo);
        weixin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(context, "微信登录", Toast.LENGTH_SHORT).show();
            }
        });
        qq.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(context, "qq登录", Toast.LENGTH_SHORT).show();

            }
        });
        weibo.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(context, "微博登录", Toast.LENGTH_SHORT).show();

            }
        });

        /****************************************************设置授权页*********************************************************/
        Drawable authNavHidden = context.getResources().getDrawable(R.drawable.sysdk_login_bg);
        Drawable navReturnImgPath = context.getResources().getDrawable(R.drawable.sy_sdk_left);
        Drawable logoImgPath = context.getResources().getDrawable(R.drawable.sy_logo);
        Drawable logBtnImgPath = context.getResources().getDrawable(R.drawable.login_btn_bg);
        Drawable uncheckedImgPath = context.getResources().getDrawable(R.drawable.umcsdk_uncheck_image);
        Drawable checkedImgPath = context.getResources().getDrawable(R.drawable.umcsdk_check_image);
        ShanYanUIConfig uiConfig = new ShanYanUIConfig.Builder()
                .setDialogTheme(true, 460, 240, 0, 0, false)
                //授权页导航栏:
                .setNavColor(Color.parseColor("#ffffff"))  //设置导航栏颜色
                .setNavText("")  //设置导航栏标题文字
                .setNavTextColor(0xff080808) //设置标题栏文字颜色
                .setNavReturnImgPath(navReturnImgPath)  //
                .setNavReturnImgHidden(false)
                .setAuthBGImgPath(authNavHidden)
                .setAuthNavHidden(true)

                //授权页logo(logo的层级在次底层,仅次于自定义控件)
                .setLogoImgPath(logoImgPath)  //设置logo图片
                .setLogoWidth(108)   //设置logo宽度
                .setLogoHeight(36)   //设置logo高度
                .setLogoOffsetY(5)  //设置logo相对于标题栏下边缘y偏移
                .setLogoOffsetX(15)
                .setLogoHidden(false)   //是否隐藏logo

                //授权页号码栏:
                .setNumberColor(0xff333333)  //设置手机号码字体颜色
                .setNumFieldOffsetY(100)    //设置号码栏相对于标题栏下边缘y偏移
                .setNumberSize(18)
                .setNumFieldWidth(110)
                .setNumFieldOffsetX(15)


                //授权页登录按钮:
                .setLogBtnText("本机号码一键登录")  //设置登录按钮文字
                .setLogBtnTextColor(0xffffffff)   //设置登录按钮文字颜色
                .setLogBtnImgPath(logBtnImgPath)   //设置登录按钮图片
                .setLogBtnOffsetY(93)   //设置登录按钮相对于标题栏下边缘y偏移
                .setLogBtnTextSize(15)
                .setLogBtnWidth(150)
                .setLogBtnHeight(45)

                //授权页隐私栏:
                .setAppPrivacyOne("用户自定义协议条款", "https://www.253.com")  //设置开发者隐私条款1名称和URL(名称,url)
                .setAppPrivacyTwo("用户服务条款", "https://www.253.com")  //设置开发者隐私条款2名称和URL(名称,url)
                //.setAppPrivacyColor(0xff666666, 0xff0085d0)   //	设置隐私条款名称颜色(基础文字颜色,协议文字颜色)
                .setPrivacyOffsetY(156)
                .setUncheckedImgPath(uncheckedImgPath)
                .setCheckedImgPath(checkedImgPath)

                //授权页slogan:
                .setSloganTextColor(0xff999999)  //设置slogan文字颜色
                .setSloganOffsetY(130)  //设置slogan相对于标题栏下边缘y偏移
                .setSloganTextSize(9)
                .setSloganOffsetX(15)

                // 添加自定义控件:
                //其他方式登录及监听,可以不写
                .addCustomView(close, true, false, new ShanYanCustomInterface() {
                    @Override
                    public void onClick(Context context, View view) {
                        Toast.makeText(context, "点击关闭", Toast.LENGTH_SHORT).show();
                    }
                })
                //标题栏下划线,可以不写
                .addCustomView(view, false, false, null)
                .addCustomView(tip, false, false, null)
                .addCustomView(relativeLayout, false, false, null)
                .build();
        return uiConfig;
}

**

3.设置横竖屏

targetSdkVersion 26以上:
只有全屏不透明的activity才能指定方向,否则在8.0系统版本上会报“Only fullscreen opaque activities can request orientation”异常。
注意:弹框或者透明主题,授权页不能指定方向;如需指定方向,设置授权页前个页面的方向,授权页设置跟随“android:screenOrientation=“behind””
targetSdkVersion 26及以下:无限制

四.本机认证

注:本机认证同免密登录,需要初始化,本机认证、免密登录可共用初始化,两个功能同时使用时,只需调用一次初始化即可。
**

1.初始化

同SDK使用说明–>初始化
**

2.本机号校验

在初始化执行之后调用,本机号校验界面需自行实现,可以在多个需要校验的页面中调用。

 OneKeyLoginManager.getInstance().startAuthentication(new AuthenticationExecuteListener() {
                        @Override
                        public void authenticationRespond(int code, String result) {
                        }
                    });

**

3.校验手机号

当本机号校验外层code为2000时,您将获取到返回的参数,请将这些参数传递给后端开发人员,并参考「服务端」文档来实现校验本机号的步骤

五.返回码

该返回码为闪验SDK自身的返回码,请注意1003及1023错误内均含有运营商返回码,具体错误在碰到之后查阅「返回码

返回码 返回码描述
1000 一键登录成功,解析result,可得到网络请求参数
1001 运营商通道关闭
1002 运营商信息获取失败
1003 一键登录获取token失败
1007 网络请求失败
1011 点击返回,用户取消免密登录
1014 SDK内部异常
1016 APPID为空
1019 其他错误
1022 网络初始化、预取号成功
1023 预初始化失败
1031 请求过于频繁
1032 用户禁用
2000 本机号校验返回成功,解析result,可得到网络请求参数
2003 本机号校验返回失败