本文介绍了iOS集成中可能出现的问题和解决方法。

调起无线认证SDK进入认证页面时,提示网络异常,请检查网络、UNKNOWN_ERROR或者出现空白页

查看Xcode console。
  • SG ERROR代码是1208、1215、1407、1411
    • 如果您已经接入过实人认证无线SDK,且iOS SDK版本号<=2.1,那么请到控制台下载新版本的无线SDK(iOS SDK版本号>=2.2),并使用新下载SDK包中的所有的文件替换原来开发包里的对应文件。
      说明 您可以在RPSDK.framework文件夹下的info.plist文件中查看CFRPSDKVersion。
    • 如果确认不存在上述情况,则说明当前开发包与在管理控制台下载SDK时上传包的BundleID不一致。请在管理控制台重新上传当前开发包,并使用新下载SDK中的yw_1222_*.jpg签名图片文件替换开发包中原有的文件。
  • SG ERROR代码是1412、1225

    说明图片不存在。请确保SDK中的yw_1222_*.jpg签名图片正确地引入到了Copy Bundle Resource下。

项目中之前引入的组件与无线认证SDK中的组件(例如SecurityGuardSDK、AliyunOSSiOS等)有重复

  • 若SecurityGuardSDK组件有重复,删除低版本,但要保留两个版本的yw_1222_*.jpg签名图片文件。
  • 若AliyunOSSiOS等其他组件有重复,删除低版本即可。

项目中之前引入的SecurityEnvSDK组件与无线认证SDK中的SGMain组件报duplicate symbol冲突

SecurityEnvSDK组件是SGMain组件的早先版本,删除SecurityEnvSDK,但要保留两个组件的yw_1222_*.jpg签名图片文件。

出现编译失败报错

根据不同的报错信息,采取相应解决方案,具体说明如下。
  • 报错信息:“duplicate symbol _OBJC_CLASS_$_xxx”

    处理建议:接入方修改调用NebulaWK的方式,去除NebulaWK的依赖,改用WindVane内部的NebulaWK。

  • 报错信息:“ld: symbol(s) not found for architecture arm64 (_OPEN_SECURITYBODY_ENV_XXX)”

    处理建议:删除旧版本无线保镖,导入新版本库,并清空Xcode Derived Data,重新编译。

  • 报错信息:“Undefined symbols for architecture arm64: "_OBJC_CLASS_$_xxx". ld: symbol(s) not found for architecture arm64”

    处理建议:请检查从阿里云控制台下载的所有.framework 文件都已正确导入项目。导入成功后可以在Build Phases > Link Binary With Libraries查看所有的.framework文件。如果没有,则说明导入过程有问题;请先参考iOS开发相关文档,学习如何导入第三方依赖到iOS工程。

  • 报错信息:“Undefined symbols for architecture x86_64:OBJC_CLASS$_RPSDK”
    处理建议:添加预处理宏控制,仅在真机环境调用实人认证,具体请参考以下方法。
    • Objective-C
      #if TARGET_OS_IPHONE
      [RPSDK startWithVerifyToken:viewController:completion:];
      #endif
    • Swift
      #if targetEnvironment(simulator)
      #else
      RPSDK.start(withVerifyToken:viewController:completion:)
      #endif
    • Xcode 11.4
      Build Settings > Excluded Source File Names > Debug中添加Any iOS Simulator: RPSDK.frameworkAny iOS Simulator: RPSDK.framework
      完成上述设置后,在引用时使用宏控制调用代码。
      #if TARGET_OS_SIMULATOR
      // 实人认证只支持真机环境调用。
      #else
      #import <RPSDK/RPSDK.h>
      [RPSDK startWithVerifyToken:viewController:completion:];
      #endif

出现运行崩溃报错

根据不同的报错信息,采取相应解决方案,具体说明如下。
  • 报错信息:“BUG IN CLIENT OF LIBLATFORM: Trying to recursively lock an os_unfair_lock(Cannot form weak reference to instance of class WVWebView. It is possible that this object was over-released, or is in the process of deallocation.)”
    处理建议:修改GrowingIO调用方式。setTrackWebView(false)全应用webview不抓取,针对需要抓取的webview,前去目标页面进行设置。
     GrowingIO.startWithConfiguration(MainApplication.getInstance(),
                   new Configuration().setApp(MainApplication.getInstance())
                   .trackAllFragments()
                   .setTrackWebView(false)
                   .setHashTagEnable(true)
                   .setChannel(CommonUtil.getAppChannel(MainApplication.getInstance())));

    请务必按照此方式修改,GrowingIO会在启动时hook webview api,仅注释调用无效。

  • 报错信息:“Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: ' setObjectForKey: object cannot be nil (key: appName)”

    处理建议:必须设置CFBundleName,即应用名称。

接入后导致应用网络请求失败

在RPSDK初始化以后,完成以下设置:
[[NSUserDefaults standardUserDefaults] setObject:@YES forKey:[NSString stringWithFormat:@"WebKitAll%@ccessFro%@eURLs", @"owFileA", @"mFil"]];

[[NSUserDefaults standardUserDefaults] setObject:@YES forKey:[NSString stringWithFormat:@"WebKitAll%@ccessFro%@eURLs", @"owUniversalA", @"mFil"]];

提示版本过低

必须设置CFBundleName,即应用名称。

第一次认证会出现几秒钟的延迟

Xcode10在调试模式下打开视频流时,会有10s左右延迟。断开调试模式后若无延时,则可以忽略此问题。

SG ERROR = 105、103

在Build Settings的Other Linker Flags中添加-ObjC

客户端回调-2状态

  • 确认当前SDK版本为控制台上下载的最新版。
  • 确认当前项目Bundle ID与生成SDK时上传的ipa一致,包名如果有更新,需要替换yw_1222_0769.jpg文件。
  • 确认传入SDK的viewController不为空且在应用顶层。
  • 与您的服务端团队确认当前生成token时传入的场景标识正确,且客户端调用的方法与该场景的认证方案匹配。
  • 确认当前网络的可用性,关闭代理。