本机号码认证
开发指南-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;

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

3.Targets->Info设置

4.添加资源文件
主项⽬右键添加下ATAuthSDK.bundle资源⽂件,否则⼀键登录授权⻚⾯默认的图⽚或icon显示不出来;
SDK 使用说明
1.SDK功能介绍
友盟+号码认证iOS SDK目前主要提供功能,目前仅提供静态库UMVerify.framwork形式。
获取SDK版本号。
SDK接口调用环境检查及准备,检测设备是否开启蜂窝数据网络,且配置SDK相关数据,该步骤是本机号码认证及一键登录功能可以使用的前提条件。
本机号码认证getVerifyTokenWithTimeout接口(支持移动,电信,联通三大运营商),请求本机号码认证的凭证,可自定义超时时间,默认3.0s,单位s。
2 本机号码认证接口调用说明
- 调用接口setVerifySDKInfo,初始化SDK秘钥参数
- (可选)调用接口checkEnvAvailableWithAuthType,检查当前环境是否支持本机号码验证
- 调用SDK本机号码认证获取token接口getVerifyTokenWithTimeout获取本机号码认证token
- 调用服务端VerifyMobile接口进行本机号码认证
SDK方法说明
主类UMCommonHandler接口简介
获取sdk版本号(getVersion)
/*** 函数名:getVersion* @param 无* 返回:字符串,sdk版本号*/-(NSString *_Nonnull)getVersion;
设置SDK秘钥(setVerifySDKInfo)
/*** 函数名:setVerifySDKInfo* @brief 初始化SDK调用参数,app生命周期内调用一次* @param 方案对应的秘钥,请登录友盟+控制台后,进入认证方案管理,点击秘钥后复制秘钥,建议维护在业务服务端* @param complete 结果同步回调,成功时resultDic=@{resultCode:600000, msg:...},其他情况时"resultCode"值请参考PNSReturnCode*/- (void)setVerifySDKInfo:(NSString * _Nonnull)info complete:(void(^_Nullable)(NSDictionary * _Nonnull resultDic))complete;
检查认证环境(checkEnvAvailableWithAuthType)
/*** 检查当前环境是否支持一键登录或号码认证,resultDic 返回 PNSCodeSuccess 说明当前环境支持* @param authType 服务类型 UMPNSAuthTypeVerifyToken 本机号码校验流程,UMPNSAuthTypeLoginToken 一键登录流程* @param complete 同步结果回调,成功时resultDic=@{resultCode:600000, msg:...},其他情况时"resultCode"值请参考PNSReturnCode,只有成功回调才能保障后续接口调用*/+ (void)checkEnvAvailableWithAuthType:(UMPNSAuthType)authType complete:(void (^_Nullable)(NSDictionary * _Nullable 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;
获取verifyId(getVerifyId)
/*** 获取智能认证ID*/+ (NSString *_Nonnull)getVerifyId;
工具类UMCommonUtils接口简介
判断设备蜂窝网络是否开启(checkDeviceCellularDataEnable)
/*** 函数名:checkDeviceCellularDataEnable*/+ (BOOL)checkDeviceCellularDataEnable;
判断当前上网卡是否是中国联通(isChinaUnicom)
/*** 函数名:isChinaUnicom*/+ (BOOL)isChinaUnicom;
判断当前上网卡是否是中国移动(isChinaMobile)
/*** 函数名:isChinaMobile*/+ (BOOL)isChinaMobile;
判断当前上网卡是否是中国电信(isChinaTelecom)
/*** 函数名:isChinaTelecom*/+ (BOOL)isChinaTelecom;
获取当前上网卡运营商名称(getCurrentCarrierName)
/*** 函数名:getCurrentCarrierName* @return:中国移动,中国联通,中国电信等*/+ (NSString *)getCurrentCarrierName;
获取当前上网网络类型(getNetworktype)
/*** 函数名:getNetworktype* @return:WiFi,4G,3G,2G,NoInternet等*/+ (NSString *)getNetworktype;
判断设备是否有SIM卡(simSupportedIsOK)
/*** 函数名:simSupportedIsOK* @return:*/+ (BOOL)simSupportedIsOK;
判断wwan是否开启(isWWANOpen)
/*** 函数名:isWWANOpen* @breif:判断wwan是否开启(通过p0网卡判断,无wifi或有wifi情况下都能检测到)*/+ (BOOL)isWWANOpen;
获取设备当前网络私网IP地址(getMobilePrivateIPAddress)
/*** 函数名:getMobilePrivateIPAddress* @return:*/+ (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
NSString *info = @"客户的秘钥串";__weak typeof(self) weakSelf = self;//设置SDK参数,app生命周期内调用一次即可[UMCommonHandler setVerifySDKInfo:info complete:^(NSDictionary * _Nonnull resultDic) {[weakSelf showResult:resultDic];}];__block BOOL support = YES;[UMCommonHandler checkEnvAvailableWithAuthType:UMPNSAuthTypeVerifyToken complete:^(NSDictionary * _Nullable resultDic) {support = [PNSCodeSuccess isEqualToString:[resultDic objectForKey:@"resultCode"]];}];if (self.tf_phoneNumber.text.length == 0) {[ProgressHUD showError:@"请先输入手机号码"];return;}float timeout = self.tf_timeout.text.floatValue;[ProgressHUD show:@"请稍等..." Interaction:YES];__weak typeof(self) weakSelf = self;//1. 获取 VerifyToken[UMCommonHandler getVerifyTokenWithTimeout:timeout complete:^(NSDictionary * _Nonnull resultDic) {if ([PNSCodeSuccess isEqualToString:[resultDic objectForKey:@"resultCode"]] == NO) {[ProgressHUD showError:@"获取 VerifyToken失败"];[weakSelf showResult:resultDic];return ;}//2. 去服务器验证 VerifyToken[weakSelf showResult:resultDic];NSString *token = [resultDic objectForKey:@"token"];//注: 这里请求是通过自己服务器, 下面仅供参考[PNSVerifyTopRequest requstVerifyWithNumber:weakSelf.tf_phoneNumber.text token:token complete:^(BOOL isSuccess, NSString * _Nonnull msg, NSDictionary * _Nonnull data) {NSDictionary *module = data[@"module"];NSString *verify_result = [module objectForKey:@"verify_result"];if ([verify_result isEqualToString:@"PASS"]) {[ProgressHUD showSuccess:@"本机号码认证成功"];} else {[ProgressHUD showSuccess:@"本机号码认证失败"];}[weakSelf showResult:data];}];}];