本文为您介绍了iOS客户端如何接入短信验证码功能。
下载SDK
登录号码认证产品控制台,在概览页面右侧API&SDK区域,单击立即下载,进入API&SDK页面,根据页面提示下载并解压对应SDK。
创建认证方案
您导入项目或调用API接口时,会用到方案Code等参数信息,请先在号码认证产品控制台,创建认证方案,获取方案Code等参数信息。
开始集成
下载并安装Xcode 11。
添加主库。
方式一:
选择
,添加主库YTXMonitor.framework、SmsAuthSDK.framework,并将Status设置为Required。方式二:选择
,SmsAuthSDK.framework、YTXMonitor.framework两个依赖库都属于静态库,将Embed设置为Do Not Embed。
交互流程详解
完整的功能交互流程请参见短信认证的交互流程。
SDK方法说明
获取实例
/**
* 初始化SDK实例
* @param sceneCode 方案号,必传字段
* @return SDK操作实例
*/
- (instancetype)initWithSceneCode:(NSString *)sceneCode;
使用示例
SmsVerifyCodeManager *manager = [SmsVerifyCodeManager alloc] initWithSceneCode:@"xxx"];
设置SmsTokens更新代理对象(id<SmsTokenUpadterDelegate>)
/**
* 设置Token更新代理对象
* @param tokenUpdateDelegate token更新代理对象,注:SDK内部对该对象是弱引用,需要外部来维护其生命
*/
- (void)setTokenUpdateDelegate:(id<SmsTokenUpadterDelegate>)tokenUpdateDelegate;
使用示例
SmsVerifyCodeManager *manager = [SmsVerifyCodeManager alloc] initWithSceneCode:@"xxx"];
[manager setTokenUpdateDelegate:self];
发送短信验证码
/**
* 发送短信验证码
* @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;
使用示例
[manager sendVerifyCodeWithTimeout:10 countryCode:86 phoneNumber:@"12345678910" complete:^(SmsSendCodeResult * _Nonnull result) {
NSLog(@"requestId = %@, code = %@, msg = %@, smsVerifyToken = %@, failedResponseData = %@", result.requestId, result.code, result.msg, result.smsVerifyToken, result.failedResponseData);
}];
其他接口说明
获取SDK版本号
/**
* 获取SDK版本号
* @return SDK版本号
*/
- (NSString *)getVersion;
使用示例
NSString *version = [manager getVersion];
清空本地SmsTokens缓存
/**
* 清空本地 SmsTokens 缓存
*/
- (void)clearTokenCache;
使用示例
[manager clearTokenCache];
实体类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;
实体类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;
回调说明
SDK发送短信验证码时需要用到BizToken、StsToken(包含AccessKey信息)两个Token。调用方法详情请参见GetSmsAuthTokens。
@protocol SmsTokenUpadterDelegate <NSObject>
@required
/**
* 返回最新的SmsTokens 对象
*/
- (SmsTokens *)updateTokenWithVerifyCodeManager:(SmsVerifyCodeManager *)verifyCodeManager;
@end
SDK在检测到本地缓存中没有有效SmsTokens
(不存在或者已过期)时,则会调用updateTokenWithVerifyCodeManager
方法,开发者需要实现该代理方法,并且获取到Token后,封装成SmsTokens
返回给SDK。
重要
使用该方法时需要发送网络请求获取相关参数,同时也会同步返回结果。在此过程中需要使用信号量做同步且属于私有线程,不会卡顿主线程,请放心同步。
文档内容是否对您有帮助?