文档

Android客户端接入

更新时间:

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

接入步骤

下载SDK

登录号码认证产品控制台,在概览页面的右侧API&SDK区域,单击立即下载,进入API&SDK页面,选择融合认证安卓平台,完成SDK下载。

导入项目

  1. 项目根目录build.gradle文件添加依赖:classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.0"07dc4d35c74e367b037d94a2595a8172

  2. 控制minSdkVersion。

    说明

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

    lQLPJwN1siDmwSzNAtfNBHewyVLqseO2qncFAEtxWlZzAA_1143_727.png

  3. 导入AAR文件,并添加依赖。

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

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

      image

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

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

    implementation fileTree(dir: "libs", include: ["*.aar"])
    implementation 'androidx.appcompat:appcompat:1.3.1'
    implementation "org.jetbrains.kotlin:kotlin-stdlib:1.4.0"

    image

  4. 创建签名文件。

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

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

    lQDPJwDETKIgaQfNAoPNBWCw4gWEdAPmksIGgU_gjiqYAA_1376_643

  5. 查看包签名。

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

    32

    说明

    包签名获取方式如下:

    • 方式一:上图的下方输出的MD5值移除冒号,将大写字母转换为小写字母即可生成包签名。如果右侧面板没有signingReport,请参见生成签名报告

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

创建认证方案

您使用SDK时,会用到方案Code。在获取到包签名后,请在号码认证产品控制台创建认证方案,获取方案Code。

添加配置

  1. 添加权限。

    AndroidManifest.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声明。

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

    //号码认证界面
    <activity
        android:name=".numberauth.FusionNumberAuthActivity"
        android:exported="false"
        android:configChanges="orientation|keyboardHidden|screenSize"
        android:screenOrientation="behind"
        android:theme="@style/NumberAuthTheme" />
    //短信界面
    <activity
        android:name=".smsauth.FusionSmsActivity"
        android:exported="false"
        android:configChanges="orientation|keyboardHidden|screenSize"
        android:screenOrientation="behind" />
    //图形验证界面
    <activity android:name=".graphauth.FusionGraphAuthActivity"
        android:exported="false"
        android:configChanges="orientation|keyboardHidden|screenSize"
        android:screenOrientation="behind"/>
    //上行短信界面
    <activity
        android:name=".upsms.AlicomFusionUpSmsActivity"
        android:exported="false"
        android:configChanges="orientation|keyboardHidden|screenSize"
        android:screenOrientation="behind" />
    //号码认证授权页界面
    <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>
    说明

    图形认证界面无法添加自定义view,如果您不需要该功能,可以在认证策略设置中关闭图形验证节点。

  3. 混淆配置。

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

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

使用场景

融合认证SDK涵盖以下5个场景,您可以通过相应场景ID实现场景的调用。

使用场景

场景 ID

手机号一键登录/注册场景

100001

更换手机号场景

100002

重置密码场景

100003

绑定新手机号场景

100004

验证绑定手机号场景

100005

场景的具体策略设置,请参见全局策略

交互流程

融合认证交互流程

  1. 客户端集成阿里云融合认证SDK,完成初始化。

  2. 服务端对接GetFusionAuthToken接口获取鉴权Token,下发至客户端后传入SDK进行鉴权。

  3. 客户端唤起场景授权页面,部分场景需要用户授权(同意隐私协议、获取短信验证码等)。

  4. 用户授权后,客户端通过SDK的回调接口获取到统一认证Token后,将统一认证Token上传到服务端。

  5. 服务端对接VerifyWithFusionAuthToken接口,将Token转换为用户的手机号。

SDK方法说明

创建实例

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

初始化鉴权Token

鉴权流程.png

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

/**
 * @param mContext  上下文
 * @param sceneCode 方案Code
 * @param token     鉴权Token
 */
public void initWithToken(Context mContext, String sceneCode, AlicomFusionAuthToken token)

使用示例

AlicomFusionAuthToken token = new AlicomFusionAuthToken();
token.setAuthToken("<YOUR_TOKEN>");
mAlicomFusionBusiness.initWithToken(<YOUR_CONTEXT>, "<YOUR_SCENE_CODE>", token);

鉴权成功、失败、过期都将触发主流程回调(AlicomFusionAuthCallBack),您需要实现相应回调:

  • 鉴权成功:通过onSDKTokenAuthSuccess()回调,场景操作必须在回调成功后进行。

  • 鉴权失败:通过onSDKTokenAuthFailure()回调。

  • Token更新:Token过期前五分钟,通过onSDKTokenUpdate()回调获取新的Token。您需要实现此回调,以获取新的Token。

设置回调

SDK流程各个节点运行状态都通过回调来通知用户,您需要实现主流程回调AlicomFusionAuthCallBack

主流程回调 AlicomFusionAuthCallBack

/**
 * Token需要更新
 *
 * @return token,APP更新最新token后,组装Token返回给到SDK,SDK会通过此Token进行鉴权更新
 * 用户可在此处进行token获取,两次请求,每次30s,60s后无法获取会报token获取超时
 * @note 必选回调,只在超时调用获取。handler初始化&历史Token过期前5分钟,会触发此回调,由SDK维护token的生命周期
 */
AlicomFusionAuthToken onSDKTokenUpdate();

/**
 * Token鉴权成功
 *
 * @note 必选回调,token鉴权成功后,才可以使用startScene接口拉起场景
 * @note 不建议在本回调中直接调用startScene接口,本回调跟随token鉴权事件触发,可能存在多次回调
 * startSceneWithTemplateId开始场景必须在该回调后进行,具体逻辑参考demo
 */
void onSDKTokenAuthSuccess();

/**
 * Token鉴权失败
 *
 * @param failToken 错误token
 * @param error     错误定义
 * @note 必选回调,token初次鉴权失败&token更新后鉴权失败均会触发此回调
 * @note token鉴权失败后,无法继续使用SDK的功能,请销毁SDK后重新初始化
 */
void onSDKTokenAuthFailure(AlicomFusionAuthToken failToken, AlicomFusionEvent error);

/**
 * 认证成功
 *
 * @param token    统一认证Token
 * @param nodeName 获取Token的节点名称
 * @param event    verify成功事件
 *                 认证成功即各节点成功获取相应Token,用户可使用相应Token进行换号或登录操作,根据操作反馈选择继续或中断流程
 *                 具体逻辑参考demo
 * @note 必选回调
 * @note 可以使用maskToken去服务端做最终验证换取真实手机号码,如果换取手机号失败,可以通过SDK的continue接口继续后续场景流程
 */
void onVerifySuccess(String token, String nodeName, AlicomFusionEvent event);


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

/**
 * 认证失败
 *
 * @param error    获取Token失败事件
 * @param nodeName 获取Token的节点名称
 *                 认证失败回调,如号码认证中无法拉起授权页,Token获取失败,短信界面无法获取短信或者开启手机号校验
 *                 时输入手机号与传入手机号不符及开启自动填充后传入手机号小于11位,上行界面获取上行信息失败等情况
 *                 认证失败后可选择继续或者中断流程,具体逻辑参考demo
 * @note 必选回调
 * @note 当接收到这个回调的时候说明在当前场景中出现获取Token失败的情况,您可控制是否继续
 */
void onVerifyFailed(AlicomFusionEvent error, String nodeName);

/**
 * 场景流程结束 正常加异常结束
 *
 * @param event 错误定义
 *              融合认证SDK内部流程已结束,需要您调用stopSceneWithTemplateId中断流程
 * @note 必选回调,认证流程结束,认证失败,不可逆
 */
void onTemplateFinish(AlicomFusionEvent event);

/**
 * 场景事件回调
 *
 * @param event 点击事件 用户操作记录
 *              对SDK内部关键节点运行回调,辅助开发,快速定位问题
 * @note 可选回调,SDK场景流程中各个界面点击事件&界面跳转事件等UI相关回调
 * @note 本回调接口仅做事件通知,不可再此回调内处理业务逻辑
 */
void onAuthEvent(AlicomFusionEvent event);

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

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

实现主流程回调(AlicomFusionAuthCallBack)后,您需要使用下面的方法进行回调设置。

/**
 * @param callback 主流程回调
 */
public void setAlicomFusionAuthCallBack(AlicomFusionAuthCallBack callback)

使用示例

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);
说明

在收到相应回调前属于节点运行状态,此状态下开始场景startSceneWithTemplateId继续场景continueSceneWithTemplateId结束场景stopSceneWithTemplateId调用无效。

开始场景

  • 调用该接口的前提是没有其他正在执行的场景,否则将报100003错误。

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

  • 场景ID(templateId)请参见使用场景

/**
 * @param mContext   上下文
 * @param templateId 场景ID
 * @param callback   (可选)自定义UI时使用:如果使用默认UI,该参数可不传;自定义UI需通过该回调实现
 */
public void startSceneWithTemplateId(Context mContext, String templateId, AlicomFusionAuthUICallBack callback)

使用默认UI

使用默认UI,您将无法修改UI。示例代码如下:

mAlicomFusionBusiness.startSceneWithTemplateId(<YOUR_CONTEXT>, "100001");

使用自定义UI

根据实际场景可以通过界面UI流程回调(AlicomFusionAuthUICallBack)修改相关UI,具体请参见界面UI流程回调。示例代码如下:

mAlicomFusionBusiness.startSceneWithTemplateId(<YOUR_CONTEXT>, "100001", new AlicomFusionAuthUICallBack() {
    @Override
    public void onPhoneNumberVerifyUICustomView(String templateId, String nodeId, FusionNumberAuthModel authConfig) {
    // 自定义一键登录UI参数
    }

    /**
     * 短信登录页面的整个view对象是完全开放的,用户可以自行修改,具体实现效果及代码由用户自定义实现。
     */
    @Override
    public void onSMSCodeVerifyUICustomView(String templateId, String nodeId, boolean isAutoInput, AlicomFusionVerifyCodeView view) {
      //移除SDK短信登录页面默认的所有内置组件
      view.getRootRl().removeAllViews();
      
      //SDK获取验证码的内置接口
      view.verifyCodeBtnClick("");
      //SDK提交验证码的内置接口
      view.submitVerifyCodeBtnClick("","");
      
      //获取协议文本对象
      TextView privacyTV = view.getInputView().getPrivacyTV();
      
      //自定义短信认证UI参数

    }

    @Override
    public void onSMSSendVerifyUICustomView(String templateId, String nodeId, AlicomFusionUpSMSView view, String receivePhoneNumber, String verifyCode) {
    // 自定义上行短信认证UI参数
    }
});

场景流程

换号流程.png

场景执行将触发主流程回调(AlicomFusionAuthCallBack),您需要实现相应回调:

  • 获取Token成功:通过onVerifySuccess()回调,返回当前节点统一认证Token。您获取到该Token后可通过VerifyWithFusionAuthToken接口换取号码。

  • 获取Token失败:通过onVerifyFailed()回调。在收到该回调后,您可以选择继续场景,进行下一节点的验证;或结束场景

  • 中途获取Token成功:在场景ID为100002、验证当前手机号节点时触发,通过onHalfWayVerifySuccess()回调。在您验证完成当前手机号后,通过verifyResult告知SDK验证结果,SDK将根据该结果执行之后的流程。

  • 场景流程结束:通过onTemplateFinish()回调,需要您调用结束场景

继续场景

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

  • 需要在start后才能使用。

/**
 * @param templateId 场景ID
 * @param isSuccess  当前场景验证是否成功,将决定后续流程走向(如取号操作失败,需下一步鉴权,可通过该参数控制走向)
 */
public void continueSceneWithTemplateId(String templateId, boolean isSuccess)

使用示例

mAlicomFusionBusiness.continueSceneWithTemplateId("100001", true);

结束场景

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

  • 需要在start后才能使用,结束后才可以start下一个场景,不可同时start多个场景。

/**
 * @param templateId 场景ID
 */
public void stopSceneWithTemplateId(String templateId)

销毁服务

销毁服务后,SDK内部各个模块同步销毁。若想继续使用SDK,请重新初始化。

public void destory()

使用示例

mAlicomFusionBusiness.destory();

其他接口说明

友盟组件依赖设置

如果您需要使用友盟组件的端风险检测及手机号评分功能,需要配置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");

主动更新鉴权Token

说明

本接口为非必要接口:SDK内部存在Token的过期监控,过期前会通过AlicomFusionAuthCallBack回调通知客户端,客户端可不感知此项逻辑。

鉴权Token具有时效性,客户端可在鉴权Token即将过期时,主动更新鉴权Token。鉴权Token相关更新逻辑请参见initWithToken

/**
 * @param token 鉴权Token
 */
public void updateToken(AlicomFusionAuthToken token)

使用示例

AlicomFusionAuthToken token = new AlicomFusionAuthToken();
token.setAuthToken("<YOUR_TOKEN>");
mAlicomFusionBusiness.updateToken(token);

获取SDK版本号

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

使用示例

String version = mAlicomFusionBusiness.getSDKVersion();

获取场景ID

/**
 * @return templateId 当前正在运行中的场景ID
 */
public String getCurrentTemplateId()

使用示例

String currentTemplateId = mAlicomFusionBusiness.getCurrentTemplateId();

日志功能

/** 
 * @param logEnable 是否打印log(默认开启)
 */
public static void setLogEnable(boolean logEnable)

使用示例

AlicomFusionLog.setLogEnable(true);

SDK界面适配异形屏

/**
 * @param adapterPageShape 是否适配:true适配,false不适配。默认false
 */
public void adapterPageShape(boolean adapterPageShape)

使用示例

mAlicomFusionBusiness.adapterPageShape(true)

设置界面方向

设置界面方向必须在initWithToken之后调用,否则无效。

//1竖屏;2横屏。默认为:1竖屏。
private volatile int screenOretation = 2;

使用示例

AlicomFusionAuthToken token = new AlicomFusionAuthToken();
token.setAuthToken("<YOUR_TOKEN>");
mAlicomFusionBusiness.initWithToken(<YOUR_CONTEXT>, "<YOUR_SCENE_CODE>", token);
mAlicomFusionBusiness.setAllPageOrientaation(screenOretation);

UI页面接口说明

界面UI流程回调 AlicomFusionAuthUICallBack

/**
 * ⼀键登录自定义UI
 * @note ⼀键登录界面不可100%完全自定义,请通过AlicomFusionNumberAuthModel参数进行修改
 *       请不要调整view id属性,否则可能造成部分功能无法使用
 * @param templateId 场景ID
 * @param nodeId 节点ID
 * @param authConfig 自定义UI属性
 */
void onPhoneNumberVerifyUICustomView(String templateId, String nodeId, FusionNumberAuthModel authConfig);

/**
 * 短信验证码认证自定义UI
 * @note 短信登录页面的整个view对象是完全开放的,您可以自行修改AlicomFusionVerifyCodeView
 *        请不要调整view id属性,否则可能造成部分功能无法使用
 * @param templateId 场景ID
 * @param nodeId 节点ID
 * @param isAutoInput 是否自动填充手机用户配置autoNumberShow值进行判断
 *                    是否填充通过AlicomFusionAuthCallBack回调的onGetPhoneNumberForVerification方法传入的手机号
 * @param view 短信验证码界面view,具体实现效果及代码由用户自定义实现。
 */
void onSMSCodeVerifyUICustomView(String templateId, String nodeId, boolean isAutoInput, AlicomFusionVerifyCodeView view);

/**
 * 上⾏短信认证自定义UI
 * @note 请不要调整view id属性,否则可能造成部分功能无法使用
 * @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);

⼀键登录自定义UI参数 FusionNumberAuthModel

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

    // 添加自定义XML布局
    @AuthNumber
    public void addAuthRegisterXmlConfig(AuthRegisterXmlConfig xmlConfig)

    // 添加自定义View
    public void addAuthRegistViewConfig(String viewID, AuthRegisterViewConfig viewConfig)

    // 移除自定义XML布局
    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()
}

配置授权页导航栏

方法

参数类型

说明

setStatusBarColor

int

设置状态栏颜色(系统版本5.0以上可设置)。

setLightColor

boolean

设置状态栏字体颜色(系统版本6.0以上可设置)。取值:

  • true(默认值):表示字体颜色为黑色。

  • false:表示字体颜色为白色。

setNavColor

int

设置导航栏背景颜色。

setNavText

String

设置导航栏标题文字。

setNavTextColor

int

设置导航栏标题文字颜色。

setNavTypeface

Typeface

设置导航栏文本使用字体。

参数包含:Typeface.SANS_SERIF、Typeface.SERIF、Typeface.MONOSPACE。

setNavReturnImgPath

String

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

setnavReturnImgWidth

int

设置导航栏返回按钮图片宽度(单位dp)。

setnavReturnImgHeight

int

设置导航栏返回按钮图片高度(单位dp)。

setNavReturnHidden

boolean

设置导航栏返回按钮是否隐藏。取值:

  • true:隐藏。

  • false:显示。

setNavReturnScaleType

ImageView.ScaleType

设置顶部导航栏返回按钮的图片缩放类型。

setNavHidden

boolean

设置默认导航栏是否隐藏。取值:

  • true:隐藏。

  • false:显示。

setStatusBarHidden

boolean

设置状态栏是否隐藏。取值:

  • true:隐藏。

  • false:显示。

setStatusBarUIFlag

int

设置状态栏UI属性,属性类型仅支持:

  • View.SYSTEM_UI_FLAG_LOW_PROFILE:非全屏显示状态,状态栏低电量模式。

  • View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN:全屏显示,状态栏沉浸式模式。

setWebViewStatusBarColor

int

设置协议页状态栏颜色(系统版本5.0以上可设置),不设置则与授权页设置一致。

setWebNavColor

int

设置协议页顶部导航栏背景色,不设置则与授权页设置一致。

setWebNavTextColor

int

设置协议页顶部导航栏标题颜色,不设置则与授权页设置一致。

setWebNavTextSizeDP

int

设置协议页顶部导航栏文字大小,不设置则与授权页设置一致。

setWebNavReturnImgPath

String

设置协议页导航栏返回按钮图片路径,不设置则与授权页设置一致。路径不需要后缀,比如图片在drawable中的存放目录是res/drawable-xxhdpi/return.png,则传入参数为return,即setWebNavReturnImgPath("return")

setBottomNavColor

int

设置状态栏颜色(系统版本5.0以上可设置)。

setNavTextSizeDp

int

设置导航栏标题文字大小(单位:dp,字体大小不随系统变化)。

setNavReturnImgDrawable

Drawable

设置导航栏返回按钮图片。

配置授权页Logo

方法

参数类型

说明

setLogoHidden

boolean

设置Logo是否隐藏。取值:

  • true:隐藏。

  • false:显示。

setLogoImgPath

String

设置Logo图片路径,目前只支持drawable资源文件。路径不需要后缀,比如图片在drawable中的存放目录是res/drawable-xxhdpi/Logo.png,则传入参数为Logo,即setLogoImgPath("Logo")

setLogoImgDrawable

Drawable

设置Logo图片。

setLogoWidth

int

设置Logo控件宽度(单位:dp)。

setLogoHeight

int

设置Logo控件高度(单位:dp)。

setLogoOffsetY

int

设置Logo控件相对导航栏顶部的距离(单位:dp)。如果设置了该属性,则setLogoOffsetY_B将无效。

setLogoOffsetY_B

int

设置Logo控件相对父View底部的距离(单位:dp)。

setLogoScaleType

ImageView.ScaleType

设置Logo图片缩放模式。模式类型:

  • center:保持原图大小,显示在ImageView的中心。当原图的size大于ImageView的size,超过部分裁剪处理。

  • centerCrop:原图的中心对准ImageView的中心,等比例放大原图,直到填满ImageView为止,对原图超过ImageView的部分做裁剪处理。

  • centerInside:图片居中显示,按比例缩小原图的size等于或小于ImageView。如果原图的size本身就小于ImageView的size,则原图的size不做任何处理,居中显示在ImageView。

  • matrix:不改变原图的大小,从ImageView左上角绘制原图,超过部分裁剪处理。

  • fitCenter:原图按比例扩大或缩小到ImageView的高度,居中显示。

  • fitEnd:原图按比例扩大或缩小到ImageView的高度,显示在ImageView的下部分位置。

  • fitStart:原图按比例扩大或缩小到ImageView的高度,显示在ImageView的上部分位置。

  • fitXY:原图按照指定的大小在View中显示,拉伸显示图片,不保持原比例,填满ImageView。

配置授权页Slogan

方法

参数类型

说明

setSloganText

String

设置Slogan文字内容。

setSloganTextColor

int

设置Slogan文字颜色。

setSloganOffsetY

int

设置Slogan相对导航栏顶部的距离(单位:dp)。如果设置了该属性,则setSloganOffsetY_B将无效。

setSloganOffsetY_B

int

设置Slogan相对父View底部的距离(单位:dp)。

setSloganTextSizeDp

int

设置Slogan文字大小(单位:dp,字体大小不随系统变化)。

setSloganTypeface

Typeface

设置Slogan文本使用字体。

参数包含:Typeface.SANS_SERIF、Typeface.SERIF、Typeface.MONOSPACE。

setSloganHidden

boolean

设置Slogan是否隐藏。

配置授权页号码栏

方法

参数类型

说明

setNumberColor

int

设置手机号掩码颜色。

setNumberSize

int

设置手机号字体大小。

setNumFieldOffsetY

int

设置号码栏控件相对导航栏顶部的位移(单位:dp)。如果设置了该属性,则setNumFieldOffsetY_B将无效。

setNumFieldOffsetY_B

int

设置号码栏控件相对父View底部的位移(单位:dp)。

setNumberFieldOffsetX

int

设置号码栏相对于默认位置的X轴偏移量(单位:dp)。

setNumberLayoutGravity

int

设置手机号掩码的布局对齐方式,支持以下三种对齐方式:

  • Gravity.CENTER_HORIZONTAL:水平居中

  • Gravity.LEFT:左对齐

  • Gravity.RIGHT:右对齐

setNumberTypeface

Typeface

设置手机号码文本使用字体。

参数包含:Typeface.SANS_SERIF、Typeface.SERIF、Typeface.MONOSPACE。

setNumberSizeDp

int

设置手机号码字体大小(单位:dp,字体大小不随系统变化)。

配置授权页登录按钮

方法

参数类型

说明

setLogBtnText

String

设置登录按钮文本内容。

setLogBtnTextColor

int

设置登录按钮文字颜色。

setLogBtnTypeface

Typeface

设置登录文本使用字体。

参数包含:Typeface.SANS_SERIF、Typeface.SERIF、Typeface.MONOSPACE。

setLogBtnWidth

int

设置登录按钮宽度(单位:dp)。

setLogBtnHeight

int

设置登录按钮高度(单位:dp)。

setLogBtnMarginLeftAndRight

int

设置登录按钮相对于屏幕左右边缘边距(单位:dp)。

setLogBtnBackgroundPath

String

设置登录按钮背景图片的路径。路径不需要后缀,比如图片在drawable中的存放目录是res/drawable-xxhdpi/logBtn.png,则传入参数为logBtn,即setLogBtnBackgroundPath("logBtn")

setLogBtnOffsetY

int

设置登录按钮相对导航栏顶部的位移(单位:dp)。如果设置了该属性,则setLogBtnOffsetY_B将无效。

setLogBtnOffsetY_B

int

设置登录按钮相对父View底部的位移(单位:dp)。

setLogBtnOffsetX

int

设置登录按钮X轴偏移量。

说明

如果设置了setLogBtnMarginLeftAndRight,且布局对齐方式为左对齐右对齐,则会在margin的基础上再增加offsetX的偏移量;如果是居中对齐,则会在居中的基础上再做offsetX的偏移。

setLogBtnLayoutGravity

Gravity

设置登录按钮布局对齐方式,支持以下三种对齐方式:

  • Gravity.CENTER_HORIZONTAL:水平居中

  • Gravity.LEFT:左对齐

  • Gravity.RIGHT:右对齐

setLogBtnTextSizeDp

int

设置登录按钮文字大小(单位:dp,字体大小不随系统变化)。

setLogBtnBackgroundDrawable

Drawable

设置一键登录按钮背景图片。

setLoadingImgPath

String

设置登录loading dialog动画图片的路径。路径不需要后缀,比如图片在drawable中的存放目录是res/drawable-xxhdpi/loading.png,则传入参数为loading,即setLoadingImgPath("loading")

setLoadingImgDrawable

Drawable

设置登录loading dialog背景图片。

setLoadingBackgroundPath

String

设置一键登录loading背景。

setLoadingBackgroundDrawable

Drawable

设置一键登录loading背景。

setHiddenLoading

boolean

设置一键登录loading是否隐藏。取值:

  • true:隐藏。

  • false:显示。

配置授权页隐私栏

方法

参数类型

说明

setAppPrivacyOne

String, String

设置开发者隐私协议1名称和URL(名称,URL)。

setAppPrivacyTwo

String, String

设置开发者隐私协议2名称和URL(名称,URL)。

setAppPrivacyThree

String, String

设置开发者隐私协议3名称和URL(名称,URL)。

setAppPrivacyColor

int, int

设置隐私协议文字颜色(非协议名称部分的文字颜色,协议名称部分的文字颜色)。运营商协议和自定义协议都会使用此处设置的颜色。

setPrivacyConectTexts

String[]

设置协议名称之间连接字符串数组,默认 ["和","、","、"] ,即第一个为"和",其他为"、",按顺序读取,为空则取默认。

setPrivacyOperatorIndex

int

设置运营商协议指定显示顺序,取值范围0~3。默认0,即第1个协议显示;最大值可为3,即第4个协议显示。

setPrivacyOffsetY

int

设置隐私协议相对导航栏顶部的位移(单位:dp)。如果设置了该属性,则setPrivacyOffsetY_B将无效。

setPrivacyOffsetY_B

int

设置隐私协议相对父View底部的位移(单位:dp)。

setCheckBoxWidth

int

设置隐私协议勾选框的宽(单位:dp)。

setCheckBoxHeight

int

设置隐私协议勾选框的高(单位:dp)。

setPrivacyState

boolean

设置隐私协议是否默认勾选。取值:

  • true:初始状态时勾选。

  • false:初始状态时不勾选。

setProtocolGravity

int

设置隐私协议文字对齐方式(单位:Gravity.xxx)。

setProtocolTypeface

Typeface

设置协议文本使用字体。

参数包含:Typeface.SANS_SERIF、Typeface.SERIF、Typeface.MONOSPACE。

setPrivacyMargin

int

设置隐私协议距离手机左右边缘的边距(单位:dp)。

setPrivacyBefore

String

设置开发者隐私条款前置自定义文案。

setPrivacyEnd

String

设置开发者隐私条款尾部自定义文案。

setCheckboxHidden

boolean

设置隐私协议的勾选按钮是否隐藏。取值:

  • true:隐藏。

  • false:显示。

setUncheckedImgPath

String

设置隐私协议勾选框未勾选时显示图片的路径。路径不需要后缀,比如图片在drawable中的存放目录是res/drawable-xxhdpi/unchecked.png,则传入参数为unchecked,即setUncheckedImgPath("unchecked")

setCheckedImgPath

String

设置隐私协议勾选框已勾选时显示图片的路径。路径不需要后缀

setCheckBoxMarginTop

int

设置协议勾选框上边距。

setProtocolShakePath

String

设置协议勾选框未勾选时,单击登录按钮,协议文字的动画效果。anim资源路径,不需要后缀,比如动画在anim中的存放目录是protocol_shake.xml,则传入参数为protocol_shake,即setProtocolShakePath("protocol_shake")

setVendorPrivacyPrefix

String

设置运营商协议前缀符号,只能设置一个字符<、(、《、【、『、[、(中的一个。

setVendorPrivacySuffix

String

设置运营商协议后缀符号,只能设置一个字符>、)、》、】、』、]、)中的一个。

setProtocolLayoutGravity

int

设置隐私栏的布局对齐方式。支持以下三种对齐方式:

  • Gravity.CENTER_HORIZONTAL:水平居中

  • Gravity.LEFT:左对齐

  • Gravity.RIGHT:右对齐

说明

该参数控制了整个隐私栏(包含checkbox)在其父布局中的对齐方式,而setProtocolGravity控制的是隐私协议文字内容在文本框中的对齐方式。

setPrivacyOffsetX

int

设置隐私栏X轴偏移量(单位:dp)。

setLogBtnToastHidden

boolean

设置checkbox未勾选时,单击登录按钮toast是否显示。

setPrivacyTextSize

int

设置隐私条款文字大小(单位:sp)。

setPrivacyTextSizeDp

int

设置隐私条款文字大小(单位:dp,字体大小不随系统变化)。

setUncheckedImgDrawable

Drawable

设置复选框未选中时的图片。

setCheckedImgDrawable

Drawable

设置复选框选中时的图片。

配置切换控件方式

方法

参数类型

说明

setSwitchAccHidden

boolean

设置切换登录方式控件是否隐藏。

setSwitchAccText

String

设置切换登录方式控件的文本内容。

setSwitchAccTextColor

int

设置切换登录方式控件的文字颜色。

setSwitchOffsetY

int

设置切换登录方式控件距离导航栏顶部的位移(单位:dp)。如果设置了该属性,则setSwitchOffsetY_B将无效。

setSwitchOffsetY_B

int

设置切换登录方式控件距离父View底部的位移(单位:dp)。

setSwitchAccTextSizeDp

int

设置切换登录方式控件的文字大小(单位:dp,字体大小不随系统变化)。

useSwitchFontAndPath

boolean,String

设置切换按钮文本是否使用自定义字体。自定义字体名称,包含字体格式,如xxx.ttf,文件需放置在assets下。

  • true:使用自定义字体。

  • false:不使用自定义字体。

setSwitchTypeface

Typeface

设置切换按钮文本使用字体。

参数包含:Typeface.SANS_SERIF、Typeface.SERIF、Typeface.MONOSPACE。

配置页面相关函数

方法

参数类型

说明

setAuthPageActIn

String,String

设置授权页唤起动画、旧界面退出动画。anim资源路径,不需要后缀,比如动画在anim中的存放目录是authPageActIn.xml,则传入参数为authPageActIn,即setAuthPageActIn("authPageActIn, activityOut")

setAuthPageActOut

String,String

设置授权页退出动画、新界面出现动画。anim资源路径,不需要后缀。

setPageBackgroundPath

String

设置授权页背景图。drawable资源路径,不需要加后缀,如图片在drawable中的存放目录是res/drawable-xxhdpi/loading.png,则传入参数为loading,即setPageBackgroundPath("loading")

setDialogWidth

int

设置授权页宽度(单位:dp)。

setDialogHeight

int

设置授权页高度(单位:dp)。

setDialogAlpha

float

设置授权页的蒙层透明度,取值:0~1。

  • 值为0时,表示完全透明。

  • 值为1时,表示完全不透明。

  • 介于0和1之间的值,表示不同程度的半透明。

setDiaLogoffsetX

int

设置授权页X轴偏移(单位:dp)。

setDiaLogoffsetY

int

设置授权页Y轴偏移(单位:dp)。

setDialogBottom

boolean

设置授权页是否居于底部。

setPageBackgroundDrawable

Drawable

设置授权页背景图。

setProtocolAction

String

自定义协议页跳转Action。

setPackageName

String

配置自定义协议页跳转Action必须配置这个属性,值为App的包名。

setWebCacheMode

int

设置内置协议展示页WebView缓存模式。

setWebSupportedJavascript

boolean

设置内置协议界面是否可运行JavaScript脚本,取值:

  • true(默认):可运行。

  • false:不可运行。

配置二次隐私协议弹窗页面

方法

参数类型

说明

setPrivacyAlertIsNeedShow

boolean

设置二次隐私协议弹窗是否显示。取值:

  • true:显示。

  • false(默认值):不显示。

setPrivacyAlertIsNeedAutoLogin

boolean

设置二次隐私协议弹窗单击同意后是否自动登录。取值:

  • true(默认值):需要自动登录。

  • false:不需要自动登录。

setPrivacyAlertMaskIsNeedShow

boolean

设置二次隐私协议弹窗背景蒙层是否显示。

  • true(默认值):显示。

  • false:不显示。

setPrivacyAlertMaskAlpha

float

设置二次隐私协议弹窗蒙层透明度。默认值0.3,取值范围0.3~1.0。

setPrivacyAlertAlpha

float

设置二次隐私协议弹窗透明度。默认值1.0,取值范围0.3~1.0。

setPrivacyAlertBackgroundColor

int

设置二次隐私协议弹窗背景色(同意并继续按钮区域)。

setPrivacyAlertEntryAnimation

String

设置二次隐私协议弹窗开始动画。

setPrivacyAlertExitAnimation

String

设置二次隐私协议弹窗退出动画。

setPrivacyAlertCornerRadiusArray

int[]

设置二次隐私协议弹窗的四个圆角值。顺序为左上、右上、右下、左下,需要填充4个值,不足4个值则无效,如果值小于等于0则为直角。

setPrivacyAlertAlignment

int

设置二次隐私协议弹窗显示位置:支持屏幕居中、居上、居下、居左、居右,默认居中显示。

setPrivacyAlertWidth

int

设置弹窗宽度。

setPrivacyAlertHeight

int

设置弹窗高度。

setPrivacyAlertOffsetX

int

设置弹窗水平偏移量。(单位:dp)

setPrivacyAlertOffsetY

int

设置弹窗竖直偏移量。(单位:dp)

setPrivacyAlertTitleBackgroundColor

int

设置二次隐私协议弹窗标题背景颜色。

setPrivacyAlertTitleAlignment

int

设置二次隐私协议弹窗标题居中方式:支持居中、居左,默认居中显示。

setPrivacyAlertTitleOffsetX

int

设置标题文字水平偏移量。(单位:dp)

setPrivacyAlertTitleOffsetY

int

设置标题文字竖直偏移量。(单位:dp)

setPrivacyAlertTitleContent

String

设置标题文本。

setPrivacyAlertTitleTextSize

int

设置标题文字大小,默认值18 sp。

setPrivacyAlertTitleColor

int

设置标题文字颜色。

setPrivacyAlertContentBackgroundColor

int

设置协议内容背景颜色。

setPrivacyAlertContentTextSize

int

设置服务协议文字大小,默认值16 sp。

setPrivacyAlertContentAlignment

int

设置二次隐私协议弹窗协议文案居中方式:支持居中、居左,默认居左显示。

setPrivacyAlertContentColor

int

设置服务协议文字颜色。

setPrivacyAlertContentBaseColor

int

设置服务协议非协议文字颜色。

setPrivacyAlertContentHorizontalMargin

int

设置服务协议左右间距。

setPrivacyAlertContentVerticalMargin

int

设置服务协议上下间距。

setPrivacyAlertBtnBackgroundImgPath

String

设置二次弹窗背景图片路径。

setPrivacyAlertBtnBackgroundImgDrawable

Drawable

设置二次弹窗确认按钮背景。

setPrivacyAlertBtnTextColor

int

设置二次弹窗确认按钮文字颜色。

setPrivacyAlertBtnTextColorPath

String

设置二次弹窗确认按钮文字颜色路径。

setPrivacyAlertBtnTextSize

int

设置二次弹窗确认按钮文字大小,默认值18 sp。

setPrivacyAlertBtnWidth

int

设置二次弹窗确认按钮宽度。(单位:dp)

setPrivacyAlertBtnHeigth

int

设置二次弹窗确认按钮高度。(单位:dp)

setPrivacyAlertCloseBtnShow

boolean

设置右上角的关闭按钮是否显示。

  • true(默认值):显示关闭按钮。

  • false:不显示关闭按钮。

setPrivacyAlertCloseImagPath

String

设置关闭按钮图片路径。

setPrivacyAlertCloseScaleType

ImageView.ScaleType

设置关闭按钮缩放类型。

setPrivacyAlertCloseImagDrawable

Drawable

设置关闭按钮图片。

setPrivacyAlertCloseImgWidth

int

设置关闭按钮宽度。(单位:dp)

setPrivacyAlertCloseImgHeight

int

设置关闭按钮高度。(单位:dp)

setPrivacyAlertBtnGrivaty

int[]

设置确认按钮布局方式。

setPrivacyAlertBtnContent

String

设置确认按钮文本。

setPrivacyAlertBtnHorizontalMargin

int

设置确认按钮的横向边距。

setPrivacyAlertBtnVerticalMargin

int

设置确认按钮的纵向边距。

setTapPrivacyAlertMaskCloseAlert

boolean

设置二次隐私协议弹窗点击背景蒙层是否关闭弹窗。

  • true(默认值):关闭。

  • false:不关闭。

setPrivacyAlertTitleTypeface

Typeface

设置二次弹窗title文本使用字体。

参数包含:Typeface.SANS_SERIF、Typeface.SERIF、Typeface.MONOSPACE。

usePrivacyAlertContentFontAndPath

boolean, String

设置二次弹窗协议文本是否使用自定义字体。自定义字体名称,包含字体格式,如xxx.ttf,文件需放置在assets下。

  • true:使用自定义字体。

  • false:不使用自定义字体。

setPrivacyAlertContentTypeface

Typeface

设置二次弹窗协议文本使用字体。

参数包含:Typeface.SANS_SERIF、Typeface.SERIF、Typeface.MONOSPACE。

setPrivacyAlertBtnTypeface

Typeface

设置二次弹窗确认按钮文本使用字体。

参数包含:Typeface.SANS_SERIF、Typeface.SERIF、Typeface.MONOSPACE。

setPrivacyAlertBefore

String

二次弹窗协议前缀。

setPrivacyAlertEnd

String

二次弹窗协议后缀。

setPrivacyAlertOneColor

int

设置授权页协议1文本颜色。

setPrivacyAlertTwoColor

int

设置授权页协议2文本颜色。

setPrivacyAlertThreeColor

int

设置授权页协议3文本颜色。

setPrivacyAlertOperatorColor

int

设置授权页运营商协议文本颜色。

一键登录界面添加自定义XML布局

/**
 * @param xmlConfig
 */
@AuthNumber
public void addAuthRegisterXmlConfig(AuthRegisterXmlConfig xmlConfig)

使用示例

fusionNumberAuthModel.addAuthRegisterXmlConfig(new AuthRegisterXmlConfig.Builder()
        .setLayout(0/**xml布局layout ID**/,new AbstractPnsViewDelegate(){
            @Override
            public void onViewCreated(View view) {
                //添加自定义布局相关逻辑,如点击事件等
            }
        }).build());

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

/**
 * @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());

二次弹窗界面添加XML布局

/**
 * @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) {
                //添加自定义布局相关逻辑,如点击事件等
            }
        }).build());

二次弹窗界面添加自定义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());

短信认证自定义UI参数 AlicomFusionVerifyCodeView

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参数 AlicomFusionUpSMSView

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()
}