开发者中心

Android平台

1.参数/签名校验异常问题(debug正常,release报错)

产生原因:开发者打开混淆开关,但是没有配置混淆过滤文件
解决方案:请按照文档混淆规则部分核查

2.包名/包签名校验不通过

产生原因:创建应用时填写的包名/包签名与当前运行APP的不一致
解决方案:确认好所需要的正确的包名/包签名,①如果创建应用时填写错误,请联系运营人员或者重新创建个正确的应用;②如果填写无误,项目配置错误,请按照文档创建应用部分核查

3.预登录异常(只影响电信卡)

产生原因:so库未引用到或so库版本与SDK版本不对应
解决方案:
①2.3.4.3之前版本请按照下面提示核查so库路径,并确保放入的so库与aar包版本相同
image.png
②2.3.4.3及之后版本,so库已打入aar包中。如果是更新SDK后报错,请删除libCtaApiLib.solibShanYCore.so

4.公网IP无效
  1. 如果是纯4G状态下出现公网IP无效,请检查您的运营商接入点名称(APN)是否是net接入点。
    2. 双开情况强开流量通道失败,需单开流量。
    3. 号码欠费。
5.界面适配问题:控件展示位置异常、修改系统字体后字体展示异常等

产生原因:适配框架导致SDK内置界面和app界面获取到的density发生变化 ,导致原有控件和自定义控件参考系不一样。
解决方案:
①如果使用今日头条适配框架出现界面错乱问题,需要过滤授权页:AutoSizeConfig.getInstance().getExternalAdaptManager().addCancelAdaptOfActivity(ShanYanOneKeyActivity.class).addCancelAdaptOfActivity(CmccLoginActivity.class).addCancelAdaptOfActivity(LoginAuthActivity.class);
如果授权页是透明的,需要把授权页前一个activity也加入过滤。
②如果使用JessYanCoding适配,需要过滤调用拉起授权页的界面
AutoSize.autoConvertDensityOfGlobal(MainActivity.this);
③如果是修改系统文字大小后不适配,可以设置字体大小单位用dp,ShanYanUIConfig 中配置setTextSizeIsdp(true)
④目前部分折叠屏手机和分屏显示时,界面适配可能会有问题,暂时没有优化方案。

6.WiFi+4G预取号失败

产生原因:取号原理依赖数据流量,①部分OPPO机型,WiFi和数据流量双开情况下无法使用数据流量,②个别6.0系统机型,系统不支持CHANGE_NETWORK_STATE权限目前统计到的机型如下:

解决方案:不支持WiFi+数据网络;请关闭WiFi,使用纯数据网络取号

7.怎么关闭未勾选协议的提示

①ShanYanUIConfig配置中,调用:setCheckBoxTipDisable(true);(true:关闭,false:开启,默认:false)
②传一个空的toast对象,调用示例:

8.点击登录按钮弹出的loading怎么自定义

按照文档给的setLoadingView方法传入自定义loadingview布局,调用示例:

如果需要隐藏loading,传setLoadingView(new RelativeLayout(context))。
如果是插件集成想隐藏loading,需要传空的xml文件,以flutter为例:

9.权限问题

①不授权READ_PHONE_STATE权限,有什么影响?
建议开发者申请本权限,本权限只用于日志服务,比如线上某个客户取号失败,可以辅助查询失败原因,去掉后不影响取号成功率,只影响日志服务。

②是否可以去掉CHANGE_WIFI_STATE权限?
该权限仅用于WiFi+数据网络双开的情况下,提高OPPO机型6.0-9.0系统取号成功率。因为部分OPPO机型,系统底层不支持WiFi+数据网络双开情况下指定使用数据网络,而取号必须在数据网络下进行,所以使用该权限触发系统弹出授权数据网络的弹窗,提高取号成功率。调用SDK初始化方法成功后,并且预取号没有成功过(如首次安装应用)时,会触发一次。

10.UI资源加载异常;找不到资源ID;debug包正常,release包界面显示异常

产生原因:资源被压缩,
解决方案:需要添加过滤:“R.anim.umcsdk*”, “R.drawable.umcsdk*”, “R.layout.layout_shanyan*”, “R.id.shanyan_view*”,
①如果配置了shrinkResources true(注意:flutter插件默认配置了),需要把true改false,即:zipAlignEnabled false。如果需要设置shrinkResources true则要在raw/keep里面配置资源过滤。keep.xml添加示例:

②如果项目中使用AndResGuard资源压缩,需要在module的build.gradle中添加资源过滤。添加示例:

11.设置协议默认勾选状态不生效

必须使用setPrivacyState设置,true:选中;false:未选中,默认:true;
不能使用 OneKeyLoginManager.getInstance().setCheckBoxValue(false);

12.弹窗样式背景变黑屏 ;导航栏有黑条遮挡

①弹窗样式背景黑屏效果如下:
image.png

②导航栏有黑条遮挡,效果如下:
image.png

解决方案:修改AndroidManifest.xml中授权页activity的主题theme,可以参考示例demo源码中的主题配置

13.在授权页上添加协议弹窗怎么实现

通过addCustomPrivacyAlertView添加,具体实现可以参考SDK包中的demo示例源码,A配置示例部分,如下:

14.webview适配问题

报错信息:
1. java.lang.RuntimeException: Using WebView from more than one process at once with the same data directory is not supported
2.java.lang.NullPointerException: Attempt to invoke virtual method ‘java.lang.CharSequence android.widget.TextView.getText()’ on a null object reference
3.resultCode":“200025”,“authType”:“0”,“authTypeDes”:“其他”,“resultDesc”:“发生未知错误”
产生原因:android P行为变更,不支持同时使用多个进程中具有相同数据目录的WebView,因为SDK内部有使用到webview加载协议,如果客户端存在多进程,需要为不同进程webView设置不同目录
解决方案:在Application onCrete中调用下面方法(必须放到初始化之前)示例:

    @RequiresApi(api = 28)
    public void webviewSetPath(Context context) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
            String processName = getProcessName(context);
            if (!getApplicationContext().getPackageName().equals(processName)) {
                WebView.setDataDirectorySuffix(processName);
            }
        }
    }
    public String getProcessName(Context context) {
        if (context == null) {
            return null;
        }
        ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
        for (ActivityManager.RunningAppProcessInfo processInfo : manager.getRunningAppProcesses()) {
            if (processInfo.pid == android.os.Process.myPid()) {
                return processInfo.processName;
            }
        }
        return null;
    }

15.横竖屏适配问题

报错信息:
1.Only fullscreen opaque activities can request orientation
2.Attempt to invoke virtual method ‘com.cmic.sso.sdk.d.b com.cmic.sso.sdk.a.a()’ on a null object reference
com.cmic.sso.sdk.view.LoginAuthActivity.onCreate(LoginAuthActivity.java:104)
3.java.lang.NullPointerException:Attempt to invoke virtual method ‘com.cmic.sso.sdk.d.b com.cmic.sso.sdk.a.a()’ on a null object reference
4.android.util.SuperNotCalledException Activity {com.mlwx.fallinlove/com.cmic.sso.sdk.activity.LoginAuthActivity} did not call through to super.onCreate()

产生原因:在8.0系统版本上,只有全屏不透明的activity才能指定方向
解决方案:弹框或者透明主题,授权页不能指定方向。如需指定方向,可以指定授权页前个页面的方向,授权页设置跟随前个界面方向,即:“android:screenOrientation=“behind””

16.协议勾选框与协议第一行文字对齐怎样设置

在ShanYanUIConfig对象中通过setcheckBoxOffsetXY(10,5)方法设置,该方法可以设置checkbox在协议框父控件中的位置,包含两个参数:1.左偏移量 2.上偏移量(默认:在父控件内居中)

17.协议勾选框与协议文字间距怎么设置

在ShanYanUIConfig对象中通过setCheckBoxMargin(10,10,10,10)方法设置,该方法可以设置checkbox热点局域范围,包含四个参数:1.向左扩大 2.向上扩大 3.向右扩大 4.向下扩大(默认:各10dp),调整协议与文字间的距离即修改第三个参数的值。

18.拉起授权页请求频繁

产生原因:第一次拉起的授权页没有销毁,又重新调用了拉起授权页
解决方案:等上次拉起的授权页销毁后,才能再次调用拉起授权页方法;如果已经调用了销毁授权页方法仍报该错,可能是因为授权页销毁后回到的界面onStart或者onResume执行耗时操作,阻塞了授权页的onDestroy,导致授权页销毁延迟,请核查修改耗时操作。
注:开启SDK的log开关,用ActivityLifecycleShanYanTask可以过滤生命周期

19.预取号设置超时时间不生效

产生原因:调用的时机不对
解决方案:需要在初始化方法调用之前调用(单位:秒):OneKeyLoginManager.getInstance().setTimeOutForPreLogin(10);

20.授权页没有**onActivityResult方法,**第三方登录(QQ、微信、微博等)的回调怎么拿到?

解决方案:一般点击第三方登录按钮的时候,增加一个中转页,即启动一个透明的或者无界面的activity,在这个activity里面做相关授权处理

21.发生未知错误(只影响移动卡),{“resultCode”:“200025”,“desc”:“发生未知错误”,“operatorType”:“移动”,“scripExpiresIn”:“172787”}

产生原因:①授权页activity未配置正确②资源被压缩③两个自定义view使用了相同的控件
解决方案:日志里面会有捕获到的异常日志,按照日志确认是哪种情况导致的
如果是①:请按照对应版本的集成文档核对AndroidManifest里面授权页activity配置(核对activity名称及包名)
如果是②:请按照问题10解决方案排查
如果是③:自定义view的控件不能复用,需要分别创建

22.听云SDK导致的编译不通过问题

产生原因:某些版本的听云SDK的嵌码操作会对SDK的编译造成影响,报错如下:
image.png
image.png
解决方案:更新听云SDK到2.14.10版本(maven依赖方式可能没有这个版本,需要下载听云SDK包本地集成)

23.必须开启数据网络吗

初始化有网络即可;预取号、获取token分两种情况:
一、首次调用:
①预取号:
移动、联通、电信都必须开启数据流量
②获取token(预取号已成功):
移动:必须有网络(WiFi、数据网络均可)
联通、电信:
a.预取号有效期内:不需要网络,必成功
b.预取号失效:必须开启数据流量
二、非首次(成功过):
①预取号:
移动:只要有网络就可以成功
联通、电信:
a.预取号有效期内:不需要网络,必成功
b.预取号失效:必须开启数据流量
②获取token:
移动:必须有网络(WiFi、数据网络均可)
联通、电信:
a.预取号有效期内:不需要网络,必成功
b.预取号失效:必须开启数据流量

24.哪些机型不支持WiFi+数据网络?

①由于系统层限制,部分OPPO、vivo、一加机型,WiFi+数据网络环境下必须手动授予数据流量权限才能使用数据网络,而取号(无缓存的情况下)必须使用数据网络才能成功,所以如果没有手动授予数据流量权限时取号会失败;
②部分6.0系统在系统层不支持CHANGE_NETWORK_STATE权限,目前统计到的机型有:

机型 系统
红米 Note 4X(Redmi Note 4X) 6.0
红米 Note 4X(Redmi Note 4) 6.0
华为荣耀 7 (PLK-AL10) 6.0
华为mate7(MT7-TL10) 6.0、6.0.1
荣耀畅玩5X(KIW-AL10) 6.0.1
华为麦芒4(RIO-AL00) 6.0.1
华为P8(GRA-UL10) 6.0
华为P8max(P8max) 6.0
乐视(Le X620) 6.0
华为 Mate 8(NXT-AL10) 6.0
红米Pro(Redmi Pro) 6.0

25. Unable to find explicit activity class xxx

产生原因:授权页activity配置错误。
解决方案:按照集成文档核查AndroidManifest.xml中授权页activity配置

26.JNI DETECTED ERROR导致的闪退或失败等错误

产生原因:版本升级导致的so库文件未引用到,或者so库版本跟SDK版本不对应
解决方案:按照升级指南核查so库配置

27. {“resultCode”:“102223”,“desc”:“数据解析异常”,“operatorType”:“移动”,***}

产生原因:授权页activity未配置正确
解决方案:按照文档核查授权页activity的包名、类名是否配置正确

28.是否有获取Mac地址,作用是什么,是否可以关闭获取。

答:2.3.3.5之前版本可能存在获取频繁的问题;2.3.3.5-2.3.4.7版本一次安装只获取一次,隐私协议中有列举该字段;获取MAC地址的用处是提供日志服务,如线上某个客户取号失败,可以根据Mac辅助定位该客户设备,方便查找失败原因,一般不建议关闭。如果比较在意Mac获取或者不需要该日志服务,可以调用方法关闭,关闭后不影响取号功能,只影响日志服务。关闭方法:初始化之前调用OneKeyLoginManager.getInstance().getMaEnable(false); 2.3.4.8及之后版本已经移除。

29.非法请求(状态码105313)或IO异常(状态码80007)或域名解析异常(状态码80006)

产生原因:①app中存在hook系统获取ip地址api的操作,导致SDK取到的IP不准确,取号时通过IP做安全校验失败②取号被运营商标记为风险取号
解决方案:①核查代码中是否有hook系统获取ip的方法,可以用同一台手机在相同网络环境下,安装获取IP列表安装包,获取一组ip地址;再在自己app中按照获取ip列表方法.txt获取一组ip地址,比对结果是否一样,如果结果不一样,说明是hook系统api导致的,需要将下面运营商获取ip地址的调用类加hook白名单。②换手机卡或换测试机

电信调用类:"cn.com.chinatelecom.account.api.e.d"
    
移动调用类:"com.cmic.gen.sdk.e.p"
    
联通调用类:"com.sdk.base.framework.utils.app.AppUtils"
           "com.sdk.l.a"
           "com.unikuwei.mianmi.account.shield.e.j"

30.协议页中二级跳转点击无反应

解决方案:需要将H5中a标签的target改成_self,即在当前窗口中打开,不支持在新窗口打开
image.png

31.自定义协议,点击返回为什么销毁不了协议页|点击返回无反应。

产生原因:因为自定协议内部可能会有多级跳转,所以点击返回时SDK内部先判断canGoBack,如果canGoBack为true,则只执行goBack,而不销毁,从而导致点击无反应|不能销毁的情况,
解决方案:需要自己前端开发对协议页做适配。

32.弹窗样式下,点击弹窗外部怎么关闭登录页

解决方案:需要将授权页主题theme中style的parent使用系统dialog相关主题,如:

    <style name="dialogStyle" parent="Theme.AppCompat.Light.Dialog">
        <!--没有标题-->
        <item name="windowNoTitle">true</item>
        <!--背景透明-->
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:windowIsTranslucent">true</item>
        <!--dialog的整个屏幕的背景是否有遮障层-->
        <item name="android:backgroundDimEnabled">true</item>
    </style>

33.SDK缓存有效时间
  • 预取号缓存时间:最短有效期为1分钟
  • 置换token有效时间:最短有效期为1分钟
34.联通卡报unknow province!,状态码-2

产生原因:大概率是物联网卡,或者VPN开启导致的
解决方案:不支持物联网卡取号,不支持连接网络代理取号。

35.移动卡报网络异常,状态码102102

产生原因:①使用APP端集成了第三方网络请求框架,代理了SDK接口请求②设备开启了代理或连接的WiFi有网络链接安全策略限制的场景
解决方案:不支持网络代理取号

iOS平台

1.移动报 获取移动token失败 Code=1003 “(null)” UserInfo={desc=错误的请求签名, resultCode=103101}

【获取token失败、错误的请求签名、103101】
工程中的Info.plist中添加bundleId对应的key-value。搜索Xcode项目工程中的.strings国际化文件,如果app存在本地国际化文件,请在每个本地国际化文件中添加CFBundleIdentifier,各个语言版本文件中都需要添加。

image.png

**2.移动报错[UASDKLogin getAuthorizationWithModel:complete:] has nil model or nil model.currentVC ****has nil model or nil model.currentVC**

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

3.拉起授权页面方法无回调【拉不起授权页面、授权页+无回调、授权页+无反应】
  • 请检查拉起授权页接口配置参数传参,传入模型是否为空或者传入的baseUIConfigure.viewController是否为当前控制器
  • 确认配置是否传入vc,拉起页面时vc必须为当前正在显示的vc;若传self,需确认当前self就是当前vc;对于从后台启动等方式需要立即拉起授权页的,需确认调用时机是否为当前vc已经显示出来再调方法
  • 在页面加载完成时 再调用拉起时候去页面方法,不建议APP启动时直接在viewDidLoad方法中直接调用,建议在授权页面加载完成之后调用,如:在viewDidLoad中添加延时加载或直接在viewDidAppear中调用拉起授权页面方法。

4.何时手动销毁授权页 【手动销毁授权页、授权页释放时机】
  • 关闭授权页时机

a.SDK拉起授权页方法 直接回调失败时
      b.置换手机号有返回结果时

  • 当前页面直接销毁
[self.PresentedViewController dismissViewControllerAnimated:YES completion:nil];
  • 找到topVC进行dismiss
dispatch_async(dispatch_get_main_queue(), ^{
    //建议使用授权页面配置对象传入的viewcontroller 调 dismiss
    if (self.navigationController.viewControllers.lastObject.navigationController) {
        [self.navigationController.viewControllers.lastObject dismissViewControllerAnimated:YES completion:nil];
    } else {
        UIViewController *topRootViewController = [[UIApplication  sharedApplication] keyWindow].rootViewController;
        // 在这里加一个这个样式的循环
        while (topRootViewController.presentedViewController) {
            // 这里固定写法
            topRootViewController = topRootViewController.presentedViewController;
        }
        // 然后再进行present操作
        [topRootViewController dismissViewControllerAnimated:YES completion:nil];
    }
});

5.ATS开关(Http与Https) 【http+白名单、禁用http、App Transport Security、ATS】


报错信息:The resource could not be loaded because the App Transport Security policy requires the use of a secure connection.
屏幕快照 2019-06-24 下午4.23.05.png

处理方式:
1.info.plist中添加App Transport Security Settings->Allow Arbitrary Loads->YES

屏幕快照 2019-06-24 下午4.18.52.png

2.配置白名单
目前运营商个别接口为http请求,对于全局禁用Http的项目,需要设置Http白名单。以下为运营商http接口host名单:.cmpassport.com、id6.me.wostore.cn、mdn.open.wo.cn、*.zzx9.cn,*为通配符,建议按以下方式配置Info.plist

<key>NSAppTransportSecurity</key>
	<dict>
		<key>NSExceptionDomains</key>
		<dict>
			<key>zzx9.cn</key>
			<dict>
				<key>NSIncludesSubdomains</key>
				<true/>
				<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
				<true/>
			</dict>
			<key>cmpassport.com</key>
			<dict>
				<key>NSIncludesSubdomains</key>
				<true/>
				<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
				<true/>
			</dict>
			<key>id6.me</key>
			<dict>
				<key>NSIncludesSubdomains</key>
				<true/>
				<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
				<true/>
			</dict>
			<key>wostore.cn</key>
			<dict>
				<key>NSIncludesSubdomains</key>
				<true/>
				<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
				<true/>
			</dict>
			<key>mdn.open.wo.cn</key>
			<dict>
				<key>NSIncludesSubdomains</key>
				<true/>
				<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
				<true/>
			</dict>
		</dict>
	</dict>

6.联通崩溃【联通+崩溃、资源找不到】

测试过程中 移动、电信正常,联通卡运行项目时直接崩溃,请检查项目中sdk_oauth.bundle资源文件是否正常copy导入

7.联通预取号崩溃【预取号+联通+崩溃、NSDictionary + setObject、空指针】

联通SDK内部会读取校验info.plist文件中Bundle identifier、Bundle name、Bundle versions string, short、Bundle version字段,如未配置相关字段Value会导致以下崩溃
image.png

image.png

**8.运行报Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[CLSDKInitModel cl_modelInitWithCoder:]: unrecognized selector sent to instance 错误 **

【运行报错、编译报错】

  • 添加OtherLinkerFlags-force_load并添加framework路径,参考 Xcode配置添加-force_load
  • 或工程项目->Genaral->Linked Frameworks and Libraries 中添加CL_ShanYanSDK.framework

9. iOS12.0beta版系统奔溃问题 【12.0beta+ 崩溃】
  • 问题描述:所有12.0 beta版本找不到serviceSubscriberCellularProviders系统方法导致[CTTelephonyNetworkInfo serviceSubscriberCellularProviders]: unrecognized selector send to  instance崩溃
10. iOS13.0beta版系统奔溃问题 【13.0beta+ 崩溃】
  • 问题描述:所有13.0 beta版本[UIApplication valueForKey@“statusBar”]:崩溃
  • 解决方案:2.1.3到2.2.0.3之间版本(包含),需接入方手动加入版本判断,当判断为iOS13.0系统时跳过闪验。从2.2.0.4版本开始sdk内部使用兼容方式修复

11.编译报 ld: 38 duplicate symbols for architecture arm64 clang: error: linker command failed with exit code 1 (use -v to see invocation) 【编译报错、OtherLinkerFlags、framework路径错误】

OtherLinkerFlags项去掉-all_load添加-force_load并添加framework路径,参考 Xcode配置添加-force_load

12.运行报Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[CLSDKInitModel cl_modelInitWithCoder:]: unrecognized selector sent to instance 错误

【运行报错、编译报错】
添加OtherLinkerFlags-force_load并添加framework路径,参考 Xcode配置添加-force_load

13.报 403000 6006 请求非法,签名验证不通过 【请求非法、签名验证通不过、验签失败、403000、6006】
  • 替换Demo中appid/appkey和bundleID为自己申请的,运行Demo确定Demo是否可以正常完成流程,如果不能,请联系客服。
  • 如果Demo正常运行,用开发者自己的工程运行报403000,请检查最后一步用获取到的token调用手机号查询API是,是否是以form-data格式发送参数:使用AFN或者Alamofire直接发送completeResult.data,使用原生NSURLSession请将completeResult.data的每个字段值进行URLEncode编码再拼接成form-data格式字符串(“key1=value1&key2=value2&…”)再发送,Objc版Demo内有两种方式发送的示例代码
  • 关于如何确定最终是否以formData形式发送,可以使用charls抓包工具,查看request的headers里的Content-Type是否为application/x-www-form-urlencoded,以及completeResult.data的sign字段带有 + 号时 + 号丢失的情况
  • 如果开发者后台已经接入手机号查询API,请开发者后台也确认后台的发送格式

14.移动连续报1005 获取移动token失败, resInfoDict,{desc = "request is time out.";resultCode = 200023;} 【200023、time out、超时】

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

15.移动报 获取移动token失败 Code=1003 “(null)” UserInfo={desc=错误的请求签名, resultCode=103101}
【获取token失败、错误的请求签名、103101】

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

16.关于频繁调用 【频繁调用、操作频繁】

为了防止恶意刷量攻击,SDK从v2.1.1开始,会限制拉起授权页的调用频率,在短时间内,多次调用将会报频繁操作

17.集成sdk后app包体增量 【bitCode、包体大小、包体增量】

release模式,bitCode为NO,developmentTarget 8.0+ 下,ipa增量约1.25M。

18.其他移动端开发框架或平台支持说明 【跨平台开发、插件集成、支持平台】

理论上凡支持调用原生代码模块的平台或框架,都可以集成闪验SDK,集成方式参考各框架中调用原生代码或制作原生插件教程。目前已确认支持的平台有ReactNative、Weex、Flutter、Hbuild

19.iOS系统集成一键登录时,内嵌的协议页面中无法执行脚本吗? 【协议打不开、协议页面加载失败】

213版本及之前只支持纯H5链接,如果有js脚本可能导致协议页面web加载异常

20.是否支持控制自由关闭授权页,方便我们逻辑的衔接 【授权页销毁、手动销毁授权页】

213版本之前不支持,213及之后版本支持

21.是否支持BitCode 【bitcode】

支持

22.置换手机号时报错 【置换手机号报错、token非法、105312】(新版本已统一调用)

[{String:“300011885619”},{String:“STsid00000015591314406938cJcYsd0Hbwue4002SE2qxYcF0NCpNFk”}]–result:{“code”:-6,“message”:“token非法”,“success”:false}或{“resultCode”:“105312”,“taskId”:“ea913ef63aa7430f97e8e1603e2cc290”}
三大运营商token置换手机号码时的接口分别有对应的url,需要调用相对应的地址。

23.关于重签名打包【重签名】

sdk读取的是工程中的CFBundleIdentifier,请确保项目工程中配置的CFBundleIdentifier与闪验后台申请的BundleID一致即可

24.220版本CheckBox隐藏时电信用户提示“请勾选协议”【CheckBox、CheckBox 隐藏、请勾选协议】

闪验授权登录页各运营商协议默认勾选,用户可自行设置默认状态且勾选框CheckBox默认不隐藏。当用户设置checkBox隐藏时,电信用户登录就会提示“请勾选协议”,导致用户无法进行登录操作。
暂处理方式:设置checkbox显示,同时checkBox开放了一个尺寸设置属性,只要单独设置checkBox的size为{0,0}即可达到隐藏checkbox的目的

25.2204版本出现网络服务异常 failure:Error Domain=EAccountError Code=30910 “(null)” UserInfo={result=30910, msg=topClass not found in config, responseData=null}

原因是运营商或我们后台配置的问题

26.置换手机号:签名验证不通过

SDK返回的device字段或其他字段用户端传入到后台的时候空格被处理了,导致签名验证通不过。

27.跳转隐私协议:导航条有黑边

在appdelegate中的didFinishLaunchingWithOptions方法中的[self.window makeKeyAndVisible];上面加上self.window.backgroundColor = [UIColor whiteColor]。

28.v2.3.5.0之前版本,闪验导航栏出现透明黑色条问题


此为iOS15之后,iOS系统导航栏原因,客户需要升级SDK版本2.3.5.0之后的版本即可。

29.点击一键登录弹出自定义协议view或者viewcontroller
  1. 用户未同意或者选中协议框时,可在代理方法中获取点击事件;

/// 统一事件监听方法
/// @param  type             事件类型(1:隐私协议点击, 2:协议勾选框点击,3:"一键登录"按钮点击) 
/// @param  code             事件对应序号  type=1时:code:0,1,2,3(协议页序号),message:协议名|当前运营商类型 
///                                     type=2时:code:0,1(0为未选中,1为选中)
///                                     type=3时:code:0,1(0为协议勾选框未选中,1为选中)
/// @param  message          说明:type=1时:message:协议名_当前运营商类型 

- (void)clShanYanActionListener:(NSInteger)type
                           code:(NSInteger)code
                        message:(NSString *_Nullable)message;
  1. 在代理方法根据type和code,自定义view或者弹出viewcontroller(生命周期由用户控制);
  2. 用户处理自身业务逻辑后,可以调用**+ (void)loginBtnClick**重新触发登录事件。

30.非法请求105313

错误原因:105313非法请求,触发了运营商风控,
解决方案:可以多尝试几次飞行模式之后网络重启、手机重启、APP卸载重装,或者换一个手机设备等尝试一下

31.SDK UI可配置项(列举的是常用选项,具体以SDK接口api为准)
  • UI配置类:CLUIConfigure,以下仅为简要概括,具体请查看api展示,使用示例可查看demo
  • 用户想要获取对应控件,可在代理方法中获取对象的控件对象,具体可查看demo

可配置项:

  1. 授权页背景设置颜色或者图片
  2. 导航栏
  3. 状态栏
  4. 自定义控件
  5. Logo图片,是否设置圆角,是否隐藏
  6. 手机号配置,显示颜色,字体大小,及对齐方式
  7. 一键登录按钮,可设置字体,文字大小,背景,边框,圆角等
  8. 隐私协议 ,可添加用户自己的协议,协议展示页可自定义也可使用sdk自带的
  9. slogan(xxx运营商提供认证文字标识)
  10. 协议可选框 可设置大小,图片
  11. Loading ,sdk自带loading,可设置大小,圆角,也可添加自定义loading
  12. 展示方式,窗口,全屏,动画(present model方式)等,具体可查看demo
  13. 布局,采用苹果系统自带的相对布局方式,所有视图相对视图皆为父视图,具体可查看demo

32.SDK缓存有效时间
  • 预取号缓存时间:最短有效期为1分钟
  • 置换token有效时间:
  1. 移动–2分钟
  2. 电信–1小时
  3. 联通–1小时

33.关于集成SDK打包之后运营商判断失效问题

报错描述:“code”:1003,“errorDesc”:“未能完成操作。(移动预取号失败错误1023。)”,“innerCode”:103111,“innerDesc”:“WAP网关IP错误”,“message”:“移动预取号失败”}

原因:由于苹果系统在 xcode14.3,iOS 16.4系统上废弃了运营商判断的接口,目前我们的SDK通过该接口来判断运营商类型,所以在这种情况下判断运营商会失效;

解决方案:**使用低版本的xcode进行打包 **用 xcode14.2来打包,然后把 xcode14.3的iOS 16.4的包拉到 xcode14.2上,这样可以实现正确判断运营商类型;

服务端问题

1.错误:appId不能为空

{“message”:“请求非法,appId不能为空”,“code”:“403000”}
问题排查方案:
检查是否传入appId字段。请求数据格式是否正确,本接口不支持发送JSON格式数据。
问题解决方案:
首先,请核对字段名称无误,使用正确的字段名。
其次,请确保请求使用POST方法,参数放到RequestBody中以application/x-www-form-urlencoded或multipart/form-data提交
 

2.错误:请求非法,签名验证不通过

{“message”:“请求非法,签名验证不通过”,“code”:“403000”}
问题排查方案:
请确保签名生成无误。
问题解决方案:
1、首先确保使用了正确的应用对应的appKey。
2、其次请确保签名方式正确,签名字段的值由客户服务端生成,签名算法 hmacSHA256(所有传入参数按字段名排序后拼接的字符串,应用appKey) 后再进行16进制字符串转换的值。
 

3.返回参数mobileName密文无法解密

问题排查方案:
确认接口传入参数是否传入了encryptType字段,encryptType字段值:0 AES算法 、1 RSA算法,不传默认AES算法,检查对应的解密函数是否正确。
问题解决方案:
1、如使用AES算法,则确认使用了应用对应的正确的appKey解密。
2、如使用RSA算法,则确认创建应用时是否填写了RSA公钥,并使用了填入的RSA公钥对应的私钥解密。

4.错误:权限校验失败

{“code”:“500000”,“chargeStatus”:0,“message”:“权限校验失败”}
问题排查:
确认是否为电信运营商
问题解决方案:
如果为电信运营商,那么请将交易流水号记录并联系闪验客服运营人员处理。