本文为您介绍了iOS客户端如何接入短信认证功能。

1.概述

官网下载SDK后进行解压,解压后包含四个文件目录是:
  • iOS SDK开发接入文档。
  • SmsAuthSDK.framework(短信验证SDK)。
  • YTXMonitor.framework(埋点组件)。
  • Demo工程(场景化Demo工程,通过在控制台下载DEMO压缩包)。

2.准备工作

  • 请确保您的终端设备已经开启了网络。
  • 请确保已经在阿里云控制台开通了号码认证服务并创建了对应的短信验证码方案,以及短信签名、模版均已绑定该方案。
  • 您也可以登录阿里云官网查看接入流程,单击查看完整使用流程。

3.开发环境搭建

注意 应用必须运行在iOS 9.0+平台上。

添加主库

Targets > General > Linked Frameworks and Libraries中添加主库SmsAuthSDK.framework,YTXMonitor.framework;添加主库1
或者Xcode 11中Targets > General > Frameworks,Libraries,and Embedded Content中添加主库SmsAuthSDK.framework,YTXMonitor.framework(因为两个依赖库都属于静态库,所以Embed应该选Do Not Embed);添加主库2

4.SDK方法说明

4.1主类SmsVerifyCodeManager方法介绍

获取实例

/**
 *  初始化SDK实例
 *  @param  sceneCode   方案号,必传字段
 *  @return SDK操作实例
 */
- (instancetype)initWithSceneCode:(NSString *)sceneCode;

获取SDK版本号

/**
 *  获取SDK版本号
 *  @return SDK版本号
 */
- (NSString *)getVersion;

设置SmsTokens更新代理对象(id<SmsTokenUpadterDelegate>

/**
 *  设置token更新代理对象
 *  @param  tokenUpdateDelegate token更新代理对象,注:SDK内部对该对象是弱引用,需要外部来维护其生命
 */
- (void)setTokenUpdateDelegate:(id<SmsTokenUpadterDelegate>)tokenUpdateDelegate;

发送短信验证码

/**
 *  发送短信验证码
 *  @param  timeout 接口超时时间(单位:s)
 *  @param  countryCode 国际电话区号,目前仅作为保留字段,当前版本只支持86(即中国大陆的电话号码)
 *  @param  phoneNumber 手机号
 *  @param  complete 接口调用结果回调
 */
- (void)sendVerifyCodeWithTimeout:(NSTimeInterval)timeout
                      countryCode:(int)countryCode
                      phoneNumber:(NSString *)phoneNumber
                         complete:(void(^)(SmsSendCodeResult *result))complete;

清空本地SmsTokens缓存

/**
 *  清空本地 SmsTokens 缓存
 */
- (void)clearTokenCache;

4.2 SmsTokens实体类

/// sts token
@property (nonatomic, copy) NSString *stsToken;
/// biz token
@property (nonatomic, copy) NSString *bizToken;
/// token 过期时间,单位 ms
@property (nonatomic, assign) long long expiredTimeMills;
/// 临时accessKeyId
@property (nonatomic, copy) NSString *accessKeyId;
/// 临时accessKeySecret
@property (nonatomic, copy)SmsSendCodeResult NSString *accessKeySecret;

4.3 SmsSendCodeResult实体类

/// 请求对应的requestId,记录下来方便后面问题的全链路排查
@property (nonatomic, copy) NSString *requestId;
/// 请求返回的code,具体请参考 SmsReturnCode.h
@property (nonatomic, copy) NSString *code;
/// 请求返回的msg
@property (nonatomic, copy) NSString *msg;
/// 发送验证码请求返回的 token
@property (nonatomic, copy) NSString *smsVerifyToken;
/// 接口请求失败返回的详细内容
@property (nonatomic, strong) NSDictionary *failedResponseData;

4.4 SmsTokens更新代理

SDK发送短信验证码时需要用到两个Token,一个是BizToken,一个是STS Token(包含ak信息)。这两个token可以从GetSmsAuthTokens获取。具体调用方法及推荐的使用流程可参见官网文档流程介绍部分。

@protocol SmsTokenUpadterDelegate <NSObject>
@required
/**
 *  返回最新的 SmsTokens 对象
 */
- (SmsTokens *)updateTokenWithVerifyCodeManager:(SmsVerifyCodeManager *)verifyCodeManager;
@end

SDK在检测到本地缓存中没有有效SmsTokens时(不存在或者已过期)则会调用updateTokenWithVerifyCodeManager方法,开发者需要实现该代理方法,并且获取到Token后,封装成SmsTokens返回给SDK。

注意 这里需要发送网络请求获取相关参数,但是该方法需要同步返回结果,所以需要自己用信号量做同步,这里属于私有线程,请您放心做同步,不会卡顿主线程。具体可以参考Demo示例。

5. SDK返回码

进行错误码处理的时候推荐直接使用SmsReturnCode.h中的常量字符来比对处理,不建议直接使用值。

返回码 信息 建议处理方法
600000 成功。 -
600001 网络不可用。 手机没有可用的网络链接,建议用户切换网络。
600002 手机号非法。 手机号格式错误,或者非有效的手机号。
600003 Token获取失败。 sts token或者biz token获取失败、为空,可检查相应字段。
600010 请求超时。 需要根据日志和环境信息具体排查,可联系阿里云客服。
600011 鉴权失败。 sts token鉴权失败或者其信息与biz token不对应(账号关系),可检查账号信息、方案信息、包名、签名等。
600012 BizToken错误。 BizToken错误,建议重新申请。
600013 STS Token错误。 STS Token错误,建议重新申请STS Token。
600014 STS Token过期。 STS Token过期,建议重新申请STS Token。
600015 BizToken过期。 BizToken已过期,建议重新申请。
600016 验证码发送频次超出限制。 同一个号码每分钟、每小时或每日发送频次超过限制(具体限制次数,请自行查阅短信验证码控制台)。
600050 未知异常。 联系阿里云客服进行排查。