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

前提条件

  • 确保您已开通通信授权服务,并完成企业信息审核、授权场景审核和添加需要集成SDK的App信息,详情请参见通信授权服务使用流程
  • 设备及系统:
    • 支持iOS 10及以上系统。
    • 支持模拟器和arm架构。
  • 开发工具建议使用Xcode 11及以上。

搭建开发环境

  1. 登录号码认证产品控制台,在概览页面的右侧,选择授权通信服务选项卡,下载并解压iOS SDK。
  2. 下载并安装Xcode 11
  3. 创建新工程。
    打开Xcode 11,在菜单栏选择File > New > Project...,创建新工程。
  4. 导入SDK。
    1. 在创建的新工程上单击鼠标右键,选择Add Files To“您创建的工程名称”,单击添加CASAuth.framework。
    2. 在菜单栏选择TARGETS > General > Frameworks, Libraries, and Embedded Content,将文件CASAuth.framework的Embed值设置为Embed & Sign
    3. 在新建工程的plist文件,选择Custom iOS Target Properties > App Transport Security Settings,设置TypeDictionary,在添加的子文件下增加Allow Arbitrary Loads且将其值设置为YESimage07
    在下载的压缩包中,有三个文件分别是CASAuth.framework、CASAuth.framework.dSYM和ARM文件夹。其中CASAuth.framework包含了arm架构和模拟器架构,ARM文件夹中的CASAuth.framework包含了arm架构。
    说明 CASAuth.framework是SDK的动态库,用户在最终上架App Store的包需要使用ARM文件夹下的framework。

创建实例

  • CASAuthSDK对象即授权通话实例对象,初始化方法为:
    - (id)initWithConfiguration:(CASConfig *)configuration;
  • 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;
  • 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;
    授权页面弹出的模式有两种,分别是弹框模式(Alert)和页面弹出模式(Present),您可根据需要自行选择模式。accelerateAuthInBackgroud是加速获取授权信息接口,如果您对速度有要求可以在实例化AuthSDK对象后调用。
  • 通过 - (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;
  • 事件回调。
    授权结果和授权中间状态以及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;

示例代码

  • 以Demo工程为例,在ViewDidLoad中进行初始化。
        CASConfig *config = [[CASConfig alloc] init];
        config.appKey = @"yourappKey";
        config.schemeId = @"100000****";
        config.phoneNumber = @"1898984****";
        config.expireDate = @"2021-10-10";
        config.privacyAgreements = @{@"《用户隐私政策》":@"https://example.aliyundoc.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:@"结尾文字"];

SDK事件返回码

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

SDK UI点击返回码

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