本文为您介绍融合认证功能Demo的运行步骤及示例代码,帮助您快速了解融合认证功能。Android客户端SDK集成的详细接入步骤及用法,请参见融合认证Android客户端接入。
步骤一:下载并解压SDK
登录号码认证产品控制台,在概览页面右侧API&SDK区域,单击立即下载,进入API&SDK页面,根据页面提示下载并解压对应SDK。
步骤二:设置认证方案和认证策略
创建认证方案
绑定认证策略
登录号码认证服务控制台,选择,将方案与场景进行关联。
步骤三:打开Demo项目
使用Android Studio IDE,选择打开已有项目,选择到Demo文件夹。项目载入过程会拉取相关依赖,请耐心等待。
本文使用Android Studio 4.0版本进行演示。如果您使用的是其他的IDE版本,可能会存在构建报错,请按照提示修改对应Gradle版本。使用工具和环境搭建相关可参考准备工作。
步骤四:选择访问模式
为方便用户在服务端尚未搭建成功的情况下运行Demo,阿里云在Demo中添加了快速访问模式。在com.alicom.fusion.demo.Constant中设置TOKEN_MODEL的值即可使用不同的访问模式。
- TOKEN_MODEL:设置为1时,为快速访问模式。 
- TOKEN_MODEL:设置为2时,为正常访问模式(默认为2,正常访问模式)。 
正常访问模式
正常访问模式需要接入融合认证服务端和客户端SDK,进行正式调试并可以体验全部功能。
请先根据开发指南接入融合认证服务端App Server,通过访问App Server获取鉴权Token,并通过访问App Server做最终认证结果校验。
- 在 - com.alicom.fusion.demo.Constant类中设置相关参数。- SCHEME_CODE:请填入在控制台已创建的方案Code。 
- NETURL:请填写用户方网络服务地址。 
- GETAUTHREQUESTACTION:请填写用户获取Token接口名称。 
- VERIFYREQUESTACTION:请填写用户换号接口名称。 
 
- 在 - com.alicom.fusion.demo.net.HttpRequestUtil类中修改相关参数。- 获取Token接口方法,用户可将该方法替换成用户方服务接口参数,且该网络请求使用了 - HttpURLConnection请求,根据用户服务方环境可修改为HttpsURLConnection。 Token换取手机号接口方法,用户可将该方法替换成用户方服务接口参数,且该网络请求使用了 Token换取手机号接口方法,用户可将该方法替换成用户方服务接口参数,且该网络请求使用了- HttpURLConnection请求,根据用户服务方环境可修改为HttpsURLConnection。 
快速访问模式
快速访问模式可暂不接入服务端API,适合快速调试Demo并体验基础或部分功能。
- 在OpenAPI门户填写接口参数。参数详情,请参见GetFusionAuthToken - 融合认证获取鉴权token。 说明- SchemeCode:请填写在控制台创建的方案Code。 
- PackageName:请在app/build.gradle文件 - android.defaultConfig.applicationId属性查看包名。
- PackageSign:包签名,您可以通过手机终端下载并安装Android App签名获取工具,获取Android App的包签名信息,便于认证过程进行鉴权。 
 
- 单击发起调用。 
- 在调用结果页,获取临时鉴权Token。  
- 在 - com.alicom.fusion.demo.Constant类中,进行如下设置:- LOCAL_TOKEN:请填入已获取的临时鉴权Token。 
- SCHEME_CODE:请填入已创建的方案Code。 
- TOKEN_MODEL:请填1。 
 
- Demo运行完毕后,在AlicomFusionAuthCallBack回调的 - onVerifySuccess方法中获取号码校验Token,通过Token在控制台进行换号校验操作,可参见融合认证服务端集成。 
步骤五:构建及运行
- 将Android系统的手机连接到电脑上,打开开发者模式和开发者模式下的USB调试模式。 
- 点击IDE顶部工具菜单  ,构建并运行项目。 ,构建并运行项目。
- 功能试用。 说明- 确保您的终端设备已开启SIM卡的移动数据网络(支持中国联通、中国移动的3G网络,但接口耗时会增加)。 
示例代码
初始化SDK
mAlicomFusionBusiness = new AlicomFusionBusiness();传入Token
AlicomFusionAuthToken token=new AlicomFusionAuthToken();
        token.setAuthToken(GlobalInfoManager.getInstance().getToken());
        mAlicomFusionBusiness.initWithToken(GlobalInfoManager.getInstance().getContext(), Constant.SCHEME_CODE,token);设置主流程回调AlicomFusionAuthCallBack
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);开始场景
mAlicomFusionBusiness.startSceneWithTemplateId(PersonalCenterFragment.this.getActivity(), "100001");继续场景
mAlicomFusionBusiness.continueSceneWithTemplateId("100001",false);结束场景
mAlicomFusionBusiness.stopSceneWithTemplateId("100001");销毁SDK
mAlicomFusionBusiness.destory();