下载无线认证SDK后,您可参考以下步骤将认证SDK集成到您的iOS应用中。

背景信息

单击查看老版本接入文档说明。

说明 iOS SDK与BundleID绑定,不同BundleID需要在管理控制台上重新下载SDK。

在工程中导入 SDK

说明 对于已经接入过实人认证无线SDK的接入方(iOS SDK版本号<=2.1,可在RPSDK.framework文件夹下info.plist文件中查看CFRPSDKVersion),在控制台下载到新版本的无线SDK后(iOS SDK版本号>=2.2),需要将新下载SDK包中的所有的文件替换原来工程里的对应文件,否则会报错。
  1. 解压无线认证SDK后,将以下iOS的依赖包引入到您的应用工程中:
    • RPSDK.framework
    • FaceLivenessOpen.framework
    • SecurityGuardSDK.framework
    • SGMain.framework
    • SGSecurityBody.framework
    • AliyunOSSiOS.framework
    • WindVane.framework
    • WindVaneBasic.framework
    • WindVaneBridge.framework
    • WindVaneCore.framework
    • ZipArchive.framework
    • AliReachability.framework
  2. 确认您的工程中已引入以下实人认证服务需要的系统依赖:
    • CoreMedia.framework
    • CoreMotion.framework
    • CoreTelephony.framework
    • AVFoundation.framework
    • ImageIO.framework
    • MobileCoreServices.framework
    • MediaPlayer.framework
    • CoreLocation.framework
    • AddressBook.framework
    • AddressBookUI.framework
    • SystemConfiguration.framework
    • AudioToolbox.framework
    • AssetsLibrary.framework
    • Libresolv.tbd
    • WebKit.framework
    • Libiconv.tbd
    • Libc++.tbd
    • Libz.tbd
  3. 在您的工程资源中(Copy Bundle Resources),引入无线认证SDK 包中的yw_1222_*.jpg签名图片文件,以及resource目录下的FaceLivenessSDK.bundleRPSDK.bundle文件。
  4. 编译选项:在工程的Other Linker Flags选项中添加-ObjC。

使用SDK

  1. 初始化。
    一般在应用启动时进行。
    #import <RPSDK/RPSDK.h>
     [RPSDK initialize:RPSDKEnvOnline] //必须为RPSDKEnvOnline
  2. 进入认证。

    调用开始实人认证的接口,需要您提前获取verifyTokenverifyToken由您的服务端调用发起认证请求接口DescribeVerifyToken获取),将之传入接口:

    [RPSDK start:verifyToken rpCompleted:^(RPVerifyState verifyState, NSString *code) {
         NSLog(@"verifyResult = %ld",(unsigned long)verifyState);
         if(verifyState == RPVerifyStatePass) { //认证通过。建议接入方调用实人认证服务端接口DescribeVerifyResult来获取最终的认证状态,并以此为准进行业务上的判断和处理
         }
         else if(verifyState == RPVerifyStateFail) { //认证不通过。建议接入方调用实人认证服务端接口DescribeVerifyResult来获取最终的认证状态,并以此为准进行业务上的判断和处理
         }
         else if(verifyState == RPVerifyStateNotVerify) { //未认证,用户主动退出,或者姓名身份证号实名校验不匹配等原因,导致未完成认证流程。
         }
    
     }withVC:self.navigationController];

    RPSDK.start 接口支持除 RPH5BioOnly、RPMin 外的所有认证方案,该接口会以加载 H5 的方式显示页面,如果您选择的认证方案只包含 活体检测 步骤(请参见认证方案,并对调起实人认证的速度有较高的要求,可以考虑使用RPSDK.startVerifyByNative接口:

    [RPSDK startVerifyByNative:verifyToken rpCompleted:^(RPVerifyState verifyState, NSString *code) {
         NSLog(@"verifyResult = %ld",(unsigned long)verifyState);
         if(verifyState == RPVerifyStatePass) { //认证通过。建议接入方调用实人认证服务端接口DescribeVerifyResult来获取最终的认证状态,并以此为准进行业务上的判断和处理
         }
         else if(verifyState == RPVerifyStateFail) { //认证不通过。建议接入方调用实人认证服务端接口DescribeVerifyResult来获取最终的认证状态,并以此为准进行业务上的判断和处理
         }
         else if(verifyState == RPVerifyStateNotVerify) { //未认证,用户主动退出,或者姓名身份证号实名校验不匹配等原因,导致未完成认证流程。
         }
     }withVC:self.navigationController];
    说明 RPSDK.startVerifyByNative接口支持除RPH5BioOnly之外的仅活体检测认证方案(如 RPBioOnly、FDBioOnly、FVBioOnly),包含身份证件拍摄等其他步骤的认证方案需要使用RPSDK.start 接口。另,使用RPSDK.startVerifyByNative接口时,对应的认证方案不支持在控制台配置引导页、授权页、结果页等,需接入方自行处理。如果需要在控制台配置使用引导页、授权页、结果页等,则只能使用RPSDK.start接口。

    在开始实人认证的接口中,verifyToken参数由接入方的服务端调用实人认证服务的DescribeVerifyToken接口获得。

    rpCompleted: 代码块中可获取到认证状态和认证失败时错误码,参见下表说明。

    verifyState code code释义
    RPVerifyStatePass 1 认证通过。
    RPVerifyStateFail 取值3~12 表示认证不通过,具体的不通过原因可以查看服务端的查询认证结果(DescribeVerifyResult)接口文档中认证状态的表格说明。
    RPVerifyStateNotVerify -1 未完成认证,原因是:用户在认证过程中,主动退出。
    RPVerifyStateNotVerify 3001 未完成认证,原因是:认证token无效或已过期。
    RPVerifyStateNotVerify 3101 未完成认证,原因是:用户姓名身份证实名校验不匹配。
    RPVerifyStateNotVerify 3102 未完成认证,原因是:实名校验身份证号不存在。
    RPVerifyStateNotVerify 3103 未完成认证,原因是:实名校验身份证号不合法。
    RPVerifyStateNotVerify 3104 未完成认证,原因是:认证已通过,重复提交。
    RPVerifyStateNotVerify 3204 未完成认证,原因是:非本人操作。

常见问题

  • 调起无线认证SDK进入认证页面时,提示网络异常,请检查网络UNKNOWN_ERROR或者出现空白页。
    处理建议:查看Xcode console。
    • SG ERROR = 1208、1215、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 x86_64:_OBJC_CLASS_$_RPSDK
      处理建议:添加以下预处理宏控制,仅在真机环境调用实人认证。
       #if TARGET_IPHONE_SIMULATOR // 实人认证不支持模拟器调试
      
                        #elif TARGET_OS_IPHONE // 真机
                       // 实人认证初始化
                        [RPSDK initialize:RPSDKEnvOnline];
                        // 进入认证
                       // [RPSDK start:rpCompleted:]
                       #endif
  • 出现运行崩溃报错。
    根据不同的报错信息,采取相应解决方案,具体说明如下。
    • 报错信息:BUG IN CLIENT OF LIBLATFORM: Trying to recursively lock an os_unfair_lock
      处理建议:修改GrowingIO调用方式。setTrackWebView(false)全应用webview不抓取,针对需要抓取的webview,前去目标页面进行设置。
       GrowingIO.startWithConfiguration(MainApplication.getInstance(),
                     new Configuration().setApp(MainApplication.getInstance())
                     .trackAllFragments()
                     .setTrackWebView(false)
                     .setHashTagEnable(true)
                     .setChannel(CommonUtil.getAppChannel(MainApplication.getInstance())));
    • 报错信息: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