本文为您介绍iOS客户端本机号码校验的集成方法及接口的功能示例。
在使用过程中如有疑问,可以提交工单联系阿里云技术工程师处理。
下载SDK
登录号码认证产品控制台,在概览页面右侧API&SDK区域,单击立即下载,进入API&SDK页面,根据页面提示下载并解压对应SDK。
创建认证方案
您导入项目或调用API接口时,会用到方案Code等参数信息,请先在号码认证产品控制台,创建认证方案,获取方案Code等参数信息。
集成方式
集成分动态库和静态库。ATAuthSDK_D.framework和ATAuthSDK.framework不能同时集成到工程里,两者是同一个SDK,前者是动态库,后者是静态库。
若您集成静态库,则需要集成以下组件:
ATAuthSDK.framework、YTXMonitor.framework和YTXOperators.framework。
若您集成动态库,则需要集成以下组件:
ATAuthSDK_D.framework。
集成静态库操作
创建工程。
下载并安装Xcode,点击Create a new Xcode project,根据页面引导创建一个新工程。
添加主库和系统库。
方式一:在菜单栏选择Targets > Build Phases > Link Binary With Libraries,添加主库ATAuthSDK.framework、YTXMonitor.framework和YTXOperators.framework,添加系统库Network.framework。
方式二:在Xcode中Targets > General > Frameworks,Libraries, and Embedded Content,添加主库ATAuthSDK.framework、YTXMonitor.framework和YTXOperators.framework,添加系统库Network.framework。
说明添加主库时Embed选择Do Not Embed类型。
iOS12.0版本开始支持Network.framework,请在菜单栏选择Targets > Build Phases > Linked Frameworks and Libraries > Status,将Status设置为弱依赖关系。
BuildSettings设置。
在菜单栏选择Targets > BuildSettings > Other Linker Flags。
Other Linker Flags增加
-ObjC
、-framework
、"YTXOperators"
。添加ATAuthSDK.bundle资源文件。
主项目右键添加ATAuthSDK.framework > ATAuthSDK.bundle资源⽂件,否则⼀键登录授权页面默认的图片或icon不显示。
或在Targets > Build Phases > Copy Bundle Resources,添加ATAuthSDK.bundle。
集成动态库操作
动态库不一定包含模拟器架构,可使用
lipo -info
指令查询动态库支持的模拟器架构。若因包含模拟器架构而导致编译报错,请使用lipo -thin
指令剔除可执行文件中的模拟器架构。无需将动态库解压文件直接拖到工程中,因解压包含有ATAuthSDK_D.framework.dSYM符号文件,该文件是线上crash符号翻译专用,如果放到工程中会影响App上架审核,只需将ATAuthSDK_D.framework拖进工程即可。
添加主库。
方式一:在Xcode中Targets > General > Frameworks,Libraries, and Embedded Content,添加主库ATAuthSDK_D.framework。
说明添加主库时Embed选择Embed & Sign类型。
方式二:
在Targets > Build Phases > Link Binary With Libraries和Embed Frameworks,添加主库ATAuthSDK_D.framework。
添加ATAuthSDK.bundle资源文件。
主项目右键添加ATAuthSDK.framework > ATAuthSDK.bundle资源⽂件,否则⼀键登录授权页面默认的图片或icon不显示。
或在Targets > Build Phases > Copy Bundle Resources,添加ATAuthSDK.bundle。
交互流程详解
完整的功能交互流程请参见本机号码校验交互流程。
SDK方法说明
获取认证实例(sharedInstance)
/**
* 获取该类的单例实例对象
* @return 单例实例对象
*/
+ (instancetype _Nonnull )sharedInstance;
使用示例
TXCommonHandler *handller = [TXCommonHandler sharedInstance];
设置SDK密钥(setAuthSDKInfo)
/**
* 初始化SDK调用参数,App生命周期内调用一次
* @param info app对应的密钥
* @param complete 结果异步回调到主线程,成功时resultDic=@{resultCode:600000, msg:...},其他情况时"resultCode"值请参考PNSReturnCode
*/
- (void)setAuthSDKInfo:(NSString * _Nonnull)info complete:(void(^_Nullable)(NSDictionary * _Nonnull resultDic))complete;
使用示例
[[TXCommonHandler sharedInstance] setAuthSDKInfo:@"xxxx"
complete:^(NSDictionary * _Nonnull resultDic) {
NSLog(@"设置密钥结果:%@", resultDic);
}];
加速获取本机号码校验Token(accelerateVerifyWithTimeout)
/**
* 加速获取本机号码校验token,防止调用 getVerifyTokenWithTimeout:complete: 获取token时间过长
* @param timeout 接口超时时间,单位s,默认为3.0s
* @param complete 结果异步回调到主线程,成功时resultDic=@{resultCode:600000, token:..., msg:...},其他情况时"resultCode"值请参考PNSReturnCode
*/
- (void)accelerateVerifyWithTimeout:(NSTimeInterval)timeout complete:(void (^_Nullable)(NSDictionary * _Nonnull resultDic))complete;
使用示例
[[TXCommonHandler sharedInstance] accelerateVerifyWithTimeout:3.0
complete:^(NSDictionary * _Nonnull resultDic) {
NSLog(@"为后面获取本机号码校验Token加个速,加速结果:%@", resultDic);
}];
本机号码校验获取Token(getVerifyTokenWithTimeout)
/**
* 获取本机号码校验Token
* @param timeout 接口超时时间,单位:秒,默认为3.0s
* @param complete 结果异步回调到主线程,成功时resultDic=@{resultCode:600000, token:..., msg:...},其他情况时"resultCode"值请参考PNSReturnCode
*/
- (void)getVerifyTokenWithTimeout:(NSTimeInterval)timeout complete:(void (^_Nullable)(NSDictionary * _Nonnull resultDic))complete;
使用示例
[[TXCommonHandler sharedInstance] getVerifyTokenWithTimeout:3.0
complete:^(NSDictionary * _Nonnull resultDic) {
NSLog(@"获取本机号码校验Token返回:%@", resultDic);
}];
其他接口说明
选调方法:获取版本号
/**
* 获取当前SDK版本号
* @return 字符串,SDK版本号
*/
- (NSString *_Nonnull)getVersion;
使用示例
NSString *version = [[TXCommonHandler sharedInstance] getVersion];
选调方法:环境检查
/**
* 检查当前环境是否支持一键登录或号码认证,resultDic返回 PNSCodeSuccess说明当前环境支持
* @param authType 服务类型 PNSAuthTypeVerifyToken 本机号码校验流程,PNSAuthTypeLoginToken 一键登录流程
* @param complete 结果异步回调到主线程,成功时resultDic=@{resultCode:600000, msg:...},其他情况时"resultCode"值请参考PNSReturnCode,只有成功回调才能保障后续接口调用
*/
- (void)checkEnvAvailableWithAuthType:(PNSAuthType)authType complete:(void (^_Nullable)(NSDictionary * _Nullable resultDic))complete;
使用示例
[[TXCommonHandler sharedInstance] checkEnvAvailableWithAuthType:PNSAuthTypeVerifyToken complete:^(NSDictionary * _Nullable resultDic) {
NSLog(@"环境检查结果:%@",resultDic);
}];
选调方法:设置checkbox选中状态
/**
* 授权页弹起后,修改checkbox按钮选中状态,当checkout按钮隐藏时,设置不生效
*/
- (void)setCheckboxIsChecked:(BOOL)isChecked;
使用示例
[[TXCommonHandler sharedInstance] setCheckboxIsChecked:YES];
选调方法:隐藏一键登录获取登录Token后的等待动画
/**
* 手动隐藏一键登录获取登录Token之后的等待动画,默认为自动隐藏,当设置 TXCustomModel 实例 autoHideLoginLoading = NO 时, 可调用该方法手动隐藏
*/
- (void)hideLoginLoading;
使用示例
[[TXCommonHandler sharedInstance] hideLoginLoading];
日志埋点控制对象
获取到该对象后可以进行相关的日志设置。
/**
* 获取日志埋点相关控制对象
*/
- (PNSReporter * _Nonnull)getReporter;
使用示例
PNSReporter *reporter = [[TXCommonHandler sharedInstance] getReporter];
控制台日志输出开关
/**
* 控制台日志输出开关,若开启会以PNS_LOGGER为开始标记对日志进行输出,Release模式记得关闭!
* @param enable 开关参数,默认为NO
*/
- (void)setConsolePrintLoggerEnable:(BOOL)enable;
使用示例
PNSReporter *reporter = [[TXCommonHandler sharedInstance] getReporter];
[reporter setConsolePrintLoggerEnable:YES];
设置日志及埋点上传开关
/**
* 设置日志及埋点上传开关,但不会对通过 setupUploader: 接口实现的自定义上传方法起作用
* @param enable 开关设置BOOL值,默认为YES
*/
- (void)setUploadEnable:(BOOL)enable;
使用示例
PNSReporter *reporter = [[TXCommonHandler sharedInstance] getReporter];
[reporter setUploadEnable:YES];
工具类TXCommonUtils
判断设备蜂窝网络是否开启(checkDeviceCellularDataEnable)
/**
判断当前设备蜂窝数据网络是否开启,即3G、4G
@return 结果
*/
+ (BOOL)checkDeviceCellularDataEnable;
判断当前上网卡是否是中国联通(isChinaUnicom)
/**
判断当前上网卡运营商是否是中国联通
@return 结果
*/
+ (BOOL)isChinaUnicom;
判断当前上网卡是否是中国移动(isChinaMobile)
/**
判断当前上网卡运营商是否是中国移动
@return 结果
*/
+ (BOOL)isChinaMobile;
判断当前上网卡是否是中国电信(isChinaTelecom)
/**
判断当前上网卡运营商是否是中国电信
@return 结果
*/
+ (BOOL)isChinaTelecom;
获取当前上网卡运营商名称(getCurrentCarrierName)
/**
获取当前上网卡运营商名称,比如中国移动、中国电信、中国联通
@return 结果
*/
+ (NSString *)getCurrentCarrierName;
获取当前上网网络类型(getNetworktype)
/**
获取当前上网卡网络类型,比如Wi-Fi,4G
@return 结果
*/
+ (NSString *)getNetworktype;
判断设备是否有SIM卡(simSupportedIsOK)
/**
判断当前设备是否有SIM卡
@return 结果
*/
+ (BOOL)simSupportedIsOK;
判断无线网络是否开启(isWWANOpen)
/**
判断无线网络是否开着(通过p0网卡判断,无Wi-Fi或有Wi-Fi情况下都能检测到)
@return 结果
*/
+ (BOOL)isWWANOpen;
判断无Wi-Fi下无线网络是否开启(reachableViaWWAN)
/**
判断无线网络是否开启(仅无Wi-Fi情况下)
@return 结果
*/
+ (BOOL)reachableViaWWAN;
获取设备当前网络私网IP地址(getMobilePrivateIPAddress)
/**
获取设备当前网络私网IP地址
@return 结果
*/
+ (NSString *)getMobilePrivateIPAddress:(BOOL)preferIPv4;
获取当前设备的唯一标识ID(getUniqueID)
/**
获取当前设备的唯一标识ID,用于埋点的精确查找使用
*/
+ (NSString *)getUniqueID;
通过颜色设置生成图片(imageWithColor)
/**
通过颜色设置生成图片,支持弧度设置,比如一键登录按钮背景图片
*/
+ (UIImage *)imageWithColor:(UIColor *)color size:(CGSize)size isRoundedCorner:(BOOL )isRounded radius:(CGFloat)radius;