本文指导您在 iOS 应用中集成金融级实人认证服务。

前提条件

  • 目前 SDK 只⽀持 iOS 9.0 或以上版本的⼿机系统。 SDK 不⽀持 swift ⽅式调⽤。
  • 您必须采用 Objective C++ 集成金融级实人认证服务。
  • 您的应用中已集成支付宝支付 SDK。

背景信息

在 mPaaS 项目中集成金融级实人认证和在普通 iOS 原生项目中的步骤并不完全一致,需要处理好共享组件库之间的冲突,并在 mPaaS项目中注册好实人认证服务的拦截器。

说明

mPaaS 拦截器概念请参见 拦截器

整体流程

  1. 服务端返回 url 给 iOS 客户端;
  2. 启动客户端完成电⼦合约签订。

准备工作

  1. 准备 mPaaS 工程

    本文以 mPaaS iOS 60 基线托管模式框架为准,介绍详细接入步骤。为了说明方便,我们从一个最简单的项目开始。如果 mPaaS 项目已经存在,可以跳过这一步。

    首先通过 mPaaS Extension 创建一个 iOS 项目,按需选择需要接入的组件。

    创建mpaas项目1创建mpaas项目2

    创建完成后,务必确保 mPaaS 项目可以正常编译、调试和运行。

  2. 准备实人认证服务

    请参考 开通账号和服务,开通实人认证服务并获取到正确的AccessKey。

系统配置

  1. info.plist 中配置摄像头权限请求。
    摄像头权限
  2. Xcode 的编译设置中关闭 Bitcode 选项。
    关闭Bitcode
  3. Xcode 编译设置的 Linking > Other Linker Flags 中,添加设置 -ObjC -framework "BioAuthAPI" -lxml2
    添加设置
  4. Xcode 调试设置的 Edit Scheme > run > Options 中禁用 Metal API Validation
    禁用设置

接入过程

  1. 实人认证 mPaaS 版 SDK 接入
    1. 点击下载 实人认证 mPaaS 版 SDKcode demo

      SDK 解压后得到如下文件:

      mpaas sdk下载
    2. 将frameworks文件夹下所有的framework文件添加到工程中:
      mpaas framework
    3. 找到并拷贝以下四个 bundle 文件,并将其手动链接到工程。bundle 文件在同名的 framework 文件中。
      选择 TARGETS,单击 Build Phases 标签页,在 Copy Bundle Resources 中添加如下四个 bundle:
      • APBToygerFacade.bundle:位于 APBToygerFacade.framework
      • ToygerService.bundle:位于 ToygerService.framework
      • BioAuthEngine.bundle:位于 BioAuthEngine.framework
      • AlipayVerifyBundle.bundle:位于framework
      mpaas bundle
  2. 实人认证拦截器配置

    在 mPaaS 项目中,需要通过拦截器对认证业务的请求进行特殊处理。拦截器ZolozMobileInterceptor已经实现,并包含在实人认证 SDK 中,这里需要把该拦截器注册到 mPaaS 拦截器配置中。

    另外,需要打开mPaaS容器shouldWKDispatchStartEvent开关。

    参考代码:

    // 位置:DTFrameworkInterface+DEMO.m 
    ...
    - (void)application:(UIApplication *)application beforeDidFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
    
        // Step 1. 初始化mPaaS H5容器
        [MPNebulaAdapterInterface initNebula];
    
        // Step 2. 初始化RPC拦截器
        [MPRpcInterface initRpc];
    
        // Step 3. 配置Zoloz必要的拦截器
        ZolozMobileInterceptor *zolozIcp = [[ZolozMobileInterceptor alloc] init];
        [MPRpcInterface addRpcInterceptor:zolozIcp];
    
        //Step 4.人脸模块初始化。
        [ZolozSdk init];
    }
    
    - (void)application:(UIApplication *)application afterDidFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
        //Step 5. Nebula容器配置修改
        NBServiceConfigurationGet().shouldWKDispatchStartEvent = YES;
    }
  3. 实人认证业务调用
    1. 引用头文件
      #import<AlipayVerifySDK/APVerifyService.h>
    2. 调⽤SDK
      #import<AlipayVerifySDK/APVerifyService.h>
      [ZolozSdk init] // 尽早初始化
      说明

      请尽早调⽤初始化代码。

      调用 startVerifyService, 让⽤户完成电⼦合约签订。

      #import<AlipayVerifySDK/APVerifyService.h>
      [[APVerifyService sharedService] startVerifyService:@{@"url": url?:@"",
                                                            @"certifyId": @"testcertifyId",
                                                            @"ext": @"testextInfo"
                                                            }target:self block:^(NSMutableDictionary * resultDic){
          NSLog(@"%@", resultDic);
      }];
    3. 输入参数
      参数名称 参数说明
      options 包含两个参数:
      • 认证 url。该参数从应用服务端获得。
      • 本次认证的认证 ID。该参数从应用服务端获得。
      @"certifyId": @"test-certifyId",// 认证流水号,从商家服务端获得
      @{
      @"url":url?:@"",
      @"certifyId": @"test-certifyId",
      }
      targetVC 当前 controller,必须有根 navigationController,且需要隐藏 navigationBar 再进入 SDK,回来后恢复,因为 SDK 内部已有自定义 navigationBarView
      block 返回的结果,在 resultDic 里面获取。
    4. 返回结果

      回调函数带入的参数形式如下:

      result: {resultStatus: 'xx',  
               result: { }
              }
      名称 类型 描述
      resultStatus string 认证流程结果状态码, 详见以下 ResultStatus 定义
      result.certifyId string 本次认证流水号 certifyId
      result.errorCode string 业务异常错误码
      说明 result 对象可能为 null,API 接入者代码逻辑需要做防御性处理,避免 NPE 异常。
    5. ResultStatus 枚举定义
      状态码 描述
      9000 认证通过
      6002 网络异常
      6001 用户取消了业务流程,主动退出
      4000 业务异常
      说明
      • resultStatus = 6001、6002 时,result 对象数据为空,接入者不需要获取 result 对象数据。
      • resultStatus= 9000 时,业务方需要去查询认证结果接口查询最终状态(由于前端数据是可篡改的)。
  4. 验证

    正确拉起服务,完成验证后,应该见到如下界面:

    1

说明

  1. ⼀定要替换所有.framework & bundle⽂件。

    AlipayVerifySDK的bundle在外部,其余bundle在.framework中。

  2. 若 app 中有接入容器,需要防止容器拦截 scheme,否则点击唤不起扫脸:
    NBServiceConfigurationGet().shouldWKDispatchStartEvent = YES;
  3. 反馈问题时请加上版本号,版本号您可以在APVerifyService.h中找到。查找版本号