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

前提条件

确保您已开通通信授权服务,并完成企业信息审核、授权场景审核和添加需要集成SDK的App信息,详情请参见通信授权服务使用流程

搭建开发环境

  1. 登录号码认证产品控制台,在授权通信服务选项卡,下载并解压Android SDK。下载Android SDK
  2. 将后缀为aar的文件复制至工程的libs目录下。
  3. 在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"/>

功能示例

  • 获取认证实例。
    /*
      显示在授权页底部的自定义协议
      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();

SDK事件返回码

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

SDK UI点击返回码

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