本文为您介绍了Android客户端如何接入通信授权服务。

1. 概述

官网下载SDK后进行解压,解压后包含三个文件是:
  • SDK说明文档。
  • Demo工程。
  • 1个aar包。

2. 准备工作

  • 请确保已经在阿里云控制台开通了通信授权服务,并完成企业信息审核、授权场景审核和添加需要集成SDK的App信息,单击进入阿里云控制台。
  • 您也可以登录阿里云官网查看接入流程,单击查看完整使用流程

3. 搭建开发环境

  1. 拷贝aar包。

    下载SDK并解压后,将所有aar文件拷贝至工程的libs目录下。

  2. APP工程AndroidManifest.xml增加Activity声明。
    <activity   android:name="com.nirvana.communicationauth.AuthorizationActivity"
        android:configChanges="keyboardHidden|orientation|screenSize"
        android:exported="false"
        android:launchMode="singleTop"
        android:theme="@style/TransparentTheme"
        android:windowSoftInputMode="adjustPan"/>
    
    <activity   android:name="com.nirvana.communicationauth.ui.AuthWebViewActivity"
        android:configChanges="keyboardHidden|orientation|screenSize"
        android:exported="false"
        android:launchMode="singleTop"
        android:theme="@style/TransparentTheme"/>
  3. 混淆keep规则。
    -keepclasseswithmembernames class * {
        native <methods>;
    }
    -keep @android.support.annotation.Keep class * {*;}
    
    -keepclassmembers class * {
        @android.support.annotation.Keep <fields>;
        @android.support.annotation.Keep <methods>;
    }
    -keepattributes Signature
    -keepattributes *Annotation*
    -ignorewarnings

4. SDK方法说明

  • 获取认证实例。
    /*
      显示在授权页底部的自定义协议
      key是协议名 value是对应协议的url
      不可为空
     */
    HashMap<String, String> pMap = new HashMap<>();
    pMap.put("《自定义隐私协议》", "https://www.taobao.com");
    pMap.put("《阿里云》", "https://www.aliyun.com/");
    
    CASResultListener pInitListener = new CASResultListener() {
        @Override
        public void onSuccess(@NonNull CASResult cassResult) {
            Log.e(TAG, cassResult.toString());
        }
    
        @Override
        public void onFailed(@NonNull CASResult cassResult) {
            Log.e(TAG, cassResult.toString());
        }
    };
    /*
        如果必要参数为空或者格式错误 build返回null
        对应错误信息从Listener抛出
     */
    CASHelper helper = new CASBuilder
        //控制台获取的秘钥
        .appKey(APP_KEY)
        //需要通信授权的手机号
        .phoneNumber("132xxxxxxxx")
        //控制台配置的方案ID 分为商业与合约两种类型
        .schemeId(SCHEME_ID)
        .protocolMap(pMap)
        .context(getApplicationContext())
        .build(pInitListener);
  • 实例开放接口。
    public interface CASHelper {
    
    
        /**
         * 提前获取SDK授权页相关授权信息(对应方案ID)、以及当前手机号的授权状态。起到加速授权页拉起的作用
         * 如果不调用此接口在调startAuthPage接口唤起授权页的时候同样会去获取
         * @param timeout 接口超时时间 单位毫秒
         * @param listener 事件回调
         */
        void accelerateAuthInBackground(int timeout, @NonNull CASResultListener listener);
        
        /**
         * 唤起授权页
         * @param timeout 接口超时时间 单位毫秒
         * @param uiConfig  授权页ui配置项
         * @param listener  授权事件回调
         * @param uiClickListener ui点击回调
         */
        void startAuthPage(int timeout, AuthUiConfig uiConfig, @NonNull CASResultListener listener, UiClickListener uiClickListener);
    
        /**
         * 关闭授权页接口
         * 点击授权页上的关闭按钮会直接关闭授权页
         * 授权成功或失败不会主动关闭授权页 需要主动调用此接口关闭授权页
         * @param traceId 流水号对应的是唤起授权页成功返回的traceId
         */
        void quitAuthorizationPage(String traceId);
    
        /**
         * 开启SDK内部日志打印
         * @param enable 是否打印
         */
        void setLoggerEnable(boolean enable);
    
    }
  • 事件回调CASResultListener。
    public interface CASResultListener {
    
        /**
         * 成功回调
         * @param cassResult 返回成功结果
         */
        void onSuccess(@NonNull CASResult cassResult);
    
        /**
         * 失败回调
         * @param cassResult 返回失败原因
         */
        void onFailed(@NonNull CASResult cassResult);
    }
    
    public class CASResult {
        /**
         * 对应事件code ResultCode中定义
         */
        private String code;
        /**
         * 对应事件msg ResultCode中定义
         */
        private String msg;
        /**
         * 流水号 每次调用接口生成
         */
        private String traceId;
        /**
         * 手机号授权状态
         * accelerateAuthInBackground和startAuthPage接口成功时返回
         */
        private String authStatus;
        /**
         * SDK异常或服务端请求错误详细信息
         */
        private Map<String, String> innerFailedResultData;
    }
  • 授权页UI点击回调。
    public interface UiClickListener {
        /**
         * 回抛授权页控件点击事件 目前只有授权按钮和关闭授权页按钮有点击事件回抛
         * @param code ui点击事件code
         *             授权按钮点击code ResultCode.CODE_CLICK_AUTH_BTN
         *             授权页关闭按钮点击code ResultCode.CODE_CLICK_BACK_BTN
         * @param jsonData 点击事件返回的具体内容 不同code对应不同内容 可能为空
         *                 授权按钮点击 {"isChecked":false,"verifyCode":""}   isCheck对应协议是否勾选,verifyCode对应输入的验证码
         */
        void onClick(@NonNull String code, String jsonData);
    }
  • 授权页UI配置 AuthUiConfig。
    AuthUiConfig pAuthUiConfig =  new AuthUiConfig.Builder()
                    //授权按钮文字大小
                    .setAuthBtnTextSize(15)
                    //授权按钮文字颜色
                    .setAuthBtnTextColor(Color.BLACK)
                    //授权按钮文字样式
                    .setAuthBtnTextTypeface(Typeface.DEFAULT_BOLD, Typeface.NORMAL)
                    //以此类推
                    //底部文案文字大小、颜色、样式
                    .setSloganXXX()
                    //号码栏文字大小、颜色、样式
                    .setNumberXXX()
                    //顶部导航栏文字大小、颜色、样式
                    .setNavXXX()
                    //协议栏文字大小、颜色、样式
                    .setPrivacyXXX()
                    //弹窗蒙层颜色
                    .setDialogMaskColor()
                    //是否开启弹窗模式
                    .setDialogMode(true)
                    //默认loading隐藏
                    .setLoadingHidden()
                    //默认toast隐藏
                    .setAuthBtnToastHidden()
                    .create();

5. SDK事件返回码

返回码 描述
300000 成功。
300001 授权页面唤起成功(iOS页面都以present方式展示)。
300002 授权页唤起失败。
300003 授权页面内容异常 。
300004 参数错误。
300005 网络超时。
300006 用户取消授权。
300007 授权失败,具体原因见innerFailedResultData字段。
300008 App Key解析失败。
300009 获取授权方案失败。
300010 终端不安全。
300011 发送短信失败。

6. SDK UI点击返回码

返回码 描述
100000 授权按钮点击回调。
100001 授权页退出按钮点击回调。