登录  /  免费注册

IOS-本机号码校验

DK

 · 

更新时间:2020-11-12 17:19:45

号码速验服务 iOS SDK 开发接入文档

本机号码校验接口说明

  • 调⽤接⼝setAuthSDKInfo:complete:,初始化SDK秘钥参数。
  • (可选)调⽤接⼝checkEnvAvailableWithAuthType:complete:,检查当前环境是否⽀持本季 号码检验。
  • 调⽤SDK⼀键登录token接口getVerifyTokenWithTimeout:complete:获取本机号码校验 token。
  • 调⽤服务端VerifyMobile接口进⾏本机号码校验。

SDK说明

号码速验服务iOS SDK目前主要提供功能:

  • 获取SDK版本号。
  • SDK接口调用环境检查及准备,检测设备是否开启蜂窝数据网络,且配置SDK相关数据,该步骤是本机号码校验及一键登录功能可以使用的前提条件。
  • 本机号码校验getVerifyTokenWithTimeout:complete:接⼝(⽀持移动,电信,联通三⼤运营 商)请求本机号码校验的凭证,可⾃定义超时时间,默认3.0s,单位s。

    一键登录accelerateLoginPageWithTimeout接口(支持移动,电信,联通三大运营商),是预取号缓存接口,为getLoginTokenWithTimeout接口缓存前置条件,加快授权页的唤起速度。

  • 一键登录getLoginTokenWithTimeout接口(支持移动,电信,联通三大运营商),请求一键登录的凭证,可自定义超时时间,默认3.0s,单位s。

项目设置(非常重要!!)

  • 添加主库

          Targets->General->Linked Frameworks and Libraries 中添加主库ATAuthSDK.framework;

          或者Xcode 11中Targets->General->Frameworks,Libraries, and Embedded Content 中添加主库ATAuthSDK.framework。

  • Targets->BuildSettings设置

         Targets->BuildSettings 中 , Other Linker Flags增加-ObjC,一定要添加此选项,注意是大写C,不是小写c,否则工程运行会cras

  • 添加资源文件

主项右键添加下ATAuthSDK.frameworkATAuthSDK.bundle资源件,否则键登录授权⻚⾯默认的图icon显示不出来。


  • SDK方法说明

主类TXCommonHandler接口简介
获取认证实例(sharedInstance)

/**

*函数名:sharedInstance

    *@param

    *返回:获取该类的单例实例对象

*/

+(instancetype _Nonnull )sharedInstance;

           

获取sdk版本号(getVersion

/**

    * 函数名:getVersion

    * @param

    * 返回:字符串,sdk版本号

*/

-(NSString *_Nonnull)getVersion;

           

设置SDK秘钥(setAuthSDKInfo)

/**

    * 函数名:setAuthSDKInfo

    * @brief 初始化SDK调用参数,app生命周期内调用一次

    * @param  方案对应的秘钥,请登录阿里云控制台后,进入认证方案管理,点击秘钥后复制秘钥,建议维护在业务服务端

    * @param complete 结果同步回调,成功时resultDic=@{resultCode:600000, msg:...},其他情况时"resultCode"值请参考PNSReturnCode

*/

- (void)setAuthSDKInfo:(NSString * _Nonnull)info complete:(void(^_Nullable)(NSDictionary * _Nonnull resultDic))complete;

检查认证环境(checkEnvAvailableWithComplete)

/**

    * 函数名:checkEnvAvailableWithComplete

     * @brief    检查及准备调用环境,resultDic返回PNSCodeSuccess才能调用下面的功能接口,在初次或切换蜂窝网络之后需要重新调用,一般在一次登录认证流程开始前调一次即可

    * @param    complete 异步结果回调,成功时resultDic=@{resultCode:600000, msg:...},其他情况时"resultCode"值请参考PNSReturnCode,只有成功回调才能保障后续接口调用

*/

- (void)checkEnvAvailableWithComplete:(void (^_Nullable)(NSDictionary * _Nullable resultDic))complete;

获取⽇志埋点相关控制对象(getReporter)

/**
* 函数名:getReporter
* @brief 获取志埋点相关控制对象
*/
- (PNSReporter * _Nonnull)getReporter;

加速获取本机号码校验token(accelerateVerifyWithTimeout)

/**
* 函数名:accelerateVerifyWithTimeout
* @param timeout:接超时时间,单位s,默认3.0s,值为0.0时采默认超时时间
* @param complete 结果异步回调到主线程,成功时resultDic=@{resultCode:600000, token:..., msg:...},其他情况时"resultCode"值请参考PNSReturnCode
*/
 - (void)accelerateVerifyWithTimeout:(NSTimeInterval)timeout complete:(void (^_Nullable)(NSDictionary
* _Nonnull resultDic))complete;

本机号码校验获取token(getVerifyTokenWithTimeout)

/**
* 函数名:getVerifyTokenWithTimeout
* @param timeout:接超时时间,单位s,默认3.0s,值为0.0时采默认超时时间
* @param complete 结果异步回调到主线程,成功时resultDic=@{resultCode:600000, token:..., msg:...},其他
情时"resultCode"值请参考PNSReturnCode
*/
 - (void)getVerifyTokenWithTimeout:(NSTimeInterval)timeout complete:(void (^_Nullable)(NSDictionary *
_Nonnull resultDic))complete;

⽇志埋点设置类PNSReporter接⼝简介

设置控制台⽇志输出开关(setConsolePrintLoggerEnable)

/**
* 函数名:setConsolePrintLoggerEnable
* @brief 控制台志输出开关,若开启会以PNS_LOGGER为开始标记对志进输出
 * @param enable 开关参数,默认为NO
*/
 - (void)setConsolePrintLoggerEnable:(BOOL)enable;

设置⽇志及埋点上传开关(setUploadEnable)

/**
* 函数名:setUploadEnable
* @brief 设置志及埋点上传开关,但不会对通过 setupUploader: 实现的定义上传法起作
* @param enable 开关设置BOOL值,默认为YES
*/
- (void)setUploadEnable:(BOOL)enable;

工具类TXCommonUtils接口简介

判断设备蜂窝网络是否开启(checkDeviceCellularDataEnable)

/**
     * 函数名:checkDeviceCellularDataEnable
*/
+ (BOOL)checkDeviceCellularDataEnable;
            

判断当前上网卡是否是中国联通(isChinaUnicom)

/**
     * 函数名:isChinaUnicom
*/
+ (BOOL)isChinaUnicom;
            

判断当前上网卡是否是中国移动(isChinaMobile)

/**
     * 函数名:isChinaMobile
*/
+ (BOOL)isChinaMobile;
            

判断当前上网卡是否是中国电信(isChinaTelecom)

/**
     * 函数名:isChinaTelecom
*/
+ (BOOL)isChinaTelecom;
            

获取当前上网卡网络名称(getCurrentMobileNetworkName)

/**
     * 函数名:getCurrentMobileNetworkName
     * @return ChinaMobile,ChinaUnicom,ChinaTelecom,OtherChinaMobileNetwork,NoChinaMobileNetwork
*/
+ (NSString *)getCurrentMobileNetworkName;
            

获取当前上网卡运营商名称(getCurrentCarrierName)

/**
     * 函数名:getCurrentCarrierName
     * @return:中国移动,中国联通,中国电信等
*/
+ (NSString *)getCurrentCarrierName;
            

获取当前上网网络类型(getNetworktype)

/**
     * 函数名:getNetworktype
     * @returnWiFi4G3G2GNoInternet
*/
+ (NSString *)getNetworktype;
            

判断设备是否有SIM(simSupportedIsOK)

/**
     * 函数名:simSupportedIsOK
     * @return
*/
+ (BOOL)simSupportedIsOK;
            

判断wwan是否开启(isWWANOpen)

/**
     * 函数名:isWWANOpen
     * @breif:判断wwan是否开启(通过p0网卡判断,无wifi或有wifi情况下都能检测到)
*/
+ (BOOL)isWWANOpen;
            

判断无wifiwwan是否开启(reachableViaWWAN)

/**
 * 函数名:reachableViaWWAN
 * @return
 */
+ (BOOL)reachableViaWWAN;
            

获取设备当前网络私网IP地址(getMobilePrivateIPAddress)

/**
    * 函数名:getMobilePrivateIPAddress
    * @return
*/
+ (NSString *)getMobilePrivateIPAddress;            

本机号码校验结果

当您成功获取到getVerifyTokenWithTimeout成功获取token后,将token与输⼿机号码传递您 的服务端,服务端携带token云的verifyMobile即可进最终的校验操作。

常见iOS问题

  • 初始化接口checkGatewayVerifyEnable一直返回NO
    • 排查顺序:1、手机sim卡是否被激活或欠费,2、手机设备蜂窝数据是否开启,3、App的网络权限是否开启,4、设备是否有代理,5、客户端上是否创建了方案号,6、创建方案号中的bundleId一定要与项目中使用的保持一致,7,最后再提供bundleId给我们进行查询日志;
  • 移动卡返回【103101,错误的请求签名】
    • 执行下[NSBundle mainBundle].localizedInfoDictionary语句,如果不为nil,则有国际本地化逻辑,这样的情况,目前有两种方法修复:1,如果.strings文件内容为空且无用,删除即可;2,如果.strings文件必须要使用,则需要在主工程中所有.strings文件中增加CFBundleIdentifier = "bundleId名称"
  • 此号码速验存在失败吗?
    • 肯定存在的,如果是偶现,可以理解,因为比如网络波动导致网关断开、网络不可用、供应商服务端异常,业务方服务端异常等因素有关;如果是持续出现,一般需要运营商协助排查;
  • 为什么最后认证API一定需要服务端请求,而不是纯SDK接入即可?
    • 经过安全风险评估,安全起见,通过业务服务器再请求客户端,能防止纯SDK认证下随意篡改风险。
  • iPhone XS Max双卡双待,经常出现5555错误码,超时失败?
    • 此设备问题,在切换上网卡或更换sim卡,会出现设备已经呈现4G网络,但实际Safari是打不开网页的状态,也就是说实际网络并没有准备好,所以在请求认证前,请先确保Safari能正常打开网页。
  • 什么情况下会出现认证失败,错误码4444?
    • 错误码4444,一般发生在运营商端异常。
  • 如果输入的手机号码不是本机号码,会怎么样?
    • 直接认证失败。
  • 号码速验服务一般只4G或者4G+Wifi情况下认证,如果是3G、2G会怎么样?
    • 中国移动支持2G/3G/4G、中国联通支持3G/4G、中国电信支持4G,但2G和3G网络下接口请求失败或超时概率稍高。
  • 认证失败,怎么排查定位问题?
    • 整个认证链路主要3个接口,1初始化接口与2预取号接口是通过SDK发起的,3认证接口是通过服务端发起的,一般失败发生在接口2和3,通过错误码与错误文案提示,先自行排查。
  • 经常超时?
    • 首先确认sim卡不欠费,再确认手机网络是否正常,通过Safari打开某个网址验证为准。
    • 其次确认超时时间是否设置正确,单位是s。
    • 2G和3G网络下接口请求失败或超时概率稍高。
  • 返回4433错误码,参数为空
    • 首先确认是否开通了方案,再检查App的bundleId与客户端新建方案中的bundlId是否一致。