MobTech 秒验常见问题

双卡双待手机如何登录

针对双卡双待手机只取当前流量卡号

用其他手机号如何登录

使用传统验证方式登录,例如验证码登录

一键登录只支持4G吗

电信支持4G,5G网络取号,移动, 联通支持5G,4G, 3G, 2G网络取号但在非5G,4G网络情况下容易取号失败

是否支持三网

支持

可以用在H5或网页上吗

暂时不可以

对数据流量有什么要求

免密登录能力必须经过运营商网关取号,所以必须开启移动数据流量才能实现一键登录,但流量只耗费一点点

对手机型号有要求吗

没有

支持国外手机号吗

不支持

手机号码我们会存储吗

有存储,需要将手机号传给运营商。

是否需要自己服务器配合

是的,需要服务器配合的,客户端那边只能是返回运营商,预取号以及token等信息,不能返回手机号,必须要对接服务端,把这些参数传给服务端那边,服务端那边就会返回手机号

这个安全嘛 sim卡是可以复制的

卡复制了是没用的,因为SIM卡内部是有加密信息的,那个信息是必须由运营商进行解析才能获取到的数据 ,安全性是没有问题的。

如果已经审核了安卓的,还需要审核iOS的怎么办

在重新提交,填写上ios的Bundle id就行,不会影响安卓的,但是如果ios的之前已经审核过了,那么再次提交会覆盖掉之前审核的,是同一个key的话,会覆盖的。可以重新再创建个应用,提交秒验包名审核

秒验是否支持个人使用

秒验的话,已上线应用公司个人都可使用,公司官网什么的审核的时候可以不写,但是未上线应用 个人暂时无法接入 公司需要填写相关信息 ,官网上公司信息需与app业务性质一致。没有官网的话,有app介绍下载页面也可以,上面也需有所属公司名称。

新人专享礼 · 新用户接入即送 (秒验+SMSSDK)系统自动送

集成秒验一键登录SDK或短信SMSSDK的新用户即可免费获得1000条使用额度。 7.1开始新注册并完成认证的用户会在1小时内到账30元,无使用期限
注:

  1. 秒验与SMSSDK 短信活动,参与用户只可二选一,不可同时参加两项活动;
  2. 1000条使用额度以金额形式充入账户,赠送额度不予开具发票、不能提现;
  3. 赠送活动只支持中国大陆,国外,港澳台都不支持;

秒验是怎么收费的

是在客户端得到token之后,然后调用服务端接口置换手机号成功之后才会收费

秒验充值单价的问题

不能累积计费,以单次最多充值的来计费

为什么要先调用预取号接口,直接调用登陆接口是否可以

可以的,预取号接口一方面主要是为了加速一键登陆接口的响应速度,另一方面能够提前预知当前设备/网络环境是否可以进行一键登陆,所以我们建议先调用预取号接口,成功之后在调用一键登陆接口,预取号接口可以多次调用,第一次预取号成功后,1小时内是有本地缓存的,所以1小时内的第二次预取号会走本地缓存,速度非常快。

预取号超时时间默认是4s,可以通过接口设置,预取号时间直接取决于运营商,所以如果预取号时间较长只能检查一下网络环境,另外多尝试几次,有时可能是网络波动引起的。

服务端置换token报错token非法

token非法是客户端和服务端的Appkey不一

iOS端status=5119302, res=null, error=未找到配置, seqid=316869966368829440}

报这个错误一般是审核没有通过的问题,用户可以自己先到后台检查下有没有提交项目里的包名审核,如果检查不到,可以给到AppKey和Bundle id让Mob技术人员去查

iOS端预取号失败,错误的请求包签名Code = 6119127,resultCode=103102...desc=错误的请求包签名

这个错误一般可能审核过了,但是Bundle id有加空格或者换行,需要找审核的人让运营商那边查下

iOS端resultCode:104201,desc:token invalid,seqid:186063876160012288,status:5119507

optoken过期,不存在,或者已经使用过了

iOS端status:4119310,res:null,error:“token未找到”

如果是form表单传的就要先encode传到自己的服务端,不然会被转义。也就说在调服务端接口传参之前,在iOS端先把token先encode了,在传过去

iOS端移动报 获取移动token失败 Code=1003 “(null)” UserInfo=【获取token失败、错误的请求签名、103101】(老版本,建议升级)

工程中的Info.plist中添加bundleId对应的key-value。搜索Xcode项目工程中的.strings国际化文件,如果app存在本地国际化文件,请在每个本地国际化文件中添加CFBundleIdentifier,各个语言版本文件中都需要添加。

iOS端拉起授权页方法无回调[错误码为: 170206](老版本,建议升级)

请检查拉起授权页接口配置参数传参,传入模型是否为空或者传入的model.currentViewController是否为当前控制器

确认配置是否传入vc,拉起页面时vc必须为当前正在显示的vc;若传self,需确认当前self就是当前vc

iOS端预取号连续报170606 或者是20101 (老版本,建议升级)

运营商限制不允许短时间内连续多次频繁调用登录接口,请过段时间再试,测试时不要短时间内频繁调用

iOS端秒验报错问题:170001,错误描述:私网IP无效,中国联通,网络错误,error_code=1102

可以试试开关下飞行模式,这个是运营商基站缓存的问题,比如你在A基站获取的是IP1,这时你走到跨基站B拿到的是IP2,那么这时的IP1就失效了,只有重启手机或开关飞行模式或重启流量可以刷新IP,这个是联通运营商内部SDK的缓存机制没有做好,和联通反馈过的,但是还是有部分地区没有解决好。

iOS端秒验2.1.2版本,移动卡可以拉起界面,电信卡拉不起界面

建议用户更新版本,之前旧的SDK可能调用的电信sdk是老的接口,可能是电信SDK问题,更新到新的SDK,已经可以

iOS端Demo预取号 resultDic: (null) error: Error Domain=SecVerifyErrorDomain Code=170001 "(null)" UserInfo="(null)"

这个是联通的旧版SDK的域名问题,联通那边已提交证书重新审核通过,已解决或者是更新我们的SDK到最新版本

iOS端Error Domain=拉起授权页失败,请检查SecVerifyCustomModel.viewController是否为顶层vc Code=6119144

传的VC有问题,要么没有传,要的传的不是当前VC

iOS端如果登陆成功了但是没有自动回收界面,是什么原因

可能是配置了手动关闭,然后又没调关闭的方法

iOS端怎么在授权界面上加自定义按钮之后,push到其他的界面

代理方法里可以拿到当前授权页vc和nav,直接push就行了,例如 [weakSelf.authPageVc.navigationController pushViewController:vc animated:YES]; 可以参考demo

iOS端Error Domain=拉起授权页失败,请检查SecVerifyCustomModel.viewController是否为顶层vc Code=6119144 "(null)"

拉起了授权界面,并且报这个错误,看是不是设置了自定义转场动画,然后时间超过了1秒,我们内部判断了如果超过1秒没有收到present回调就认为present失败,提示为传入的vc异常,,如果这边只设置了 mobModel.modalPresentationStyle = NSNumber(value: UIModalPresentationStyle.overFullScreen.rawValue),,看看有没有设置【SVSDKHyVerift setDelegate:self】,如果有,去掉试下。

iOS端自定义UI,加了一个其他方式按钮,点击这个按钮,怎么判断用户是否同意了隐私协议呢

可以用一个全局变量在 这个代理方法中

/**授权页点击相关事件*/
-(void)svVerifyCheckBoxClick:(UIViewController *)authVC userInfo:(SVSDKHyProtocolUserInfo*)userInfo checkBoxValue:(BOOL)isSeleted;

记录下checkBoox的状态,这个在点击checkBox时会触发。

iOS端Error Domain=preVerify failed (timeout) Code=6119124 "(null)") 预取号超时

首先保证必须有开4G移动流量,如果有开了,然后wifi也开了,还是超时,看下wifi是否有设置代理,一般是网络问题,只能多试试,或者关掉在开下网络看看

iOS端电信不管是调用预取号接口或者是登陆接口都报以下错误:Error Domain=success Code=6119129 UserInfo="(null)"

这个是因为阿里云的包里的电信包与我们的电信包版本不一样,导致冲突问题,找开发处理发包即可

iOS端在本地项目中秒验登陆没有问题,但是发布上线之后拉起授权页一直转圈圈可能是什么原因

可能在发布中把Bundle id改掉了,需要检查这块

iOS端秒验 预登录的时候 一直报这个6119125 预取号异常(内部异常)

运营商报的错误,无法确定原因,多测试几次试试

iOS端预取号接口的话,如果有很多页面都有点击登陆按钮的话,是放在启动的时候调用,还是在对应的页面登陆前调用

哪一个页面需要调用,在那个页面的viewdidiload或者viewwillappear里调比较好,然后登陆按钮直接调拉起页面就行了,不需要在调用预取号接口

iOS端预取号失败Error Domain=check the operator appKey/appSecret Code=6119121 "(null)"

iOS用成安卓的包名,请求初始化,然后拿不到配置就报这个错误,需要去后台检查iOS提交审核填写的包名是否与ios项目里的包名一致

iOS端本机认证和一键登陆的区别

本机认证本质上来说是对输入的手机号进行验证操作,一键登陆本质上是从三大运营商那里获取用户的手机号从而避免用户手动输入手机号,两者都需要去我们的服务端请求操作。一键登录之所以需要授权页面是因为需要用户授权运营商提供手机号给第三方,本机认证不需要,所以运营商的SDK就没有提供相关的授权页面。

iOS端错误码:5119105,error:operatorToken参数不正确

这个问题可以检查下客户端调用接口,有的人可能是调用的本地认证的接口获取的参数上传的,而不是一键登陆的接口

iOS端"message":"token非法","phone":null

(1)token重复使用,多次使用同一个token或者使用了已经校验过的token

(2)服务端使用的appkey和客户端不匹配,appkey错误

(3)token由客户端传递给服务端后,被转义了,可以比对下客户端和服务端,需要注意下客户那边是不是用form表单传给服务端的,如果是用form表单传的话,需要用urlencode一下,不然像加号什么的会被转义成空格,会造成问题

(4)token和optoken传反了

iOS端后台数据的含义,如下图

初始化 :初始化是SDK的内部init方法,ios的话,只需要在plist文件里配置了appkey就是初始化我们的SDK,也可以调用代码来初始化

#import <MOBFoundation/MOBFoundation.h> 
[MobSDK registerAppKey:@"2e76e2e95a7ad" appSecret:@"e83de04bc9d850784ca01b5fcfbc886e"];

预取号 :就是对接文档中的预登陆(preLogin)接口

拉起授权页 :就是调用我们的一键登陆接口,会弹出我们的授权界面,如果是用的无UI的版本,那这个步骤数据会为0

获取token :就是用户点击授权登录也就是一键登录时的接口

置换号码 :就是最终取号的接口

从“获取token”开始就是用户实际登陆操作,获取token代表用户发起授权登陆请求,并成功获取到加密手机号,置换号码相当于拿到解密手机号,置换号码代表的是登陆成功, 举例:100个用户发起一键登录请求,99个用户客户端成功拿到加密手机号,然后99个客户端发起解密手机号请求,98个用户客户端成功拿到解密手机号并登录成功。基本就是这个意思。

从预取号到token中间流失的用户是不符合一键登陆条件,自动跳转到其他登陆方式

iOS端自定义一键登录点击获取token等待loading

在-(BOOL)svVerifyShouldShowLoadingLoginClick:userInfo:返回NO即可,然后自行添加自定义loading,也需要自行控制隐藏

//将要显示内置的一键登录等待loading,返回NO则不显示内置loading,可在此添加自定义loading
-(BOOL)svVerifyShouldShowLoadingLoginClick:(UIViewController *)authVC userInfo:(SVSDKHyProtocolUserInfo *)userInfo{
dispatch_async(dispatch_get_main_queue(), {
[SVProgressHUD showWithStatus:@"这是外部设置的自定义loading"];
});
return NO;
}

iOS端自定义隐私协议未勾选提示

在-(BOOL)svVerifyShouldAlertUnChecked:userInfo:返回NO即可,然后自行添加自定义提示,也需要自行控制隐藏

//将要显示内置的未勾选协议提示,返回NO则不显示内置提示,可在此添加自定义提示
-(BOOL)svVerifyShouldAlertUnChecked:(UIViewController *)authVC userInfo:(SVSDKHyProtocolUserInfo*)userInfo{
 dispatch_async(dispatch_get_main_queue(), ^{
 UIAlertController * alert = [UIAlertController alertControllerWithTitle:@"请阅读并勾选同意协议" message:@"这是一个外部添加的自定义提示,代替sdk内置提示" preferredStyle:(UIAlertControllerStyleAlert)];
 [alert addAction:[UIAlertAction actionWithTitle:@"同意" style:(UIAlertActionStyleDefault) handler:^(UIAlertAction * _Nonnull action) {
 [SVSDKHyVerify setCheckBoxValue:YES];
 }]];
 [alert addAction:[UIAlertAction actionWithTitle:@"返回" style:(UIAlertActionStyleCancel) handler:nil]];
 [authVC presentViewController:alert animated:YES completion:nil];
 });
 return NO;
}

iOS端跳转自定义的隐私协议web页(根据相关合规要求,协议页不得隐藏)

//将要跳转协议web页,返回NO则不自动跳转,可在此自行跳转自定义web页
-(BOOL)svVerifyShouldLinkPrivacy:(UIViewController *)authVC userInfo:(SVSDKHyProtocolUserInfo*)userInfo{
 //获取当前点击的协议相关信息
 SVSDKHyPrivacyText * privacyTextObj = userInfo.privacyTextObj;
 if (privacyTextObj.textLinkString != nil) {
 dispatch_async(dispatch_get_main_queue(), ^{
 if (@available(iOS 9.0, *)) {
 SFSafariViewController * web = [[SFSafariViewController alloc]initWithURL:[NSURL URLWithString:privacyTextObj.textLinkString]];
// [authVC.navigationController pushViewController:web animated:YES];
 [authVC presentViewController:web animated:YES completion:nil];
 } else {
 UIAlertController * alert = [UIAlertController alertControllerWithTitle:privacyTextObj.text message:privacyTextObj.textLinkString preferredStyle:(UIAlertControllerStyleAlert)];
 [alert addAction:[UIAlertAction actionWithTitle:@"返回" style:(UIAlertActionStyleCancel) handler:nil]];
 [authVC presentViewController:alert animated:YES completion:nil];
 }
 });
 return NO;
 }
 return YES;
}

iOS端resultDataJson =","seqid":"355777667998416896"}

有可能是SDK运营商版本和项目运营商版本不一致,导致问题

iOS端Error Domain=内部网关错误 Code=6119128

这个问题是手机当前网络问题,开关飞行模式看看是否可以

iOS端使用代码主动调用一键登陆按钮

[loginButton sendActionsForControlEvents:(UIControlEventTouchUpInside)];

可以用代码去执行点击事件

iOS端联通报一些:内部网关错误,无数据网络链接,无法拉起授权界面等等

需要先确认下用户使用的是什么版本的秒验SDK,可能版本还很低,像2.x等版本呀,需要更新到最新版本才行,老版本的联通sdk是有很多bug问题的

iOS端会不会因为传入的是tabbarvc这个vc,导致授权页不出现问题

我们这个原理是用传入的VC去present授权页面,但是present本身不一定绝对能弹出来,这个是系统的机制,如果您的vc不是最上层,或者vc上已经有alert弹框,这种情况下就没法在present授权页,和这个vc本身是vc还是tabbarvc没关系的。

iOS端如何知道用户勾选协议的状态

取checkBox控件的isSelect,或者uiConfigure.checkDefaultState.boolValue

iOS端集成3.1.2或以上秒验需要注意的地方

首先mobFondation.framework需要更新到3.2.28或者以上版本,另外可能会报以下错误如下:

需要加Network.Framework依赖库

iOS端隐私状态栏与登陆按钮是否关联

有客户问,我设置了登陆按钮两种状态,但是勾选了隐私,为什么并没有什么变化,我们的一键登陆按钮和勾选框是没有状态关联的,需要用户自己实现

iOS端如何获取运营商名字和隐私,做一些处理

例如我想改运营商信息为别的国家语言什么的,运营商和协议可以在代理方法种获取,方法里的userInfo里有_uiElement字段,里面有privacyName和privacyUrl,如果需要自定义隐私栏的语言,就把隐私控件换成自己的,后续的跳转详情都用自己的就行。 也可以把当前隐私控件的那个privacyName文本替换成你需要的,不过这种没有测过,可能不生效,最好自己重新写新的隐私空间,这种肯定可以的,另外有人可能是直接在改SVSDKHyPrivacyText配置,这个是提前配置的,这个只是个传值用的model,改了并没有效的,代理里拿控件手动改attrbuteText,或者重新写一个控件

-(void)svVerifyAuthPageViewDidLoad:(UIViewController *)authVC userInfo:(SVSDKHyProtocolUserInfo *)userInfo{}

iOS端为什么手动设置当前授权页checkBox勾选状态无效

这个方法[SVSDKHyVerify setCheckBoxValue:YES];是授权页面已经显示后用来切换的,是改状态用的,如果需要设置默认值的话需要用uiConfigure.checkDefaultState = @(YES);checkbox不能通过控件直接设置状态,SDK内部是通过model来记录状态的,如果在外面直接改控件状态sdk是不知道的。需要区别用法

iOS端更新秒验SDK到3.1.2版本报如下错误

Undefined symbol:

OBJC_CLASS

$_MOBFDeApiService

需要把mobFoundation.framework更新到3.2.28或者以上版本

Android端秒验报错6119401

因为秒验是双端支持,如果在审核包名时,某一端没有填写,那么此端秒验将不可用:

如何重新提交审核

请注意:在后台点击重新提交审核会影响已审核通过的应用。这种情况建议重新在后台创建一个新的应用,双端都提交审核,后期替换为这个新key。

作者:MobTech开发者

%s 个评论

要回复文章请先登录注册