全部产品
云市场

IOS-本机号码校验

更新时间:2019-08-05 11:42:02

号码认证服务 iOS SDK 开发接入文档

认证流程

  • 调用SDK初始化接口checkGatewayVerifyEnable
  • 调用SDK认证Token接口getAuthTokenWithTimeout
  • 调用业务方服务端API认证接口

SDK说明

阿里通信号码认证服务iOS SDK目前主要提供功能:

  • SDK版本号;
  • 设备网络初始化接口,检测设备是否已开启蜂窝数据网络,这部是号码服务的前置条件
  • 号码认证AuthToken接口(支持移动,电信,联通三大运营商),是请求认证的凭证,可自定义超时时间,默认3.0 s,单位 s;

目前只提供静态库.framework形式。

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

App项目中,需要操作如下:

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

  • Targets->BuildSettings中,设置Enable BitCodeNOOther Linker Flags增加-ObjC一定要添加此选项,注意是大写C,不是小写c,否则工程运行起来会crash!!

  • 由于某运营商还存在http请求,所以请确保Targets->InfoATS开关已开启,并设置为YES

注释:开通阿里云账号与号码认证服务后,在控制台能下载ATAuthSDK.framework库;

主接口简介

  1. /*
  2. * 函数名:sharedInstance
  3. * 参数:无
  4. * 返回:单例
  5. */
  6. + (instancetype _Nonnull )sharedInstance;
  7. /*
  8. * 函数名:getVersion
  9. * 参数:无
  10. * 返回:字符串,sdk版本号
  11. */
  12. - (NSString *_Nonnull)getVersion;
  13. /*
  14. * 函数名:checkGatewayVerifyEnable
  15. * 参数:phoneNumber,手机号码,非必传,号码认证且双sim卡时必须传入待验证的手机号码!!
  16. * 返回:BOOL值,YES表示网关认证所需的蜂窝数据网络已开启,NO表示未开启,只有YES才能保障后续服务
  17. */
  18. - (BOOL)checkGatewayVerifyEnable:(NSString *_Nullable)phoneNumber;
  19. /*
  20. * 函数名:getAuthTokenWithComplete,默认超时时间3.0s
  21. * 参数:无
  22. * 返回:字典形式
  23. * resultCode:6666-成功,5555-超时,4444-失败,3344-参数异常,2222-无网络,1111-无SIM卡
  24. * token:号码认证token
  25. * msg:文案或错误提示
  26. */
  27. - (void)getAuthTokenWithComplete:(void (^_Nullable)(NSDictionary * _Nonnull resultDic))complete;
  28. /*
  29. * 函数名:getAuthTokenWithTimeout
  30. * 参数:timeout:接口超时时间,单位s,默认3.0s,值为0.0时采用默认超时时间
  31. * 返回:字典形式
  32. * resultCode:6666-成功,5555-超时,4444-失败,3344-参数异常,2222-无网络,1111-无SIM卡
  33. * token:号码认证token
  34. * msg:文案或错误提示
  35. */
  36. - (void)getAuthTokenWithTimeout:(NSTimeInterval )timeout complete:(void (^_Nullable)(NSDictionary * _Nonnull resultDic))complete;

接口返回编码resultCode说明

  • 6666,请求成功
  • 5555,请求超时
  • 4444,请求失败,具体错误见msg文案,一般是运营商的异常
  • 1111,设备无SIM卡
  • 2222,设备无移动蜂窝网络
  • 3344,参数为空或异常

接入demo用例

  • 号码认证接入
  1. // 1. 初始化接口,判断环境是否支持号码认证,为YES,才能执行2步骤
  2. self.isEnable = [[TXCommonHandler sharedInstance] checkGatewayVerifyEnable:self.number];
  3. if (!self.isEnable) {
  4. self.resultTextView.text = @"设备无移动数据网络 或 获取供应商信息失败";
  5. return;
  6. }
  7. // 2. 获取认证token,用于3步骤认证接口参数
  8. __weak TXNumberCheckViewController *weakSelf = self;
  9. [[TXCommonHandler sharedInstance] getAuthTokenWithTimeout:self.time complete:^(NSDictionary * _Nonnull resultDic) {
  10. NSString *code = [resultDic valueForKey:@"resultCode"];
  11. NSString *token = [resultDic valueForKey:@"token"];
  12. NSString *msg = [resultDic valueForKey:@"msg"];
  13. if (resultCode.length > 0 && [resultCode isEqualToString:TX_Auth_Result_Success] && token.length > 0) {
  14. // 3.成功,请求业务服务端API,进行认证
  15. }
  16. else {
  17. // 4.失败,切换到业务方其他的认证方法
  18. }
  19. }];

为安全保障,3步骤的认证API,需要业务方服务端接入云通信服务端,才能完成整个链路。

常见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是否一致。