跳转到主要内容
PRODUCT DOCUMENTS

快速找到所需文档,高效完成接入与排障

浏览产品文档与友盟 Skill,展开目录并阅读正文。

本机号码认证

开发指南-IOS:本机号码认证

概述


号码认证服务包含本机号码认证和一键登录两个不同的功能,使用场景不一样,无需一起使用。

本机号码认证使用场景:用户输入手机号码,通过SDK获取token(通过getVerifyTokenWithTimeout获得),服务端携带输入的手机号码和token去运营商网关进行校验(服务端调用VerifyMobile接口),返回的结果是用户当前上网使用的号码与输入的号码是否一致。

一键登录使用场景:用户无需输入手机号码,SDK会拉起授权页,用户确认授权后,SDK会获取token(通过getLoginTokenWithTimeout获得),服务端携带token到运营商网关获取用户当前上网使用的号码(服务端调用GetMobile接口),并返回给App服务端。

1.3.0版本升级说明


1.删除工程中TYRZResource.bundle

2.+ (void)checkEnvAvailableWithComplete:(void (^_Nullable)(NSDictionary _Nullable resultDic))complete;接口改为+ (void)checkEnvAvailableWithAuthType:(UMPNSAuthType)authType complete:(void (^_Nullable)(NSDictionary _Nullable resultDic))complete;并增加UMPNSAuthType分为服务类型 UMPNSAuthTypeVerifyToken 本机号码校验流程,UMPNSAuthTypeLoginToken 一键登录流程。

准备工作


a) 请确保您的终端设备已经开启了4G网络(联通、移动支持3G网络,但接口耗时会增加)

b) 请确保已经在友盟+控制台开通了号码认证服务并创建了对应的方案,点击进入友盟+控制台。方案创建成功后,联通电信可立即使用,移动需等待10分钟后使用。

c) 您也可以登录友盟+官网查看接入流程,点击查看完整使用流程。

认证流程


调用接口setVerifySDKInfo,初始化SDK秘钥参数

调用接口checkEnvAvailableWithAuthType,检查及准备SDK环境

调用SDK认证Token接口getVerifyTokenWithTimeout

调用开发者服务端API认证接口

运行demo工程


==解压后包含UMVerifyDemo工程,您需要将AppKey、bundleID和开发者证书修改为您自己的。==

开发环境搭建

1.添加主库


Targets->General->Linked Frameworks and Librarie中添加主库UMVerify.framework,YTXMonitor.framework,YTXOperators.framework;

verify1

2.Targets->BuildSettings设置


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

5

3.Targets->Info设置

6

4.添加资源文件


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

SDK 使用说明

1.SDK功能介绍


友盟+号码认证iOS SDK目前主要提供功能,目前仅提供静态库UMVerify.framwork形式。
获取SDK版本号。

SDK接口调用环境检查及准备,检测设备是否开启蜂窝数据网络,且配置SDK相关数据,该步骤是本机号码认证及一键登录功能可以使用的前提条件。

本机号码认证getVerifyTokenWithTimeout接口(支持移动,电信,联通三大运营商),请求本机号码认证的凭证,可自定义超时时间,默认3.0s,单位s。

2 本机号码认证接口调用说明

  1. 调用接口setVerifySDKInfo,初始化SDK秘钥参数
  2. (可选)调用接口checkEnvAvailableWithAuthType,检查当前环境是否支持本机号码验证
  3. 调用SDK本机号码认证获取token接口getVerifyTokenWithTimeout获取本机号码认证token
  4. 调用服务端VerifyMobile接口进行本机号码认证

SDK方法说明

主类UMCommonHandler接口简介

获取sdk版本号(getVersion)

  1. /**
  2. * 函数名:getVersion
  3. * @param 无
  4. * 返回:字符串,sdk版本号
  5. */
  6. -(NSString *_Nonnull)getVersion;

设置SDK秘钥(setVerifySDKInfo)

  1. /**
  2. * 函数名:setVerifySDKInfo
  3. * @brief 初始化SDK调用参数,app生命周期内调用一次
  4. * @param 方案对应的秘钥,请登录友盟+控制台后,进入认证方案管理,点击秘钥后复制秘钥,建议维护在业务服务端
  5. * @param complete 结果同步回调,成功时resultDic=@{resultCode:600000, msg:...},其他情况时"resultCode"值请参考PNSReturnCode
  6. */
  7. - (void)setVerifySDKInfo:(NSString * _Nonnull)info complete:(void(^_Nullable)(NSDictionary * _Nonnull resultDic))complete;

检查认证环境(checkEnvAvailableWithAuthType)

  1. /**
  2. * 检查当前环境是否支持一键登录或号码认证,resultDic 返回 PNSCodeSuccess 说明当前环境支持
  3. * @param authType 服务类型 UMPNSAuthTypeVerifyToken 本机号码校验流程,UMPNSAuthTypeLoginToken 一键登录流程
  4. * @param complete 同步结果回调,成功时resultDic=@{resultCode:600000, msg:...},其他情况时"resultCode"值请参考PNSReturnCode,只有成功回调才能保障后续接口调用
  5. */
  6. + (void)checkEnvAvailableWithAuthType:(UMPNSAuthType)authType complete:(void (^_Nullable)(NSDictionary * _Nullable resultDic))complete;

本机号码认证获取token(getVerifyTokenWithTimeout)

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

获取verifyId(getVerifyId)

  1. /**
  2. * 获取智能认证ID
  3. */
  4. + (NSString *_Nonnull)getVerifyId;

工具类UMCommonUtils接口简介

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

  1. /**
  2. * 函数名:checkDeviceCellularDataEnable
  3. */
  4. + (BOOL)checkDeviceCellularDataEnable;

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

  1. /**
  2. * 函数名:isChinaUnicom
  3. */
  4. + (BOOL)isChinaUnicom;

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

  1. /**
  2. * 函数名:isChinaMobile
  3. */
  4. + (BOOL)isChinaMobile;

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

  1. /**
  2. * 函数名:isChinaTelecom
  3. */
  4. + (BOOL)isChinaTelecom;

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

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

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

  1. /**
  2. * 函数名:getNetworktype
  3. * @return:WiFi,4G,3G,2G,NoInternet等
  4. */
  5. + (NSString *)getNetworktype;

判断设备是否有SIM卡(simSupportedIsOK)

  1. /**
  2. * 函数名:simSupportedIsOK
  3. * @return:
  4. */
  5. + (BOOL)simSupportedIsOK;

判断wwan是否开启(isWWANOpen)

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

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

  1. /**
  2. * 函数名:getMobilePrivateIPAddress
  3. * @return:
  4. */
  5. + (NSString *)getMobilePrivateIPAddress;

一键登录获取手机号


当您成功获取到getLoginTokenWithTimeout成功获取token后,将token传递至您的服务端,服务端携带token调用友盟+的getMobile接口即可进行最终的取号操作。

SDK返回码


该返回码为友盟+号码认证SDK⾃身的返回码,请注意600011及600012错误内均含有运营商返回码,具体错误在碰到之后查阅运营商SDK返回码

返回码 返回码描述 建议
600000 获取token成功 无
600004 获取运营商配置信息失败 创建工单联系工程师
600007 未检测到sim卡 提示用户检查 SIM 卡后重试
600008 蜂窝网络未开启 提示用户开启移动网络后重试
600009 无法判断运营商 创建工单联系工程师
600010 未知异常 创建工单联系工程师
600011 获取token失败 切换到其他登录方式
600012 预取号失败 切换到其他登录方式
600013 运营商维护升级,该功能不可用 创建工单联系工程师
600014 运营商维护升级,该功能已达最大调用次数 创建工单联系工程师
600015 接口超时 切换到其他登录方式
600017 AppID、Appkey解析失败 创建工单联系工程师
600021 点击登录时检测到运营商已切换 切换到其他登录方式
600025 终端环境检查失败(终端不支持认证/终端检测参数错误) 检查接口调用传参是否正确
600026 授权⻚已加载时不允许调⽤加速 或预取号接⼝ 授权⻚显示期间,不允许调⽤预取号接⼝

SDK接入demo用例

本机号码认证调用demo

  1. NSString *info = @"客户的秘钥串";
  2. __weak typeof(self) weakSelf = self;
  3. //设置SDK参数,app生命周期内调用一次即可
  4. [UMCommonHandler setVerifySDKInfo:info complete:^(NSDictionary * _Nonnull resultDic) {
  5. [weakSelf showResult:resultDic];
  6. }];
  7. __block BOOL support = YES;
  8. [UMCommonHandler checkEnvAvailableWithAuthType:UMPNSAuthTypeVerifyToken complete:^(NSDictionary * _Nullable resultDic) {
  9. support = [PNSCodeSuccess isEqualToString:[resultDic objectForKey:@"resultCode"]];
  10. }];
  11. if (self.tf_phoneNumber.text.length == 0) {
  12. [ProgressHUD showError:@"请先输入手机号码"];
  13. return;
  14. }
  15. float timeout = self.tf_timeout.text.floatValue;
  16. [ProgressHUD show:@"请稍等..." Interaction:YES];
  17. __weak typeof(self) weakSelf = self;
  18. //1. 获取 VerifyToken
  19. [UMCommonHandler getVerifyTokenWithTimeout:timeout complete:^(NSDictionary * _Nonnull resultDic) {
  20. if ([PNSCodeSuccess isEqualToString:[resultDic objectForKey:@"resultCode"]] == NO) {
  21. [ProgressHUD showError:@"获取 VerifyToken失败"];
  22. [weakSelf showResult:resultDic];
  23. return ;
  24. }
  25. //2. 去服务器验证 VerifyToken
  26. [weakSelf showResult:resultDic];
  27. NSString *token = [resultDic objectForKey:@"token"];
  28. //注: 这里请求是通过自己服务器, 下面仅供参考
  29. [PNSVerifyTopRequest requstVerifyWithNumber:weakSelf.tf_phoneNumber.text token:token complete:^(BOOL isSuccess, NSString * _Nonnull msg, NSDictionary * _Nonnull data) {
  30. NSDictionary *module = data[@"module"];
  31. NSString *verify_result = [module objectForKey:@"verify_result"];
  32. if ([verify_result isEqualToString:@"PASS"]) {
  33. [ProgressHUD showSuccess:@"本机号码认证成功"];
  34. } else {
  35. [ProgressHUD showSuccess:@"本机号码认证失败"];
  36. }
  37. [weakSelf showResult:data];
  38. }];
  39. }];