Android客户端接入

更新时间: 2023-09-22 15:30:21

本文为您介绍Android客户端融合认证的集成方法及接口的功能示例。

接入步骤

下载SDK

登录号码认证产品控制台,在概览页面或号码认证服务 > 了解融合认证页面的右侧API&SDK区域,单击立即下载,进入API&SDK页面,根据页面提示下载并解压对应SDK。

创建认证方案

您导入项目或调用API接口时,会用到方案Code等参数信息,请先在号码认证产品控制台创建认证方案,获取方案Code等参数信息。

导入项目

  1. 控制minSdkVersion。

    说明

    融合认证SDK最低依赖版本为21,因此创建新项目minSdkVersion不能低于21。

    lQLPJwN1siDmwSzNAtfNBHewyVLqseO2qncFAEtxWlZzAA_1143_727.png
  2. 导入aar产物并添加依赖。

    在使用融合认证功能的module中引入相关SDK,即将相关aar导入module libs文件夹。

    如您的项目需要使用手机号风险分、端风险设置功能,请将友盟相关组件一起引入。39

    如您的项目不需要使用手机号风险分、端风险设置功能,请引入融合认证aar即可。50

    modulebuild.gradle文件中找到dependencies,添加如下引用:

    implementation fileTree(dir: "libs", include: ["*.aar"])
    implementation 'androidx.appcompat:appcompat:1.3.1'
    lQLPJwoji7yUM4jNAwvNBzKw4vnJ9sJt2EEE7oFrP3qcAA_1842_779.png
  3. 创建签名文件。

    参考studio创建签名文件创建签名文件,此签名文件在创建方案号时使用,签名文件放置在module下,文件名及文件路径无设置要求。

    以Demo为例,将签名文件放置在app/sig-adaptation/debug/文件夹下,在module的build.gradle文件中指向该签名。31

  4. 查看签名。

    使用Studio右侧面板,选择Gradle > 项目名称 > 签名文件module > Tasks > android > signingReport,查看签名

    32
    说明

    包签名获取方式如下:

    • 方式一:上图的下方输出的MD5值移除冒号,将大写字母转换为小写字母即可生成包签名

    • 方式二:请通过手机终端下载并安装Android App签名获取工具,获取Android App的包签名信息。

添加配置

  1. 添加权限。

    AndroidMainfest.xml清单文件中添加必要权限。

        <uses-permission android:name="android.permission.INTERNET"/>
        <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
        <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
  2. 添加Activity声明。

    AndroidMainfest.xml清单文件中添加Activity声明。

    //号码认证界面
    <activity android:name="com.alicom.fusion.auth.numberauth.FusionNumberAuthActivity"
        android:theme="@style/NumberAuthTheme"
        android:launchMode="singleTask"
        android:screenOrientation="portrait">
        <intent-filter>
    				//action值固定不能修改
            <action android:name="fusion_action_auth"/>
            <category android:name="fusion_category_auth"/>
            <category android:name="android.intent.category.DEFAULT"/>
        </intent-filter>
    </activity>
    //短信界面
    <activity
        android:name="com.alicom.fusion.auth.smsauth.FusionSmsActivity"
        android:screenOrientation="portrait">
        <intent-filter>
    				//action值固定不能修改
            <action android:name="fusion_action_sms"/>
            <category android:name="fusion_category_sms"/>
            <category android:name="android.intent.category.DEFAULT"/>
        </intent-filter>
    </activity>
    //上行短信界面
    <activity
        android:name="com.alicom.fusion.auth.upsms.AlicomFusionUpSmsActivity"
        android:screenOrientation="portrait">
        <intent-filter>
    				//action值固定不能修改
            <action android:name="fusion_action_ups"/>
            <category android:name="fusion_category_ups"/>
            <category android:name="android.intent.category.DEFAULT"/>
        </intent-filter>
    </activity>
    //号码认证授权页界面
    <activity
    	android:name="com.mobile.auth.gatewayauth.LoginAuthActivity"
    	android:configChanges="orientation|keyboardHidden|screenSize"
    	android:exported="false"
    	android:launchMode="singleTop"
    	android:screenOrientation="behind"
    	android:theme="@style/authsdk_activity_dialog"/>
    //号码认证二次弹窗授权界面
    <activity
    	android:name="com.mobile.auth.gatewayauth.PrivacyDialogActivity"
    	android:configChanges="orientation|keyboardHidden|screenSize"
    	android:exported="false"
    	android:launchMode="singleTop"
    	android:screenOrientation="behind"
    	android:theme="@style/authsdk_activity_dialog"/>
    //号码认证协议及登录注册场景协议界面用户可自定义
    <activity
    	android:name="com.alicom.fusion.demo.CustomWebViewActivity"
    	android:configChanges="orientation|keyboardHidden|screenSize|uiMode|fontScale"
    	android:screenOrientation="sensorPortrait">
    	<intent-filter>
    		//action为固定值不能修改
    		<action android:name="com.fusion.auth"/>
    		<category android:name="android.intent.category.DEFAULT"/>
    	</intent-filter>
    </activity>
  3. 混淆配置。

    如接入方有混淆需求,请在混淆文件中加入如下混淆规则:

    -keep class com.alicom.fusion.auth.**{*;}

鉴权

SDK在启动时需要接入方传入鉴权Token,用于合法性校验。

  • Token鉴权成功,通过onSDKTokenAuthSuccess():回调。

  • Token鉴权失败,通过onSDKTokenAuthFailure(AlicomFusionAuthToken token, AlicomFusionEvent alicomFusionEvent)回调。

更新

SDK在运行时若Token过期,请通过onSDKTokenUpdate()更新Token。

使用场景

/* 默认登录注册场景 */
 public static final String ALICOMFUSIONAUTHTEMPLATED_10001 = "100001";
 /* 默认更换手机号场景 */
 public static final String ALICOMFUSIONAUTHTEMPLATED_10002 = "100002";
 /* 默认重置密码场景 */
 public static final String ALICOMFUSIONAUTHTEMPLATED_10003 = "100003";
 /* 默认绑定新手机号场景 */
 public static final String ALICOMFUSIONAUTHTEMPLATED_10004 = "100004";
 /* 默认验证绑定手机号场景 */
 public static final String ALICOMFUSIONAUTHTEMPLATED_10005 = "100005";

类别

说明

开始场景

调用startSceneWithTemplateId(Context mContext,String templateId)startSceneWithTemplateId(Context mContext,String templateId,AlicomFusionAuthUICallBack callback)

说明

调用该接口的前提是没有正在执行的场景。

  • mContext:上下文。

  • callback:为可选参数,用于自定义UI时使用,如果默认使用内置UI,该参数可不传。

  • templateId:场景唯一标识与控制台场景ID唯一对应,用于决策启动哪个场景。

继续场景

调用continueSceneWithTemplateId(String templateId,boolean isSuccess)

说明

调用该接口的前提是有正在执行的场景。

  • templateId:场景唯一标识与控制台场景ID唯一对应,用于决策启动哪个场景。

  • isSuccess:当前场景验证是否成功,是否成功决定继续场景后的业务流程走向。

结束场景

调用stopSceneWithTemplateId(String templateId)

templateId:场景唯一标识与控制台场景ID唯一对应,用于决策启动哪个场景。

获取Token成功

SDK执行到一个节点后或通过onVerifySuccess(String token,String nodeName,AlicomFusionEvent event)回调,对接入方返回节点换号Token,接入方获取到该Token后通过接口换取号码。

中途获取Token成功

中途获取Token成功的回调,在AlicomFusionTemplateId_100002场景下验证当前手机号节点触发,回调onHalfWayVerifySuccess(String nodeName, String maskToken,AlicomFusionEvent event,HalfWayVerifyResult verifyResult)

在接入方验证完成当前手机号后,通过verifyResult告知SDK验证结果,SDK将根据该结构执行之后的流程。

获取Token失败

如果SDK在某个节点获取Token失败,通过onVerifyFailed(AlicomFusionEvent error,String nodeName)接入方在收到该回调后,可以用continueSceneWithTemplateId(String templateId,boolean isSuccess)接口选择下一节点的验证,或通过stopSceneWithTemplateId(String templateId)结束当前场景,采用其他方案进行验证。

场景结束

回调onTemplateFinish(AlicomFusionEvent event),结束场景内的所有节点。

接入方调用stopSceneWithTemplateId(String templateId)结束当前场景。

交互流程详解

完整的功能交互流程请参见融合认证的交互流程

SDK方法说明

创建融合认证实例

//创建无参数构造方法,主要进行⼀些SDK初始化⼯作
AlicomFusionBusiness mAlicomFusionBusiness=new AlicomFusionBusiness();

初始化传入鉴权Token

/**
 * 初始化,传入鉴权Token
 * @param mContext
 * @param sceneCode方案号
 * @param token鉴权Token
 */
 public void initWithToken(Context mContext, String sceneCode, AlicomFusionAuthToken token)
说明

Token需要从服务端获取。

  • Token鉴权成功,通过onSDKTokenAuthSuccess回调,场景操作必须在回调成功后进行;Token鉴权失败,通过onSDKTokenAuthFailure回调。

  • Token过期前五分钟,通过onSDKTokenUpdate回调获取新的Token,⽤户必须实现此回调获取新的Token。

使用示例

AlicomFusionAuthToken token=new AlicomFusionAuthToken();
token.setAuthToken(GlobalInfoManager.getInstance().getToken());
mAlicomFusionBusiness.initWithToken(GlobalInfoManager.getInstance().getContext(), Constant.SCHEME_CODE,token);

开始场景

使用默认UI

  • 该接口使用的是默认UI,接入方无法修改UI。

  • 需要Token鉴权成功后才可使用。

  • 没有其他场景正在执行方可调用,否则将报100003错误。

  • templateId请参考使用场景。

/**
 * 开始拉起场景,使用融合认证内置UI
 * @param mContext
 * @param templateId 场景唯⼀标识与控制台场景ID唯⼀对应
 */
 public void startSceneWithTemplateId(Context mContext,String templateId)

使用示例

mAlicomFusionBusiness.startSceneWithTemplateId(getActivity(), "100001");

使用自定义UI

  • 根据实际场景可以通过UI回调接口修改相关UI。

    • 一键登录onPhoneNumberVerifyUICustomView(String templateId,String nodeId, FusionNumberAuthModel authConfig)

    • 短信验证码(String templateId,String nodeId,boolean isAutoInput, AlicomFusionVerifyCodeView view)

    • 用户主动发短信onSMSSendVerifyUICustomView(String templateId,String nodeId, AlicomFusionUpSMSView view,String receivePhoneNumber,String verifyCode)

  • 需要Token鉴权后才可使用。

  • templateId请参考使用场景。

 /**
     *  开始拉起场景,使用APP自定义UI
     *  @param mContext
     *  @param templateId 场景唯一标识 与控制台场景ID唯一对应
     *  @param callback UI回调,自定义UI需通过该回调实现
     */
    public void startSceneWithTemplateId(Context mContext,String templateId,AlicomFusionAuthUICallBack callback)

使用示例

mAlicomFusionBusiness.startSceneWithTemplateId(getContext(), "100001", new AlicomFusionAuthUICallBack() {
    @Override
    public void onPhoneNumberVerifyUICustomView(String templateId,String nodeId, FusionNumberAuthModel authConfig) {

    }

    @Override
    public void onSMSCodeVerifyUICustomView(String templateId,String nodeId,boolean isAutoInput, AlicomFusionVerifyCodeView view) {

    }

    @Override
    public void onSMSSendVerifyUICustomView(String templateId,String nodeId, AlicomFusionUpSMSView view,String receivePhoneNumber,String verifyCode) {

    }
});

继续场景

  • 用于场景中断后恢复流程,如获取到号码校验Token后,假设服务端效验失败,可以通过该接口继续进行场景流程。

  • isSuccess的作用在于当前的认证是否成功,决定SDK的认证走向,如SDK透出Token后,进行取号操作失败,如需下一步鉴权,可通过该参数控制走向。

  • 需要在start后才能使用。

  • templateId请参考使用场景。

/**
 * 继续场景
 * @note 该接口用于场景中断后恢复流程,如获取到码号效验Token后,假设服务端效验失败,可以通过该接⼝继续进行场景流程
 * @param templateId 场景唯⼀标识与控制台场景ID唯⼀对应
 * @param isSuccess 当前场景验证是否成功,成功与否决定继续场景后的业务流程走向
 */
 public void continueSceneWithTemplateId(String templateId,boolean isSuccess)

使用示例

mAlicomFusionBusiness.continueSceneWithTemplateId("100001",true);

结束场景

  • 当需要结束场景时调用该接口,对应的场景将不再执行。

  • 需要在start后才能使用。

  • templateId请参考使用场景。

/**
 * 结束场景
 * @note 与start接口对应,结束后才可以start下⼀次场景,不可同时start多个场景
 * @param templateId 场景唯⼀标识与控制台场景ID唯⼀对应
 */
 public void stopSceneWithTemplateId(String templateId)

使用示例

mAlicomFusionBusiness.stopSceneWithTemplateId("100001");

一键登录界面添加自定义view

/**
 * 添加自定义布局
 *
 * @param xmlConfig
 */
 @AuthNumber
 public void addAuthRegisterXmlConfig(AuthRegisterXmlConfig xmlConfig)
 /**
 * 动态添加控件
 *
 * @param viewID view的ID
 * @param viewConfig view的动态配置
 */
 public void addAuthRegistViewConfig(String viewID, AuthRegisterViewConfig viewConfig)

使用示例

fusionNumberAuthModel.addAuthRegistViewConfig(""/**view ID**/,new AuthRegisterViewConfig.Builder()
        //添加自定义view
        .setView(null)
        //.setView(initNumberTextView())
        //RootViewId有三个参数
        //AuthRegisterViewConfig.RootViewId.ROOT_VIEW_ID_BODY 导航栏以下部分为body
        //AuthRegisterViewConfig.RootViewId.ROOT_VIEW_ID_TITLE_BAR 导航栏部分 设置导航栏部分记得setNavHidden和setNavReturnHidden显示后才可看到效果
        //AuthRegisterViewConfig.RootViewId.ROOT_VIEW_ID_NUMBER 手机号码部分
        .setRootViewId(AuthRegisterViewConfig.RootViewId.ROOT_VIEW_ID_BODY)
        .setCustomInterface(new CustomInterface() {
            @Override
            public void onClick(Context context) {
               //自定义view点击事件
            }
        }).build());
fusionNumberAuthModel.addAuthRegisterXmlConfig(new AuthRegisterXmlConfig.Builder()
        .setLayout(0/**xml布局layout ID**/,new AbstractPnsViewDelegate(){

    @Override
    public void onViewCreated(View view) {
        //添加自定义布局相关逻辑,如点击事件等
    }
});

二次弹窗界面添加自定义view

/**
 * 二次弹窗动态添加控件
 *
 * @param viewID view的ID
 * @param viewConfig view的动态配置
 */
public void  addPrivacyAuthRegistViewConfig(String viewID, AuthRegisterViewConfig viewConfig)

使用示例

fusionNumberAuthModel.addPrivacyAuthRegistViewConfig(""/**view ID**/, new AuthRegisterViewConfig.Builder()
        //添加自定义view
        .setView(null)
        //RootViewId有三个参数
        //AuthRegisterViewConfig.RootViewId.ROOT_VIEW_ID_BODY 协议文本区域
        //AuthRegisterViewConfig.RootViewId.ROOT_VIEW_ID_TITLE_BAR 顶部导航栏部分
        //AuthRegisterViewConfig.RootViewId.ROOT_VIEW_ID_NUMBER 按钮区域
        .setRootViewId(AuthRegisterViewConfig.RootViewId.ROOT_VIEW_ID_NUMBER)
        .setCustomInterface(new CustomInterface() {
            @Override
            public void onClick(Context context) {
                //自定义view点击事件
            }
        }).build());

添加二次弹窗自定义布局view

/**
 * 二次弹窗添加自定义布局
 *
 * @param xmlConfig
 */
public void addPrivacyRegisterXmlConfig(AuthRegisterXmlConfig xmlConfig)

使用示例

fusionNumberAuthModel.addPrivacyRegisterXmlConfig(new AuthRegisterXmlConfig.Builder()
        .setLayout(0/**xml布局layout ID**/,new AbstractPnsViewDelegate(){

    @Override
    public void onViewCreated(View view) {
        //添加自定义布局相关逻辑,如点击事件等
    }

其他接口说明

友盟组件依赖设置

用户如果需要使用友盟组件的端风险检测及手机号评分功能,需要配置aar后调用下面的方法决定友盟组件的初始化位置。

说明

如果用户只是简单地调用此方法而不引入aar则设置无效,因为此功能属于插件式依赖,不属于强制性依赖。

/**
 * 设置是否由SDK初始化友盟统计组件
 * @note SDK默认使用融合认证关联友盟组件,如果您当前App未集成友盟组件,根据SDK集成文档接入各个SDK后,无需再关心此接口设置
 * @note 如果您当前已经集成过友盟组件,则⽆需重复集成,使用此接口关闭内置链接,并确保使用本SDK前已经完成友盟组件初始化
 * @param isUseSupply true:使用SDK默认关联友盟组件;false:不使用SDK关联友盟组件,即使用App原有友盟组件,默认true
 * @param channel 渠道名称
 */
 public static void useSDKSupplyUMSDK(boolean isUseSupply,String channel
)

使用示例

AlicomFusionBusiness.useSDKSupplyUMSDK(true,"fusionauth");

销毁服务

销毁服务后需要重新创建对象。

/**
 * 销毁服务
 * @note 销毁服务后,SDK内部各个模块同步销毁,若想继续使用SDK,请重新初始化
 */
 public void destory()

使用示例

mAlicomFusionBusiness.destory();

主动更新Token

此方法为用户主动更新Token,Token相关鉴权及更新逻辑参考initWithToken中的Token逻辑。

/**
 * 主动更新鉴权Token
 * @param token 鉴权Token
 * @note 鉴权Token具有时效性,App可再Token即将过期时,主动向SDK更新Token
 * @note 非必要接口:SDK内部存在token的过期监控,过期前会通过AlicomFusionAuthCallVack回调通知App,App可不感知此项逻辑
 */
 public void updateToken(AlicomFusionAuthToken token)

使用示例

AlicomFusionAuthToken token=new AlicomFusionAuthToken();
token.setAuthToken(GlobalInfoManager.getInstance().getToken());
mAlicomFusionBusiness.updateToken(token);

获取版本号

/**
 * 获取SDK版本号
 * @return 版本号
 */
 public static String getSDKVersion()

使用示例

String version=AlicomFusionBusiness.getSDKVersion();

获取场景ID

/**
 * 获取当前正在运行中的场景ID
 * @return templateId 场景唯⼀标识与控制台场景ID唯⼀对应
 */
 public String getCurrentTemplateId()

使用示例

String currentTemplateId=mAlicomFusionBusiness.getCurrentTemplateId();

日志功能

/** AlicomFusionLog 日志会在debug状况下或者设置logEnable为true的情况下打印
 * 获取当前正在运行中的场景ID
 * @return templateId 场景唯⼀标识与控制台场景ID唯⼀对应
 */
public static void setLogEnable(boolean logEnable)

使用示例

AlicomFusionLog.setLogEnable(true);

⼀键登录自定义UI参数

public class FusionNumberAuthModel {
    //实现其他号码登录功能
    public void otherPhoneLogin()

    /**
     * 添加自定义View
     *
     * @param xmlConfig
     */
    @AuthNumber
    public void addAuthRegisterXmlConfig(AuthRegisterXmlConfig xmlConfig)
    /**
     * 动态添加控件
     *
     * @param viewID     view的ID
     * @param viewConfig view的动态配置
     */
    public void  addAuthRegistViewConfig(String viewID, AuthRegisterViewConfig viewConfig)
     //移除自定义添加控件
    public void removeAuthRegisterXmlConfig()

    //移除自定义View
    public void removeAuthRegisterViewConfig()

    /**
     * 设置UI控件点击事件回调
     *
     * @param uiClickListener 回调实现
     */
    public void setUiClickListener(AuthUIControlClickListener uiClickListener)
    /**
     * 设置切换组件swtich点击事件
    *
     * @param callBack 回调实现
     */
    public void  setSwitchLoginBack(AlicomFusionSwitchLogin callBack)
    //获取参数实体对象
    public Builder getBuilder()
    @AuthNumber
    public static class Builder {

        /**
         * 设置蒙层透明度
         *
         * @param dialogAlpha
         * @return
         */
        public FusionNumberAuthModel.Builder setDialogAlpha(float dialogAlpha) 

        /**
         * 设置顶部导航栏背景色
         *
         * @param navColor
         * @return
         */
        public FusionNumberAuthModel.Builder setNavColor(@ColorInt int navColor) 
        /**
         * 设置一键登录loading背景
         * @param loadingBackgroundPath
         * @return
         */
        public FusionNumberAuthModel.Builder setLoadingBackgroundPath(String loadingBackgroundPath)

        /**
         * 设置一键登录loading背景
         * @param loadingBackgroundDrawable
         * @return
         */
        public FusionNumberAuthModel.Builder setLoadingBackgroundDrawable(Drawable loadingBackgroundDrawable)

        /**
         * 设置顶部导航栏标题内容
         *
         * @param navText
         * @return
         */
        public FusionNumberAuthModel.Builder setNavText(String navText)

        /**
         * 设置顶部导航栏标题颜色
         *
         * @param navTextColor
         * @return
         */
        public FusionNumberAuthModel.Builder setNavTextColor(@ColorInt int navTextColor)

        /**
         * 运营商协议指定显示顺序,默认0,即第1个协议显示,最大值可为3,即第4个协议显示
         *
         * @param privacyOperatorIndex
         * @return
         */

        public FusionNumberAuthModel.Builder setPrivacyOperatorIndex(@IntRange(from = 0, to = 3) int privacyOperatorIndex)
        /**
         * 协议名称之间连接字符串数组,默认 ["和","、","、"] ,即第一个为"和",其他为"、",按顺序读取,为空则取默认
         *
         * @param privacyConectTexts
         * @return
         */
        public FusionNumberAuthModel.Builder setPrivacyConectTexts(String[] privacyConectTexts)

        /**
         * 设置顶部导航栏返回按钮的图片缩放类型
         *
         * @param navReturnScaleType
         * @return
         */
        public FusionNumberAuthModel.Builder setNavReturnScaleType(ImageView.ScaleType navReturnScaleType) 
        /**
         * 设置Logo图片路径,目前只支持drawable资源文件
         *
         * @param LogoImgPath drawable资源的目录,不需要加后缀,比如图片在drawable中的存放目录是res/drawable-xxhdpi/Logo.png,则传入参数为
         *                    "Logo",即setLogoImgPath("Logo")。
         * @return
         */
        public FusionNumberAuthModel.Builder setLogoImgPath(String LogoImgPath)
        /**
         * 设置Logo是否隐藏
         *
         * @param LogoHidden
         * @return
         */
        public FusionNumberAuthModel.Builder setLogoHidden(boolean LogoHidden) 

        /**
         * 设置手机号掩码颜色
         *
         * @param numberColor
         * @return
         */
        public FusionNumberAuthModel.Builder setNumberColor(@ColorInt int numberColor)

        /**
         * 设置手机号字体大小
         *
         * @param numberSize 单位 sp
         * @return
         */
        @Deprecated
        public FusionNumberAuthModel.Builder setNumberSize(int numberSize)

        /**
         * 设置手机号字体大小
         *
         * @param numberSize 单位 dp
         * @return
         */
        public FusionNumberAuthModel.Builder setNumberSizeDp(int numberSize)

        /**
         * 设置"切换登录方式"控件是否隐藏
         *
         * @param switchAccHidden
         * @return
         */
        public FusionNumberAuthModel.Builder setSwitchAccHidden(boolean switchAccHidden)

        /**
         * 设置"切换登录方式"控件字体颜色
         *
         * @param switchAccTextColor
         * @return
         */
        public FusionNumberAuthModel.Builder setSwitchAccTextColor(@ColorInt int switchAccTextColor)
        /**
         * 设置登录按钮文本内容
         *
         * @param logBtnText
         * @return
         */
        public FusionNumberAuthModel.Builder setLogBtnText(String logBtnText)

        /**
         * 设置登录按钮文字颜色
         *
         * @param logBtnTextColor
         * @return
         */
        public FusionNumberAuthModel.Builder setLogBtnTextColor(@ColorInt int logBtnTextColor)

        /**
         * 设置登录按钮字体大小
         *
         * @param logBtnTextSize 单位 sp
         * @return
         */
        @Deprecated
        public FusionNumberAuthModel.Builder setLogBtnTextSize(int logBtnTextSize)

        /**
         * 设置登录按钮字体大小
         *
         * @param logBtnTextSize 单位 dp
         * @return
         */
        public FusionNumberAuthModel.Builder setLogBtnTextSizeDp(int logBtnTextSize)
        /**
         * 自定义第一个隐私协议,最多允许添加2个自定义隐私协议
         *
         * @param name 协议名称
         * @param url  协议页面的URL
         * @return
         */
        public FusionNumberAuthModel.Builder setAppPrivacyOne(String name, String url)

        /**
         * 自定义第一个隐私协议,最多允许添加2个自定义隐私协议
         *
         * @param name 协议名称
         * @param url  协议页面的URL
         * @return
         */
        public FusionNumberAuthModel.Builder setAppPrivacyTwo(String name, String url)

        /**
         * 自定义第3个隐私协议,最多允许添加2个自定义隐私协议
         *
         * @param name 协议名称
         * @param url  协议页面的URL
         * @return
         */
        public FusionNumberAuthModel.Builder setAppPrivacyThree(String name, String url)
        /**
         * 自定义隐私协议文字颜色,运营商协议以及自定义协议都会使用该颜色。
         *
         * @param baseColor     隐私内容非协议名称部分的文字颜色
         * @param protocolColor 隐私内容协议名称部分的文字颜色
         * @return
         */
        public FusionNumberAuthModel.Builder setAppPrivacyColor(@ColorInt int baseColor, @ColorInt int protocolColor)
        /**
         * 设置slogan文字颜色
         *
         * @param sloganTextColor
         * @return
         */
        public FusionNumberAuthModel.Builder setSloganTextColor(@ColorInt int sloganTextColor)

        /**
         * 设置登录按钮背景图片路径
         *
         * @param logBtnBackgroundPath drawable资源的目录,不需要加后缀,比如图片在drawable中的存放目录是res/drawable-xxhdpi/logBtn.png,则传入参数为
         *                             "logBtn",即setLogBtnBackgroundPath("logBtn")。
         * @return
         */
        public FusionNumberAuthModel.Builder setLogBtnBackgroundPath(String logBtnBackgroundPath)

        /**
         * 设置导航栏返回按钮图片路径
         *
         * @param navReturnImgPath drawable资源的目录,不需要加后缀,比如图片在drawable中的存放目录是res/drawable-xxhdpi/return.png,则传入参数为
         *                         "return",即setNavReturnImgPath("return")。
         * @return
         */
        public FusionNumberAuthModel.Builder setNavReturnImgPath(String navReturnImgPath)

        /**
         * 设置slogan距离顶部导航栏的距离,如果设置了该属性,则{@link #setSloganOffsetY_B(int)}将无效
         *
         * @param sloganOffsetY 单位dp
         * @return
         * @see #setSloganOffsetY_B(int)
         */
        public FusionNumberAuthModel.Builder setSloganOffsetY(int sloganOffsetY) 

        /**
         * 设置Logo距离顶部导航栏的距离,如果设置了该属性,则{@link #setLogoOffsetY_B(int)}将无效
         *
         * @param LogoOffsetY 单位dp
         * @return
         * @see #setLogoOffsetY_B(int)
         */
        public FusionNumberAuthModel.Builder setLogoOffsetY(int LogoOffsetY)

        /**
         * 设置Logo距离父view底部的距离
         *
         * @param LogoOffsetY_B 单位dp
         * @return
         * @see #setLogoOffsetY(int)
         */
        public FusionNumberAuthModel.Builder setLogoOffsetY_B(int LogoOffsetY_B)

        /**
         * 设置手机号掩码距离顶部导航栏的距离,如果设置了该属性,则{@link #setNumFieldOffsetY_B(int)}将无效
         *
         * @param numFieldOffsetY 单位dp
         * @return
         * @see {@link #setNumFieldOffsetY_B(int)}
         */
        public FusionNumberAuthModel.Builder setNumFieldOffsetY(int numFieldOffsetY)

        /**
         * 设置手机号掩码距离父view底部的距离
         *
         * @param numFieldOffsetY_B 单位dp
         * @return
         * @see #setNumFieldOffsetY(int)
         */
        public FusionNumberAuthModel.Builder setNumFieldOffsetY_B(int numFieldOffsetY_B)

        /**
         * 设置切换登录方式控件距离顶部导航栏的距离,如果设置了该属性,则{@link #setSwitchOffsetY_B(int)}将无效
         *
         * @param switchOffsetY 单位dp
         * @return
         * @see #setSwitchOffsetY_B(int)
         */
        public FusionNumberAuthModel.Builder setSwitchOffsetY(int switchOffsetY)
        /**
         * 设置切换登录方式控件距离父view底部的距离
         *
         * @param switchOffsetY_B 单位dp
         * @return
         * @see #setSwitchOffsetY(int)
         */
        public FusionNumberAuthModel.Builder setSwitchOffsetY_B(int switchOffsetY_B)

        /**
         * 设置登录按钮距离顶部导航栏的距离,如果设置了该属性,则{@link #setLogBtnOffsetY_B(int)}将无效
         *
         * @param logBtnOffsetY 单位dp
         * @return
         * @see #setLogBtnOffsetY_B(int)
         */
        public FusionNumberAuthModel.Builder setLogBtnOffsetY(int logBtnOffsetY) 

        /**
         * 设置登录按钮距离父view底部的距离
         *
         * @param logBtnOffsetY_B 单位dp
         * @return
         * @see #setLogBtnOffsetY(int)
         */
        public FusionNumberAuthModel.Builder setLogBtnOffsetY_B(int logBtnOffsetY_B)

        /**
         * 设置隐私协议距离顶部导航栏的距离,如果设置了该属性,则{@link #setPrivacyOffsetY_B(int)}将无效
         *
         * @param privacyOffsetY 单位dp
         * @return
         * @see #setPrivacyOffsetY_B(int)
         */
        public FusionNumberAuthModel.Builder setPrivacyOffsetY(int privacyOffsetY)

        /**
         * 设置隐私协议距离父view底部的距离
         *
         * @param privacyOffsetY_B 单位dp
         * @return
         * @see #setPrivacyOffsetY(int)
         */
        public FusionNumberAuthModel.Builder setPrivacyOffsetY_B(int privacyOffsetY_B)

        /**
         * 设置slogan距离父view底部的距离
         *
         * @param sloganOffsetY_B 单位dp
         * @return
         * @see #setSloganOffsetY(int)
         */
        public FusionNumberAuthModel.Builder setSloganOffsetY_B(int sloganOffsetY_B)

        /**
         * 设置slogan文本内容
         *
         * @param sloganText
         * @return
         */
        public FusionNumberAuthModel.Builder setSloganText(String sloganText)

        /**
         * 设置隐私协议的勾选按钮是否隐藏
         *
         * @param checkboxHidden
         * @return
         */
        public FusionNumberAuthModel.Builder setCheckboxHidden(boolean checkboxHidden)
        /**
         * 设置顶部导航栏文字大小
         *
         * @param navTextSize 单位 sp
         * @return
         */
        @Deprecated
        public FusionNumberAuthModel.Builder setNavTextSize(int navTextSize)

        /**
         * 设置顶部导航栏文字大小
         *
         * @param navTextSize 单位 dp
         * @return
         */
        public FusionNumberAuthModel.Builder setNavTextSizeDp(int navTextSize)
        /**
         * 设置Logo控件的宽
         *
         * @param LogoWidth 单位dp
         * @return
         */
        public FusionNumberAuthModel.Builder setLogoWidth(int LogoWidth)

        /**
         * 设置Logo控件的高
         *
         * @param LogoHeight 单位dp
         * @return
         */
        public FusionNumberAuthModel.Builder setLogoHeight(int LogoHeight)

        /**
         * 设置切换登录方式控件的文字大小
         *
         * @param switchAccTextSize 单位 sp
         * @return
         */
        @Deprecated
        public FusionNumberAuthModel.Builder setSwitchAccTextSize

        /**
         * 设置切换登录方式控件的文字大小
         *
         * @param switchAccTextSize 单位 dp
         * @return
         */
        public FusionNumberAuthModel.Builder setSwitchAccTextSizeDp(int switchAccTextSize) 

        /**
         * 设置切换登录方式控件的文本内容
         *
         * @param switchAccText
         * @return
         */
        public FusionNumberAuthModel.Builder setSwitchAccText(String switchAccText)

        /**
         * 设置slogan文字大小
         *
         * @param sloganTextSize 单位 dp
         * @return
         */
        public FusionNumberAuthModel.Builder setSloganTextSizeDp(int sloganTextSize)

        /**
         * 设置slogan是否隐藏
         *
         * @param sloganHidden
         * @return
         */
        public FusionNumberAuthModel.Builder setSloganHidden(boolean sloganHidden)

        /**
         * 设置隐私协议勾选框未勾选状态时显示时图片的路径
         *
         * @param uncheckedImgPath drawable资源的目录,不需要加后缀,比如图片在drawable中的存放目录是res/drawable-xxhdpi/unchecked.png,则传入参数为
         *                         "unchecked",即setUncheckedImgPath("unchecked")。
         * @return
         */
        public FusionNumberAuthModel.Builder setUncheckedImgPath(String uncheckedImgPath) {
            this.uncheckedImgPath = uncheckedImgPath;
            return this;
        }

        /**
         * 设置隐私协议勾选框已勾选状态时显示的图片的路径
         *
         * @param checkedImgPath drawable资源的目录,不需要加后缀,比如图片在drawable中的存放目录是res/drawable-xxhdpi/checked.png,则传入参数为
         *                       "checked",即setCheckedImgPath("checked")。
         * @return
         */
        public FusionNumberAuthModel.Builder setCheckedImgPath(String checkedImgPath)

        /**
         * 设置隐私协议勾选框初始状态(勾选或者未勾选)
         *
         * @param privacyState true初始时勾选,false初始时不勾选
         * @return
         */
        public FusionNumberAuthModel.Builder setPrivacyState(boolean privacyState)

        /**
         * 设置隐私协议文字对齐方式
         *
         * @param protocolGravity
         * @return
         * @see #setProtocolLayoutGravity(int)
         */
        public FusionNumberAuthModel.Builder setProtocolGravity(int protocolGravity)

        /**
         * 设置状态栏颜色(系统版本 5.0 以上可设置)
         *
         * @param statusBarColor
         * @return
         */
        public FusionNumberAuthModel.Builder setStatusBarColor(@ColorInt int statusBarColor)

        /**
         * 设置状态栏颜色(系统版本 5.0 以上可设置)
         *
         * @param bottomNavColor
         * @return
         */
        public FusionNumberAuthModel.Builder setBottomNavColor(@ColorInt int bottomNavColor)
        /**
         * 设置状态栏字体颜色(系统版本 6.0 以上可设置黑色、白色)
         *
         * @param lightColor true 为黑色,false为白色
         * @return
         */
        public FusionNumberAuthModel.Builder setLightColor(boolean lightColor)

        /**
         * 设置登录按钮宽度
         *
         * @param logBtnWidth 单位 dp
         * @return
         */
        public FusionNumberAuthModel.Builder setLogBtnWidth(int logBtnWidth)
        /**
         * 设置登录按钮高度
         *
         * @param logBtnHeight 单位dp
         * @return
         */
        public FusionNumberAuthModel.Builder setLogBtnHeight(int logBtnHeight)

        /**
         * 设置登录按钮相对于屏幕左右边缘边距
         *
         * @param logBtnMarginLeftAndRight 单位dp
         * @return
         */
        public FusionNumberAuthModel.Builder setLogBtnMarginLeftAndRight(int logBtnMarginLeftAndRight)

        /**
         * 设置隐私协议勾选框的宽
         *
         * @param checkBoxWidth 单位dp
         * @return
         */
        public FusionNumberAuthModel.Builder setCheckBoxWidth(int checkBoxWidth)
        /**
         * 设置隐私协议勾选宽的高
         *
         * @param checkBoxHeight 单位dp
         * @return
         */
        public FusionNumberAuthModel.Builder setCheckBoxHeight(int checkBoxHeight)

        /**
         * 设置号码栏相对于默认位置的X 轴偏移量
         *
         * @param numberFieldOffsetX 单位dp
         * @return
         */
        public FusionNumberAuthModel.Builder setNumberFieldOffsetX(int numberFieldOffsetX)

        /**
         * 设置隐私条款文字大小
         *
         * @param privacyTextSize 单位sp
         * @return
         */
        public FusionNumberAuthModel.Builder setPrivacyTextSize(int privacyTextSize)
        /**
         * 设置隐私条款文字大小
         *
         * @param privacyTextSize 单位dp
         * @return
         */
        public FusionNumberAuthModel.Builder setPrivacyTextSizeDp(int privacyTextSize)

        /**
         * 设置导航栏返回按钮图片宽度
         *
         * @param navReturnImgWidth 单位dp
         * @return
         */
        public FusionNumberAuthModel.Builder setNavReturnImgWidth(int navReturnImgWidth)

        /**
         * 设置导航栏返回按钮图片高度
         *
         * @param navReturnImgHeight 单位dp
         * @return
         */
        public FusionNumberAuthModel.Builder setNavReturnImgHeight(int navReturnImgHeight)

        /**
         * 设置隐私条款距离手机左右边缘的边距
         *
         * @param privacyMargin 单位dp
         * @return
         */
        public FusionNumberAuthModel.Builder setPrivacyMargin(int privacyMargin)
        /**
         * 设置开发者隐私条款前置自定义文案
         *
         * @param privacyBefore
         * @return
         */
        public FusionNumberAuthModel.Builder setPrivacyBefore(String privacyBefore)

        /**
         * 设置开发者隐私条款尾部自定义文案
         *
         * @param privacyEnd
         * @return
         */
        public FusionNumberAuthModel.Builder setPrivacyEnd(String privacyEnd) 

        /**
         * 设置登录loading动画图片路径
         *
         * @param loadingImgPath drawable资源的目录,不需要加后缀,比如图片在drawable中的存放目录是res/drawable-xxhdpi/loading.png,则传入参数为
         *                       "loading",即setLoadingImgPath("loading")。
         * @return Builder
         */
        public FusionNumberAuthModel.Builder setLoadingImgPath(String loadingImgPath) 

        /**
         * 设置授权页宽度
         *
         * @param dialogWidth 授权页宽度 单位DP
         * @return Builder
         */
        public FusionNumberAuthModel.Builder setDialogWidth(int dialogWidth)

        /**
         * 设置授权页高度
         *
         * @param dialogHeight 授权页高度 单位DP
         * @return Builder
         */
        public FusionNumberAuthModel.Builder setDialogHeight(int dialogHeight) 

        /**
         * 设置授权页X轴偏移
         *
         * @param dialogOffsetX 授权页X轴偏移量 单位DP
         * @return Builder
         */
        public FusionNumberAuthModel.Builder setDialogOffsetX(int dialogOffsetX)

        /**
         * 设置授权页Y轴偏移
         *
         * @param dialogOffsetY 授权页Y轴偏移量 单位DP
         * @return Builder
         */
        public FusionNumberAuthModel.Builder setDialogOffsetY(int dialogOffsetY)

        /**
         * @param dialogBottom 设置授权页是否居于底部
         * @return Builder
         */
        public FusionNumberAuthModel.Builder setDialogBottom(boolean dialogBottom) 
        /**
         * 设置授权页背景图
         *
         * @param pageBackgroundPath drawable资源的目录,不需要加后缀,比如图片在drawable中的存放目录是res/drawable-xxhdpi/loading.png,则传入参数为
         *                           "loading",setPageBackgroundPath("loading")。
         * @return Builder
         */
        public FusionNumberAuthModel.Builder setPageBackgroundPath(String pageBackgroundPath)

        /**
         * 设置导航栏返回按钮隐藏
         *
         * @param navReturnHidden true:隐藏,false显示
         * @return Builder
         */
        public FusionNumberAuthModel.Builder setNavReturnHidden(boolean navReturnHidden)

        /**
         * 设置默认导航栏是否隐藏
         *
         * @param navHidden true:隐藏,false显示
         * @return Builder
         */
        public FusionNumberAuthModel.Builder setNavHidden(boolean navHidden)
        /**
         * 设置Logo图片缩放模式
         *
         * @param LogoScaleType
         * @return
         */
        public FusionNumberAuthModel.Builder setLogoScaleType(ImageView.ScaleType LogoScaleType)

        /**
         * 设置状态栏是否隐藏
         *
         * @param statusBarHidden true:隐藏,false显示
         * @return
         */
        public FusionNumberAuthModel.Builder setStatusBarHidden(boolean statusBarHidden)

        /**
         * 设置状态栏UI属性
         *
         * @param statusBarUIFlag 只能设置{@link android.view.View#SYSTEM_UI_FLAG_LOW_PROFILE}和{@link
         *                        android.view.View#SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN}
         *                        状态栏低电量模式:View.SYSTEM_UI_FLAG_LOW_PROFILE
         *                        状态栏沉浸式模式:View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
         * @return Builder
         */
        public FusionNumberAuthModel.Builder setStatusBarUIFlag(@StatusBarUIFlag int statusBarUIFlag)
        /**
         * 设置协议页状态栏颜色(系统版本 5.0 以上可设置)
         * 不设置则与授权页设置一致
         *
         * @param webViewStatusBarColor
         * @return
         */
        public FusionNumberAuthModel.Builder setWebViewStatusBarColor(@ColorInt int webViewStatusBarColor) 
        

        /**
         * 设置协议页顶部导航栏背景色
         * 不设置则与授权页设置一致
         *
         * @param webNavColor
         * @return
         */
        public FusionNumberAuthModel.Builder setWebNavColor(@ColorInt int webNavColor)

        /**
         * 设置协议页顶部导航栏标题颜色
         * 不设置则与授权页设置一致
         *
         * @param webNavTextColor
         * @return
         */
        public FusionNumberAuthModel.Builder setWebNavTextColor(@ColorInt int webNavTextColor)

        /**
         * 设置协议页顶部导航栏文字大小
         * 不设置则与授权页设置一致
         *
         * @param webNavTextSize 单位 sp
         * @return
         */
        @Deprecated
        public FusionNumberAuthModel.Builder setWebNavTextSize(int webNavTextSize)
        /**
         * 设置协议页顶部导航栏文字大小
         * 不设置则与授权页设置一致
         *
         * @param webNavTextSize 单位 sp
         * @return
         */
        public FusionNumberAuthModel.Builder setWebNavTextSizeDp(int webNavTextSize)

        /**
         * 设置协议页导航栏返回按钮图片路径
         * 不设置则与授权页设置一致
         *
         * @param webNavReturnImgPath drawable资源的目录,不需要加后缀,比如图片在drawable中的存放目录是res/drawable-xxhdpi/return.png,则传入参数为
         *                            "return",即setNavReturnImgPath("return")。
         * @return
         */
        public FusionNumberAuthModel.Builder setWebNavReturnImgPath(String webNavReturnImgPath)
        /**
         * 设置授权页唤起动画
         *
         * @param authPageActIn anim资源的目录,不需要加后缀,比如动画在anim目录中的存放目录是res/anim/authPageActIn.xml,则传入参数为
         *                      "authPageActIn",setAuthPageActIn("authPageActIn", "activityOut")。
         * @param activityOut
         * @return
         */
        public FusionNumberAuthModel.Builder setAuthPageActIn(String authPageActIn, String activityOut)

        /**
         * 设置授权页退出动画
         *
         * @param authPageActOut anim资源的目录,不需要加后缀,比如动画在anim目录中的存放目录是res/anim/authPageActIn.xml,则传入参数为
         *                       "authPageActIn",setAuthPageActIn("authPageActIn", "activityOut")。
         * @param activityIn
         * @return
         */
        public FusionNumberAuthModel.Builder setAuthPageActOut(String authPageActOut, String activityIn) 


        /**
         * 设置协议选择框未勾选时点击登录按钮协议文字动画效果
         *
         * @param protocolShakePath anim资源的目录,不需要加后缀,比如动画在anim目录中的存放目录是res/anim/protocol_shake.xml,则传入参数为
         *                      "authPageActIn",setAuthPageActIn("authPageActIn", "activityOut")。
         * @param
         * @return
         */
        public FusionNumberAuthModel.Builder setProtocolShakePath(String protocolShakePath) 
        /**
         * 设置运营商协议前缀符号
         *
         * @param vendorPrivacyPrefix 只能设置一个字符,且只能设置<>()《》【】『』[]()中的一个
         * @return
         */
        public FusionNumberAuthModel.Builder setVendorPrivacyPrefix(String vendorPrivacyPrefix) {
            this.vendorPrivacyPrefix = vendorPrivacyPrefix;
            return this;
        }

        /**
         * 设置运营商协议后缀符号
         *
         * @param vendorPrivacySuffix 只能设置一个字符,且只能设置<>()《》【】『』[]()中的一个
         * @return
         */
        public FusionNumberAuthModel.Builder setVendorPrivacySuffix(String vendorPrivacySuffix) 
        /**
         * 设置屏幕方向
         *
         * @param screenOrientation 取值为{@link ActivityInfo}中的屏幕方向常量值,比如
         *                          {@link ActivityInfo#SCREEN_ORIENTATION_LANDSCAPE}、
         *                          {@link ActivityInfo#SCREEN_ORIENTATION_PORTRAIT}
         * @return
         */
        public FusionNumberAuthModel.Builder setScreenOrientation(@ScreenOrientation int screenOrientation)

        /**
         * 设置登录按钮X轴偏移量,如果设置了{@link #setLogBtnMarginLeftAndRight(int)},并且布局对齐方式为左对齐或者右对齐
         * ,则会在margin的基础上再增加offsetX的偏移量,如果是居中对齐,则仅仅会在居中的基础上再做offsetX的偏移。
         *
         * @param offsetX 单位 dp
         * @return
         */
        public FusionNumberAuthModel.Builder setLogBtnOffsetX(int offsetX)
        /**
         * 设置登录按钮布局对齐方式
         *
         * @param layoutGravity 只支持{@link Gravity#CENTER_HORIZONTAL}、{@link Gravity#LEFT}、{@link Gravity#RIGHT}三种对齐方式
         * @return
         */
        public FusionNumberAuthModel.Builder setLogBtnLayoutGravity(int layoutGravity)

        /**
         * 设置手机号掩码的布局对齐方式
         *
         * @param layoutGravity 只支持{@link Gravity#CENTER_HORIZONTAL}、{@link Gravity#LEFT}、{@link Gravity#RIGHT}三种对齐方式
         * @return
         */
        public FusionNumberAuthModel.Builder setNumberLayoutGravity(int layoutGravity)

        /**
         * 设置隐私栏的布局对齐方式,该接口控制了整个隐私栏(包含checkbox)在其父布局中的对齐方式,而{@link #setProtocolGravity(int)}控制的
         * 是隐私协议文字内容在文本框中的对齐方式。
         *
         * @param layoutGravity 只支持{@link Gravity#CENTER_HORIZONTAL}、{@link Gravity#LEFT}、{@link Gravity#RIGHT}三种对齐方式
         * @return
         */
        public FusionNumberAuthModel.Builder setProtocolLayoutGravity(int layoutGravity)

        /**
         * 设置隐私栏X轴偏移量
         *
         * @param offsetX 单位dp
         * @return
         */
        public FusionNumberAuthModel.Builder setPrivacyOffsetX(int offsetX)

        public FusionNumberAuthModel.Builder setHiddenLoading(boolean hiddenLoading)

        /**
         * 设置checkbox未勾选时,点击登录按钮toast是否显示
         *
         * @param logBtnToastHidden
         * @return
         */
        public FusionNumberAuthModel.Builder setLogBtnToastHidden(boolean logBtnToastHidden)

        public FusionNumberAuthModel.Builder setWebSupportedJavascript(boolean isSupported) 
        //设置返回按钮图片
        public FusionNumberAuthModel.Builder setNavReturnImgDrawable(Drawable navReturnImgDrawable) 
        
        //设置Logo图片
        public FusionNumberAuthModel.Builder setLogoImgDrawable(Drawable LogoImgDrawable)
        //设置checkbox非选择状态图片
        public FusionNumberAuthModel.Builder setUncheckedImgDrawable(Drawable uncheckedImgDrawable)
        //设置checkbox选择状态图片
        public FusionNumberAuthModel.Builder setCheckedImgDrawable(Drawable checkedImgDrawable)
        //设置一键登录按钮背景图片
        public FusionNumberAuthModel.Builder setLogBtnBackgroundDrawable(Drawable logBtnBackgroundDrawable)
        //设置界面背景图
        public FusionNumberAuthModel.Builder setPageBackgroundDrawable(Drawable pageBackgroundDrawable)
       //loading背景图
        public FusionNumberAuthModel.Builder setLoadingImgDrawable(Drawable loadingImgDrawable)

       //号码认证二次弹窗是否显示
        public FusionNumberAuthModel.Builder setPrivacyAlertIsNeedShow(boolean privacyAlertIsNeedShow)
        //二次弹窗同意后是否自动登录
        public FusionNumberAuthModel.Builder setPrivacyAlertIsNeedAutoLogin(boolean privacyAlertIsNeedAutoLogin)
        //二次弹窗点击窗外区域弹窗是否消失
        public FusionNumberAuthModel.Builder setTapPrivacyAlertMaskCloseAlert(boolean tapPrivacyAlertMaskCloseAlert)
        //二次弹窗显示位置
        public FusionNumberAuthModel.Builder setPrivacyAlertAlignment(int privacyAlertAlignment)
        //二次弹窗宽度
        public FusionNumberAuthModel.Builder setPrivacyAlertWidth(int privacyAlertWidth)
       //二次弹窗高度
        public FusionNumberAuthModel.Builder setPrivacyAlertHeight(int privacyAlertHeight)
        //二次弹窗显示x轴
        public FusionNumberAuthModel.Builder setPrivacyAlertOffsetX(int privacyAlertOffsetX)
         //二次弹窗显示y轴
        public FusionNumberAuthModel.Builder setPrivacyAlertOffsetY(int privacyAlertOffsetY)
        //二次弹窗开始动画
        public FusionNumberAuthModel.Builder setPrivacyAlertEntryAnimation(String privacyAlertEntryAnimation)
        //二次弹窗退出动画
        public FusionNumberAuthModel.Builder setPrivacyAlertExitAnimation(String privacyAlertExitAnimation)
        //二次弹窗圆角
        public FusionNumberAuthModel.Builder setPrivacyAlertCornerRadiusArray(int[] privacyAlertCornerRadiusArray)
        //二次弹窗背景颜色
        public FusionNumberAuthModel.Builder setPrivacyAlertBackgroundColor(int privacyAlertBackgroundColor)
        //二次弹窗title背景颜色
        public FusionNumberAuthModel.Builder setPrivacyAlertTitleBackgroundColor(int privacyAlertTitleBackgroundColor)
        //二次弹窗文本显示背景颜色
        public FusionNumberAuthModel.Builder setPrivacyAlertContentBackgroundColor(int privacyAlertContentBackgroundColor)
        //二次弹窗透明度
        public FusionNumberAuthModel.Builder setPrivacyAlertAlpha(float privacyAlertAlpha)
        //二次弹窗背景蒙层透明度
        public FusionNumberAuthModel.Builder setPrivacyAlertMaskAlpha(float privacyAlertMaskAlpha)


        //二次弹窗title字体大小
        public FusionNumberAuthModel.Builder setPrivacyAlertTitleTextSize(int privacyAlertTitleTextSize)
        //二次弹窗title 字体颜色
        public FusionNumberAuthModel.Builder setPrivacyAlertTitleColor(int privacyAlertTitleColor)
        //二次弹窗title文字居中方式
        public FusionNumberAuthModel.Builder setPrivacyAlertTitleAlignment(int privacyAlertTitleAlignment)
        //二次弹窗title x坐标
        public FusionNumberAuthModel.Builder setPrivacyAlertTitleOffsetX(int privacyAlertTitleOffsetX)
        //二次弹窗title y坐标
        public FusionNumberAuthModel.Builder setPrivacyAlertTitleOffsetY(int privacyAlertTitleOffsetY)

       //二次弹窗文本协议颜色
        public FusionNumberAuthModel.Builder setPrivacyAlertContentTextSize(int privacyAlertContentTextSize)
        //二次弹窗文本颜色
        public FusionNumberAuthModel.Builder setPrivacyAlertContentColor(int privacyAlertContentColor)
        //二次弹窗文本颜色
        public FusionNumberAuthModel.Builder setPrivacyAlertContentBaseColor(int privacyAlertContentBaseColor)
        //二次弹窗文本居中方式
        public FusionNumberAuthModel.Builder setPrivacyAlertContentAlignment(int privacyAlertContentAlignment)
        //二次弹窗文本显示位置左右间距
        public FusionNumberAuthModel.Builder setPrivacyAlertContentHorizontalMargin(int privacyAlertContentHorizontalMargin)
        //二次弹窗文本显示位置上下间距
        public FusionNumberAuthModel.Builder setPrivacyAlertContentVerticalMargin(int privacyAlertContentVerticalMargin)
       //二次弹窗背景路径
        public FusionNumberAuthModel.Builder setPrivacyAlertBtnBackgroundImgPath(String privacyAlertBtnBackgroundImgPath)
        //二次弹窗确认按钮字体颜色
        public FusionNumberAuthModel.Builder setPrivacyAlertBtnTextColor(int privacyAlertBtnTextColor)
        //二次弹窗确认按钮字体颜色路径
        public FusionNumberAuthModel.Builder setPrivacyAlertBtnTextColorPath(String privacyAlertBtnTextColorPath)
        //二次弹窗确认按钮字体大小
        public FusionNumberAuthModel.Builder setPrivacyAlertBtnTextSize(int privacyAlertBtnTextSize) 
        //二次弹窗背景
        public FusionNumberAuthModel.Builder setPrivacyAlertBtnBackgroundImgDrawable(Drawable privacyAlertBtnBackgroundImgDrawable)
        //二次弹窗按钮宽度
        public FusionNumberAuthModel.Builder setPrivacyAlertBtnWidth(int privacyAlertBtnWidth) 
        //二次弹窗按钮高度
        public FusionNumberAuthModel.Builder setPrivacyAlertBtnHeigth(int privacyAlertBtnHeigth)
        //关闭按钮是否显示
        public FusionNumberAuthModel.Builder setPrivacyAlertCloseBtnShow(boolean privacyAlertCloseBtnShow) 
        //关闭按钮图片路径
        public FusionNumberAuthModel.Builder setPrivacyAlertCloseImagPath(String privacyAlertCloseImagPath)
        //关闭按钮图片显示方式
        public FusionNumberAuthModel.Builder setPrivacyAlertCloseScaleType(ImageView.ScaleType privacyAlertCloseScaleType)
        //关闭按钮图片
        public FusionNumberAuthModel.Builder setPrivacyAlertCloseImagDrawable (Drawable privacyAlertCloseImagDrawable)
        //关闭按钮宽度
        public FusionNumberAuthModel.Builder setPrivacyAlertCloseImgWidth(int privacyAlertCloseImgWidth) 
       //关闭按钮高度
        public FusionNumberAuthModel.Builder setPrivacyAlertCloseImgHeight(int privacyAlertCloseImgHeight) 
        //背景蒙层是否显示
        public FusionNumberAuthModel.Builder setPrivacyAlertMaskIsNeedShow(boolean privacyAlertMaskIsNeedShow) 
    }
}

短信认证自定义UI参数

 public class AlicomFusionVerifyCodeView {   
     //顶部title区域
    private RelativeLayout titleRl;
    //返回按钮
    private ImageView returnImg;
    //标题文本框
    private TextView titleContentTV;
    //自动填充手机号区域
    private AlicomFusionAutoInputView autoInputView;
    //手动输入手机号区域
    private AlicomFusionInputView inputView;
    //输入及发送验证码区域
    private AlicomFusionSendVerifyCodeView sendVerifyCodeView;
 //获取验证码
 public void verifyCodeBtnClick(String phoneNumber)
//校验验证码
public void submitVerifyCodeBtnClick(String phoneNumber,String code)
}

自动填充手机号区域

public class AlicomFusionAutoInputView {
 /**自动填充布局上方显示手机号及提示信息*/
 private RelativeLayout autoInputMsgRL;
 /**自动填充布局手机号展示*/
 private TextView autoInputPhoneNumTV;
 /**自动填充布局提示信息*/
 private TextView autoInputPhoneHintTV;
 /**自动填充布局获取验证码*/
 private TextView autoInputRequestCodeTV;
}

手动输入手机号区域

public class AlicomFusionInputView {
 /**国家号及手机号输入框区域*/
 private RelativeLayout inputNumberContentRL;
 /**国家号*/
 private TextView mCountryTV;
 /**手机号输入框*/
 private EditText inputNumberET;
 /**手动输入手机号布局获取验证码*/
 private TextView inputNumberRequestCodeTV;
 /**协议区域*/
 private RelativeLayout privacyRL;
 /**协议复选框*/
 private CheckBox agreePrivacy;
 /**协议文本*/
 private TextView privacyTV;
 }

输入及发送验证码区域

public class AlicomFusionSendVerifyCodeView {
/**提示信息*/
 private TextView sendSmsHint;
/**验证码输入区域*/
 private RelativeLayout sendSmsCodeRL;
/**第⼀位验证码*/
 private EditText firstCode;
/**第⼆位验证码*/
 private EditText secondCode;
/**第三位验证码*/
 private EditText thirdCode;
/**第四位验证码*/
 private EditText fourCode;
/**第五位验证码*/
 private EditText fivthCode;
/**第六位验证码*/
 private EditText sixthCode;
/**发送验证码按钮*/
 private TextView sendSmsCode;
}

上行短信认证自定义UI

public class AlicomFusionUpSMSView {
 //上行短信界面顶部导航区域
 private RelativeLayout titleRl;
 //返回按钮
 private ImageView returnImg;
 //title文本
 private TextView titleContentTV;
 //提示信息区域
 private RelativeLayout remindRl;
 //提示信息文本框
 private TextView smsRemindTV;
 //短信内容区域
 private RelativeLayout smsContentRl;
 //短信内容文本框
 private TextView smsContentTV;
 //接收号码区域
 private RelativeLayout receiveSmsNumberRl;
 //接收号码文本框
 private TextView receiveSmsNumberTV;
 //⽴即发送短信按钮
 private TextView sendSmsTV;
 //我⼀发送短信按钮
 private TextView HadSenTSmsTV;
 //发送短信
 public void gotoSendUpSms(String receivePhoneNumber,String verifyCode
)
 //发送短信校验
 public void upSmsAlreadySend()
}

SDK回调说明

主流程回调(AlicomFusionAuthCallBack

  • 流程各个节点运行状态都通过回调来通知用户。

  • 用户在收到相应回调前属于节点运行状态,此状态下startSceneWithTemplateId、continueSceneWithTemplateId、stopSceneWithTemplateId调用无效。

  /**
     *  token需要更新只在超时调用获取
     *  @note 必选回调,handler初始化&历史Token过期前5分钟,会触发此回调,由SDK维护token的生命周期
     *  @return token,APP更新最新token后,组装Token返回给到SDK,SDK会通过此Token进行鉴权更新
     *  用户可在此处进行token获取,两次请求,每次30s,60s后无法获取会报token获取超时
     */
    AlicomFusionAuthToken onSDKTokenUpdate();
    /**
     *  token鉴权成功
     *  @note 必选回调,token鉴权成功后,才可以使用startScene接口拉起场景
     *  @note 不建议在本回调中直接调用startScene接口,本回调跟随token鉴权事件触发,可能存在多次回调
     *  startSceneWithTemplateId开始场景必须在该回调后进行,具体逻辑参考demo
     */
    void onSDKTokenAuthSuccess();
    /**
     *  token鉴权失败
     *  @note 必选回调,token初次鉴权失败&token更新后鉴权失败均会触发此回调
     *  @note token鉴权失败后,无法继续使用SDK的功能,请销毁SDK后重新初始化
     *  @param failToken 错误token
     *  @param error 错误定义
     */
    void onSDKTokenAuthFailure(AlicomFusionAuthToken failToken, AlicomFusionEvent error);
    /**
     *  认证成功
     *  @note 必选回调
     *  @note 可以使用码号效验maskToken去APP Server做最终验证换取真实手机号码,如果换取手机号失败,可以通过SDK的continue接口继续后续场景流程
     *  @param token 换号校验token
     *  @param nodeName 获取token的节点名称
     *  @param event verify成功事件
     *  认证成功即各节点成功获取相应token,用户可使用相应token进行换号或登录操作,根据操作反馈选择继续或中断流程
     *  具体逻辑参考demo
     */
    void onVerifySuccess(String token,String nodeName,AlicomFusionEvent event);


    /** 中途认证节点,需要知道中途认证结果,否则影响流程继续执行
     *  @note 必选回调
     *  @note 可以使用码号效验maskToken去APP Server做最终验证换取真实手机号码,通过resultBlock告知SDK验证结果,如果失败则SDK不进行任何操作,成功则进入下一个节点
     *  @param nodeName 获取token的节点名称
     *  @param maskToken 换号校验token
     *  @param event  事件
     *  @param verifyResult 回调
     *  该回调出现在换号场景对当前登录账号获取token进行验证,根据验证结果调用continueSceneWithTemplateId
     *  决定流程走向,具体逻辑参考demo
     */
     void onHalfWayVerifySuccess(String nodeName, String maskToken,AlicomFusionEvent event,HalfWayVerifyResult verifyResult);

    /**
     *  认证成功
     *  @note 必选回调
     *  @note 当接收到这个回调的时候说明在当前场景中出现获取token失败的情况,是否继续由接入方控制
     *  @param error 获取token失败事件
     *  @param nodeName 获取token的节点名称
     *  认证失败回调,如号码认证中无法拉起授权页,token获取失败,短信界面无法获取短信或者开启手机号校验
	 *  时输入手机号与传入手机号不符及开启自动填充后传入手机号小于11位,上行界面获取上行信息失败等情况
     *  认证失败后可选择继续或者中断流程,具体逻辑参考demo
     */
    void onVerifyFailed(AlicomFusionEvent error,String nodeName);
    /**
     *  场景流程结束 正常加异常结束
     *  @note 必选回调,认证流程结束,认证失败,不可逆
     *  @param event 错误定义
     *  融合认证SDK内部流程已结束,需要用户调用stopSceneWithTemplateId中断流程
     */
    void onTemplateFinish(AlicomFusionEvent event);
    /**
     *  场景事件回调
     *  @note 可选回调,SDK场景流程中各个界面点击事件&界面跳转事件等UI相关回调
     *  @note 本回调接口仅做事件通知,不可再此回调内处理业务逻辑
     *  @param event 点击事件 用户操作记录
     *  对SDK内部关键节点运行回调,辅助开发,快速定位问题
     */
    void onAuthEvent(AlicomFusionEvent event);

    /**
     *  填充手机号,用于校验手机号是否和输入的一致,或者重新绑定手机号场景自动填充手机号
     *  @note 必选回调,SDK内置UI部分手机号
     *  @param nodeId 节点id
     *  @param event 事件
     *  @return 返回当前用户正在使用的手机号用于下一步操作
     *  如果开启自动填充或者自动校验,用户需传入相应号码继续流程,具体逻辑参考demo
     */
    String onGetPhoneNumberForVerification(String nodeId,AlicomFusionEvent event);

    /**
     *  认证中断
     *  @note 必选回调
     *  @note 认证流程临时中断,APP可根据不同事件显示对应的提示信息
     *  @note 触发条件:1. 未勾选隐私协议框,进行认证;2. 验证手机号码输入格式错误,3sdk开始加载某个节点和结束加载某个节点,4、相关的接口可用校验
     *  @param event 中断原因
     *  流程无法进行停留在当前界面,此回调处于节点进行状态,开始继续或中断方法无效
     */
    void onVerifyInterrupt(AlicomFusionEvent event);

使用示例

mAlicomFusionAuthCallBack = new AlicomFusionAuthCallBack() {
            @Override
            public AlicomFusionAuthToken onSDKTokenUpdate() {
                Log.d(TAG, "AlicomFusionAuthCallBack---onSDKTokenUpdate");
                AlicomFusionAuthToken token=new AlicomFusionAuthToken();
                CountDownLatch latch=new CountDownLatch(1);
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        GlobalInfoManager.getInstance().setToken(HttpRequestUtil.getAuthToken(GlobalInfoManager.getInstance().getContext()));
                        latch.countDown();
                    }
                }).start();
                try {
                    latch.await();
                    token.setAuthToken(GlobalInfoManager.getInstance().getToken());
                } catch (InterruptedException e) {
                }
                return token;
           }

            @Override
            public void onSDKTokenAuthSuccess() {
                Log.d(TAG, "AlicomFusionAuthCallBack---onSDKTokenAuthSuccess");
                verifySuccess=true;
            }

            @Override
            public void onSDKTokenAuthFailure(AlicomFusionAuthToken token, AlicomFusionEvent alicomFusionEvent) {
                Log.d(TAG, "AlicomFusionAuthCallBack---onSDKTokenAuthFailure "+alicomFusionEvent.toString());
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        Looper.prepare();
                        String token = HttpRequestUtil.getAuthToken(GlobalInfoManager.getInstance().getContext());
                        GlobalInfoManager.getInstance().setToken(token);
                        AlicomFusionAuthToken authToken=new AlicomFusionAuthToken();
                        authToken.setAuthToken(GlobalInfoManager.getInstance().getToken());
                        mAlicomFusionBusiness.updateToken(authToken);
                    }
                }).start();
            }

            @Override
            public void onVerifySuccess(String token, String s1, AlicomFusionEvent alicomFusionEvent) {
                Log.d(TAG, "AlicomFusionAuthCallBack---onVerifySuccess  " +token);
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        String mobilNum = HttpRequestUtil.verifyToken(GlobalInfoManager.getInstance().getContext(), token);
                        updateBusiness(mobilNum,s1);
                    }
                }).start();
            }

            @Override
            public void onHalfWayVerifySuccess(String nodeName, String maskToken, AlicomFusionEvent alicomFusionEvent, HalfWayVerifyResult halfWayVerifyResult) {
                Log.d(TAG, "AlicomFusionAuthCallBack---onHalfWayVerifySuccess  "+maskToken);
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        String result = HttpRequestUtil.verifyToken(GlobalInfoManager.getInstance().getContext(), maskToken);
                        updateBusinessHalfWay(result,halfWayVerifyResult,nodeName);
                    }
                }).start();
            }

            @Override
            public void onVerifyFailed(AlicomFusionEvent alicomFusionEvent, String s) {
                Log.d(TAG, "AlicomFusionAuthCallBack---onVerifyFailed "+alicomFusionEvent.toString()());
                mAlicomFusionBusiness.continueSceneWithTemplateId("100001",false);
            }

            @Override
            public void onTemplateFinish(AlicomFusionEvent alicomFusionEvent) {
                Log.d(TAG, "AlicomFusionAuthCallBack---onTemplateFinish  "+alicomFusionEvent.toString());
                sum=0;
                mAlicomFusionBusiness.stopSceneWithTemplateId("100001");
            }

            @Override
            public void onAuthEvent(AlicomFusionEvent alicomFusionEvent) {
                Log.d(TAG, "AlicomFusionAuthCallBack---onAuthEvent"+alicomFusionEvent.toString());
            }

            @Override
            public String onGetPhoneNumberForVerification(String s, AlicomFusionEvent alicomFusionEvent) {
                Log.d(TAG, "AlicomFusionAuthCallBack---onGetPhoneNumberForVerification");
                return GlobalInfoManager.getInstance().getUserInfo();
            }

            @Override
            public void onVerifyInterrupt(AlicomFusionEvent alicomFusionEvent) {
                Log.d(TAG, "AlicomFusionAuthCallBack---onVerifyInterrupt"+alicomFusionEvent.toString());
            }
        };
        mAlicomFusionBusiness.setAlicomFusionAuthCallBack(mAlicomFusionAuthCallBack);

界面UI流程回调(AlicomFusionAuthUICallBack

/**
 * ⼀键登录自UI注意,请不要调整view id属性否则可能造成部分功能无法使用
 * @note ⾃定义⼀键登录相关UI界面,⼀键登录界面不可100%完全自定义,请通过AlicomFusionNumberAuthModel参数进行修改
 * @param templateId 场景ID
 * @param nodeId 节点ID
 * @param authConfig 自定义UI属性
 */
void onPhoneNumberVerifyUICustomView(String templateId,String nodeId, FusionNumberAuthModel authConfig);
/**
 * 短信验证码认证自定义UI注意,请不要调整view id属性否则可能造成部分功能无法使用
 * @note 短信验证码界面修改
 * @param templateId 场景ID
 * @param nodeId 节点ID
 * @param isAutoInput 是否自动填充手机用户配置autoNumberShow值进行判断
 * 是否填充通过AlicomFusionAuthCallBack回调的onGetPhoneNumberForVerification方法传入的手机号
 * @param view 短信验证码界面view
 */
void onSMSCodeVerifyUICustomView(String templateId,String nodeId,booleanisAutoInput, AlicomFusionVerifyCodeView view);
/**
 * 上⾏短信认证自定义UI注意,请不要调整view id属性否则可能造成部分功能无法使用
 * @note 上行短信认证界面相关UI修改
 * @param templateId 场景ID
 * @param nodeId 节点ID
 * @param view 上行短信认证界面view
 * @param receivePhoneNumber 短信接收号码
 * @param verifyCode 短信内容
 */
void onSMSSendVerifyUICustomView(String templateId,String nodeId, AlicomFusionUpSMSView view,String receivePhoneNumber,String verifyCode);

阿里云首页 号码认证服务 相关技术圈