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

1. 概述

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

2. 准备工作

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

3. 设备以及系统

  • 支持iOS10及以上系统。
  • 支持模拟器和arm架构。

4. 快速开始

  1. 配置开发环境。

    需要安装Xcode11及以上版本。

  2. 创建新工程。

    打开Xcode,按照 file > new > project创建新工程。

  3. 导入SDK。

    SDK库名:CASAuth.framework ,为动态库。

    在下载的压缩包中,存在三个文件,分别是CASAuth.framework,CASAuth.framework.dSYM和ARM文件夹。其中,CASAuth.framework包含了arm架构和模拟器架构,ARM文件夹中的CASAuth.framework为arm架构。

    说明 客户在最终上架AppleStore的包需要使用ARM文件夹下的framework。
    • 在工程上右击选择Add Files To “工程名称”,添加CASAuth.framework。
    • 选择target->General->Frameworks,Libraries,and Embedded Content,将CASAuth.framework Embed设置为Embed & Sign。
    • 工程的plist文件中,添加 App Transport Security Settings类型Dictionary,并在其下增加Allow Arbitrary Loads 且设置为YES。

5. 使用说明

5.1. 创建实例

  1. CASAuthSDK对象即授权通话实例对象,初始化方法为:
    - (id)initWithConfiguration:(CASConfig *)configuration;
  2. CASConfig为授权通话配置类,属性如下:
    /// appKey由客户在控制台上生成得到 必传
    @property(nonatomic, copy) NSString *appKey;
    
    /// schemeId由客户在控制台生生成取得 必传
    @property(nonatomic, copy) NSString *schemeId;
    
    /// 针对合约型用户,传入的授权截止日志 例如2030-03-30
    @property(nonatomic, copy) NSString *expireDate;
    
    /// 授权手机号码 必传
    @property(nonatomic, copy) NSString *phoneNumber;
    
    /// 隐私协议 字典形式,可以多个 必传
    /// 示例:
    ///{
    //    @"title1":@"url1",
    //    @"title2":@"url2"
    ///}
    @property(nonatomic, copy) NSDictionary<NSString *,NSString *>* privacyAgreements;

    其中,appkey和schemeId是在客户控制台中自行获取的。其他参数参见上述说明。

  3. CASAuthSDK提供如下功能方法:
    /// 预加载 主要用来加速获取授权配置信息
    - (void)accelerateAuthInBackgroud:(void (^)(BOOL ret, CASResult *result))block;
    
    /// 获取ui配置对象,可以用来进行UI的自定义设置
    - (id<CASUIConfigureProtocol>)getUIConfigure;
    
    /// 唤起授权页面,返回授权页面视图控制器给调用方使用
    /// @param rootViewController 根视图
    /// @param timeout 超时时间
    - (void)startAuthPageWithRootViewController:(id)rootViewController timeout:(float)timeout completeBlock:(void (^)(BOOL ret, CASResult *result))block;
    
    /// 唤起授权弹框,需要用户传入指定的视图控制器
    /// @param rootViewController 弹起授权框的视图控制器
    /// @param timeout 超时时间
    - (void)startAlertAuthViewWithRootViewController:(id)rootViewController timeout:(float)timeout completeBlock:(void (^)(BOOL ret, CASResult *result))block;
    
    /// 关闭授权页面
    - (void)closeAuthView;

    说明,授权页面的方式分为2种,即弹框模式(Alert)和页面弹出模式(Present),用户可根据需要自行选择模式。accelerateAuthInBackgroud是加速获取授权信息接口,用户如果对速度有要求可以选择在实例化AuthSDK对象后即调用。

  4. CASUIConfigureProtocolUI配置。

    通过 - (id<CASUIConfigureProtocol>)getUIConfigure;接口可以获取UI配置对象,提供了如下接口。

    //title
    
    /// 设置标题字体
    /// @param font 字体
    - (void)setTitleLabelFont:(UIFont *)font;
    
    /// 设置标题文字颜色
    /// @param textColor 文字颜色
    - (void)setTtileLabelTextColor:(UIColor *)textColor;
    
    //middle
    
    /// 设置授权号码显示字体
    /// @param font 字体
    - (void)setPhoneNumberLabelFont:(UIFont *)font;
    
    /// 设置授权号码显示文字颜色
    /// @param color 颜色
    - (void)setPhoneNumberLabelTextColor:(UIColor *)color;
    
    /// 设置验证码发送按钮字体
    /// @param font 字体
    - (void)setVerifyCodeSendButtonFont:(UIFont *)font;
    
    /// 设置验证码发送按钮文字颜色
    /// @param color 颜色
    - (void)setVerifyCodeSendButtonTextColor:(UIColor *)color;
    
    /// 设置验证码发送按钮倒计时文字颜色
    /// @param color 文字颜色
    - (void)setVerifyCodeSendButtonCountdownTextColor:(UIColor *)color;
    
    /// 短信验证码输入框文字颜色
    /// @param color 颜色
    - (void)setVerifyCodeInputViewTextColor:(UIColor *)color;
    
    /// 短信验证码输入框文字字体
    /// @param font 字体
    - (void)setVerifyCodeInputViewFont:(UIFont *)font;
    
    /// 短信验证码输入框PlaceHolder文字颜色
    /// @param color 颜色
    - (void)setVerifyCodeInputViewPlaceHolderTextColor:(UIColor *)color;
    
    /// 短信验证码输入框PlaceHolder文字字体
    /// @param font 字体
    - (void)setVerifyCodeInputViewPlaceHolderTextFont:(UIFont *)font;
    //bottom
    
    /// 协议勾选按钮颜色
    /// @param color 颜色
    - (void)setTermsAgreeButtonColor:(UIColor *)color;
    
    /// 一键授权按钮颜色
    /// @param color 颜色
    - (void)setAuthAgreeButtonColor:(UIColor *)color;
    
    /// 一键授权按钮文字字体
    /// @param font 字体
    - (void)setAuthAgreeButtonTextFont:(UIFont *)font;
    
    /// 一键授权按钮文字颜色
    /// @param color 颜色
    - (void)setAuthAgreeButtonTextColor:(UIColor *)color;
    
    /// 协议项前置文字
    /// @param beforeText 文字
    - (void)setPrivacyBeforeText:(NSString *)beforeText;
    
    /// 协议项后置文字
    /// @param endText 文字
    - (void)setPrivacyEndText:(NSString *)endText;
    
    /// 隐私文本颜色
    /// @param textColor 颜色
    - (void)setPrivacyTextColor:(UIColor *)textColor;
    
    /// 隐私文本字体
    /// @param font 字体
    - (void)setPrivacyTextFont:(UIFont *)font;
    
    /// 隐私文本描述文字颜色
    /// @param textColor 颜色
    - (void)setPrivacyDescriptionTextColor:(UIColor *)textColor;
    
    /// 隐私声明文本字体
    /// @param font 字体
    - (void)setPrivacyNamingLabelFont:(UIFont *)font;
    
    /// 隐私声明文本颜色
    /// @param color 颜色
    - (void)setPrivacyNamingLabelTextColor:(UIColor *)color;
    
    /// 是否禁用弹框
    /// @param enable YES:能弹框  NO:不能弹框
    - (void)toastEnable:(BOOL)enable;
  5. 事件回调。

    授权结果和授权中间状态,以及UI点击事件均有回调,内容如下。

    @required
    
    /// 授权结果回调事件
    /// @param ret YES:授权成功 NO:授权失败
    /// @param result 原因
    - (void)onAuthReponseResult:(BOOL)ret reason:(CASResult *)result;
    
    @optional
    
    /// 发送短信验证码回调事件
    /// @param ret YES:发送成功 NO:发送失败
    /// @param result 原因
    - (void)onAuthSendVerifyCode:(BOOL)ret reason:(CASResult *)result;
    
    /// 授权页面UI点击事件回调
    /// @param code 按钮事件code
    /// @param msgDict 扩展消息
    - (void)onUIClickAction:(CASUIClickCode)code message:(NSDictionary *)msgDict;

6.结果码

事件返回码

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

UI点击返回码

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

示例代码

以我们的demo工程为例,在ViewDidLoad中进行初始化。

    CASConfig *config = [[CASConfig alloc] init];
    config.appKey = @"UDxrUGjWkPy4BVPtG6hV+DtMquBeo/dZKBw+0VisFD/xnz70c5mgefielJXQTq9FPSzbDn19Nmg=";
    config.schemeId = @"1000000170";
    config.phoneNumber = @"18989846651";
    config.expireDate = @"2021-10-10";
    config.privacyAgreements = @{@"《用户隐私政策》":@"https://www.baidu.com"};
    
    self.authSDK = [[CASAuthSDK alloc] initWithConfiguration:config];
    self.authSDK.delegate = (id)self;
    [self.authSDK accelerateAuthInBackgroud:^(BOOL ret, CASResult * _Nonnull result) {

    }];
按钮弹出授权页面调用如下:
 [self.authSDK startAlertAuthViewWithRootViewController:self timeout:5 completeBlock:^(BOOL ret, CASResult * _Nonnull result) {
        NSLog(@"start auth page:%d result:%@", ret, result);
    }];
如果需要修改UI配置,则需要在 授权页面成功弹出后,调用如下代码:
  id<CASUIConfigureProtocol> conf = [self.authSDK getUIConfigure];
    [conf setTitleLabelFont:[UIFont systemFontOfSize:15]];
    [conf setTtileLabelTextColor:[UIColor yellowColor]];
    [conf setPhoneNumberLabelFont:[UIFont systemFontOfSize:10]];
    [conf setPhoneNumberLabelTextColor:[UIColor redColor]];
    [conf setVerifyCodeSendButtonFont:[UIFont systemFontOfSize:13]];
    [conf setVerifyCodeSendButtonTextColor:[UIColor greenColor]];
    [conf setVerifyCodeInputViewTextColor:[UIColor blueColor]];
    [conf setVerifyCodeInputViewFont:[UIFont systemFontOfSize:12]];
    [conf setTermsAgreeButtonColor:[UIColor blackColor]];
    [conf setAuthAgreeButtonColor:[UIColor redColor]];
    [conf setAuthAgreeButtonTextFont:[UIFont systemFontOfSize:12]];
    [conf setAuthAgreeButtonTextColor:[UIColor yellowColor]];

    [conf setPrivacyNamingLabelFont:[UIFont systemFontOfSize:16]];
    [conf setPrivacyNamingLabelTextColor:[UIColor redColor]];

    [conf setPrivacyTextColor:[UIColor redColor]];
    [conf setPrivacyDescriptionTextColor:[UIColor greenColor]];
    [conf setVerifyCodeInputViewPlaceHolderTextColor:[UIColor redColor]];
    [conf setVerifyCodeSendButtonCountdownTextColor:[UIColor greenColor]];
    [conf setPrivacyBeforeText:@"开头文字"];
    [conf setPrivacyEndText:@"结尾文字"];