本文为您介绍了iOS客户端如何接入短信验证码功能。
前提条件
- 确保您的终端设备已经开启了移动数据网络。
- 确保您已开通了号码认证服务,并成功创建了对应的短信验证码方案且短信签名、模板均已与该方案绑定,详情请参见短信认证使用流程。
- 应用须在iOS 9.0版本及以上平台上运行。
搭建开发环境
SDK方法说明
- 主类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;
- 获取实例
- 实体类SmsTokens
/// stsToken @property (nonatomic, copy) NSString *stsToken; /// bizToken @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;
- 实体类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;
- SmsTokens更新代理SDK发送短信验证码时需要用到BizToken、StsToken(包含AccessKey信息)两个Token。调用方法详情请参见GetSmsAuthTokens。
@protocol SmsTokenUpadterDelegate <NSObject> @required /** * 返回最新的SmsTokens对象 */ - (SmsTokens *)updateTokenWithVerifyCodeManager:(SmsVerifyCodeManager *)verifyCodeManager; @end
SDK在检测到本地缓存中没有有效SmsTokens
(不存在或者已过期)时,则会调用updateTokenWithVerifyCodeManager
方法,开发者需要实现该代理方法,并且获取到Token后,封装成SmsTokens
返回给SDK。重要 使用该方法时需要发送网络请求获取相关参数,同时也会同步返回结果。在此过程中需要使用信号量做同步且属于私有线程,不会卡顿主线程,请放心同步。具体可以参见Demo工程。
SDK返回码
处理错误码时,建议您直接参见SmsReturnCode.h文件中的常量字符进行比对处理,不建议直接使用数值。
返回码 | 返回码描述 | 原因/解决方法 |
---|---|---|
600000 | 成功。 | 无。 |
600001 | 网络不可用。 | 无可用的网络连接,建议您切换网络。 |
600002 | 手机号非法。 | 手机号格式错误或无效的手机号。 |
600003 | Token获取失败。 | StsToken 或者BizToken 获取失败、为空,建议您检查相应字段。 |
600010 | 请求超时。 | 具体需要根据日志和环境信息排查,请联系阿里云客服进行排查。 |
600011 | 鉴权失败。 | StsToken 鉴权失败或者其信息与BizToken 不对应(账号关系),可检查账号信息、方案信息、包名、签名等。 |
600012 | BizToken错误。 | BizToken错误,建议重新申请。 |
600013 | StsToken错误。 | StsToken错误,建议重新申请StsToken。 |
600014 | StsToken过期。 | StsToken过期,建议重新申请StsToken。 |
600015 | BizToken过期。 | BizToken已过期,建议重新申请。 |
600016 | 验证码发送频次超出限制。 | 同一个号码每分钟、每小时或每日发送频次超过限制。具体限制次数,请登录号码认证产品控制台,单击通用设置查看详情。 |
600050 | 未知异常。 | 请联系阿里云客服进行排查。 |