本文为您介绍了iOS客户端如何接入通信授权服务功能。
前提条件
- 确保您已开通通信授权服务,并完成企业信息审核、授权场景审核和添加需要集成SDK的App信息,详情请参见通信授权服务使用流程。
- 设备及系统:
- 支持iOS 10及以上系统。
- 支持模拟器和arm架构。
- 开发工具建议使用Xcode 11及以上。
搭建开发环境
- 登录号码认证产品控制台,在概览页面的右侧,选择授权通信服务选项卡,下载并解压iOS SDK。
- 下载并安装Xcode 11。
- 创建新工程。
打开Xcode 11,在菜单栏选择,创建新工程。
- 导入SDK。
- 在创建的新工程上单击鼠标右键,选择Add Files To“您创建的工程名称”,单击添加CASAuth.framework。
- 在菜单栏选择,将文件CASAuth.framework的Embed值设置为Embed & Sign。
- 在新建工程的plist文件,选择,设置Type为Dictionary,在添加的子文件下增加Allow Arbitrary Loads且将其值设置为YES。

在下载的压缩包中,有三个文件分别是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 |
单击授权页退出按钮回调。 |