iOS客户端接入

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

下载SDK

登录号码认证产品控制台,在概览页面右侧API&SDK区域,单击立即下载,进入API&SDK页面,根据页面提示下载并解压对应SDK。

创建认证方案

您导入项目或调用API接口时,会用到方案Code等参数信息,请先在号码认证产品控制台创建认证方案,获取方案Code等参数信息。

开始集成

  1. 下载并安装Xcode 11

  2. 添加主库。

    方式一:

    选择Targets > Build Phases > Link Binary With Libraries,添加主库YTXMonitor.frameworkSmsAuthSDK.framework,并将Status设置为Requiredimage方式二:

    选择Targets > General > Frameworks, Libraries, and Embedded ContentSmsAuthSDK.frameworkYTXMonitor.framework两个依赖库都属于静态库,将Embed设置为Do Not Embedimage

交互流程详解

完整的功能交互流程请参见短信认证的交互流程

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。

重要

使用该方法时需要发送网络请求获取相关参数,同时也会同步返回结果。在此过程中需要使用信号量做同步且属于私有线程,不会卡顿主线程,请放心同步。