文档

Android客户端Demo体验

更新时间:

本文为您介绍融合认证功能Demo的运行步骤及示例代码,帮助您快速了解融合认证功能。Android客户端SDK集成的详细接入步骤及用法,请参见融合认证Android客户端接入

步骤一:下载并解压SDK

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

步骤二:设置认证方案和认证策略

创建认证方案

登录号码认证服务控制台创建融合认证方案,在方案列表界面获取方案Code

绑定认证策略

登录号码认证服务控制台,选择融合认证服务 > 认证策略设置 > 方案策略,将方案与场景进行关联。

步骤三:打开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做最终认证结果校验。

  1. com.alicom.fusion.demo.Constant类中设置相关参数。

    • SCHEME_CODE:请填入在控制台已创建的方案Code。

    • NETURL:请填写用户方网络服务地址。

    • GETAUTHREQUESTACTION:请填写用户获取Token接口名称。

    • VERIFYREQUESTACTION:请填写用户换号接口名称。

  2. com.alicom.fusion.demo.net.HttpRequestUtil类中修改相关参数。

    获取Token接口方法,用户可将该方法替换成用户方服务接口参数,且该网络请求使用了HttpURLConnection请求,根据用户服务方环境可修改为HttpsURLConnection。image.pngToken换取手机号接口方法,用户可将该方法替换成用户方服务接口参数,且该网络请求使用了HttpURLConnection请求,根据用户服务方环境可修改为HttpsURLConnection。image.png

快速访问模式

快速访问模式可暂不接入服务端API,适合快速调试Demo并体验基础或部分功能。

  1. OpenAPI门户填写接口参数。参数详情,请参见GetFusionAuthToken - 融合认证获取鉴权token

    说明
    • SchemeCode:请填写在控制台创建的方案Code

    • PackageName:请在app/build.gradle文件android.defaultConfig.applicationId属性查看包名。

    • PackageSign:包签名,您可以通过手机终端下载并安装Android App签名获取工具,获取Android App的包签名信息,便于认证过程进行鉴权。

  2. 单击发起调用

  3. 调用结果页,获取临时鉴权Token。image.png

  4. com.alicom.fusion.demo.Constant类中,进行如下设置:

    • LOCAL_TOKEN:请填入已获取的临时鉴权Token。

    • SCHEME_CODE:请填入已创建的方案Code。

    • TOKEN_MODEL:请填1。

  5. Demo运行完毕后,在AlicomFusionAuthCallBack回调的onVerifySuccess方法中获取号码校验Token,通过Token在控制台进行换号校验操作,可参见融合认证服务端集成image.png

步骤五:构建及运行

  1. Android系统的手机连接到电脑上,打开开发者模式和开发者模式下的USB调试模式

  2. 点击IDE顶部工具菜单image..png,构建并运行项目。

  3. 功能试用。

    说明

    确保您的终端设备已开启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();

  • 本页导读 (1)