iOS客户端接入

本文为您介绍iOS客户端本机号码校验的集成方法及接口的功能示例。

说明

在使用过程中如有疑问,可以提交工单联系阿里云技术工程师处理。

下载SDK

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

创建认证方案

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

集成方式

集成分动态库静态库ATAuthSDK_D.frameworkATAuthSDK.framework不能同时集成到工程里,两者是同一个SDK,前者是动态库,后者是静态库。

  • 若您集成静态库,则需要集成以下组件:

    ATAuthSDK.frameworkYTXMonitor.frameworkYTXOperators.framework

  • 若您集成动态库,则需要集成以下组件:

    ATAuthSDK_D.framework

集成静态库操作

  1. 创建工程。

    下载并安装Xcode,点击Create a new Xcode project,根据页面引导创建一个新工程。

  2. 添加主库和系统库。

    • 方式一:在菜单栏选择Targets > Build Phases > Link Binary With Libraries,添加主库ATAuthSDK.frameworkYTXMonitor.frameworkYTXOperators.framework,添加系统库Network.framework33

    • 方式二:在Xcode中Targets > General > Frameworks,Libraries, and Embedded Content,添加主库ATAuthSDK.frameworkYTXMonitor.frameworkYTXOperators.framework,添加系统库Network.framework

      说明

      添加主库时Embed选择Do Not Embed类型。

      35

    iOS12.0版本开始支持Network.framework,请在菜单栏选择Targets > Build Phases > Linked Frameworks and Libraries > Status,将Status设置为弱依赖关系。

  3. BuildSettings设置。

    在菜单栏选择Targets > BuildSettings > Other Linker Flags

    Other Linker Flags增加-ObjC-framework"YTXOperators"image

  4. 添加ATAuthSDK.bundle资源文件。

    主项目右键添加ATAuthSDK.framework > ATAuthSDK.bundle资源⽂件,否则⼀键登录授权页面默认的图片或icon不显示。

    或在Targets > Build Phases > Copy Bundle Resources,添加ATAuthSDK.bundleimage

集成动态库操作

  • 动态库不一定包含模拟器架构,可使用lipo -info指令查询动态库支持的模拟器架构。若因包含模拟器架构而导致编译报错,请使用lipo -thin指令剔除可执行文件中的模拟器架构。

  • 无需将动态库解压文件直接拖到工程中,因解压包含有ATAuthSDK_D.framework.dSYM符号文件,该文件是线上crash符号翻译专用,如果放到工程中会影响App上架审核,只需将ATAuthSDK_D.framework拖进工程即可。

  1. 添加主库。

    • 方式一:在Xcode中Targets > General > Frameworks,Libraries, and Embedded Content,添加主库ATAuthSDK_D.framework

      说明

      添加主库时Embed选择Embed & Sign类型。

      image

    • 方式二:

      Targets > Build Phases > Link Binary With LibrariesEmbed Frameworks,添加主库ATAuthSDK_D.frameworkimage

  2. 添加ATAuthSDK.bundle资源文件。

    主项目右键添加ATAuthSDK.framework > ATAuthSDK.bundle资源⽂件,否则⼀键登录授权页面默认的图片或icon不显示。

    或在Targets > Build Phases > Copy Bundle Resources,添加ATAuthSDK.bundleimage

交互流程详解

完整的功能交互流程请参见本机号码校验交互流程

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;