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

前提条件

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

背景信息

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

说明 有关mPaaS拦截器的概念请参见拦截器

整体流程

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

准备工作

  1. 准备mPaaS工程。
    本文以mPaaS iOS 60基线托管模式框架,详细介绍iOS客户端的接入步骤。为了说明方便,从最简单的项目开始。如果mPaaS项目已经存在,可以忽略此步骤。

    通过mPaaS Extension创建一个iOS项目,按需选择需要接入的组件。创建完成后,务必确保mPaaS项目可以正常编译、调试和运行。

    创建mpaas项目1
  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. 下载iOS 支付宝认证(mpass版)code 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。
      [ZolozSdk init]
      说明 请您尽快调⽤初始化代码。
    3. 调用startVerifyService完成电⼦合约签订。
      #import<AlipayVerifySDK/APVerifyService.h>
      [[APVerifyService sharedService] startVerifyService:@{@"url": url?:@"",
                                                            @"certifyId": @"testcertifyId",
                                                            @"ext": @"testextInfo"
                                                            }target:self block:^(NSMutableDictionary * resultDic){
          NSLog(@"%@", resultDic);
      }];

      请求参数

      参数名称 参数说明
      options 包含以下两个参数:
      • 认证url。该参数从应用服务端获得。
      • 本次认证的认证ID。该参数从应用服务端获得。
      @{R
      @"url":url?:@"",// 认证url。
      @"certifyId": @"test-certifyId", // 认证流水号,从应用服务端获得。 
      }
      targetVC 当前controller,必须有根navigationController,且需要隐藏navigationBar再进入SDK,回来后恢复。因为SDK内部已有自定义navigationBarView
      block 返回的结果,在resultDic里面获取。

      返回结果

      回调函数带入的参数形式如下:
      result: {resultStatus: 'xx',  
               result: { }
              }
      参数名称 类型 描述
      resultStatus string 认证流程结果状态码,具体请参见下文ResultStatus定义。
      result.certifyId string 本次认证流水号certifyId。
      result.errorCode string 业务异常错误码。
      说明 result的对象可能为null,API接入者代码逻辑需要做防御性处理,避免NPE异常。

      resultStatus枚举取值如下:

      状态码 描述
      9000 认证通过。
      6002 网络异常。
      6001 用户取消了业务流程,主动退出。
      4000 业务异常。
      说明
      • resultStatus为6001、6002时,result对象数据为空,接入者不需要获取result对象数据。
      • resultStatus为9000时,由于前端数据是可以修改的,业务方需要去查询认证结果接口的最终状态。
  4. 验证实人认证业务。
    认证成功如下图所示:1

相关操作说明

⼀定要替换所有的.framework & bundle⽂件。AlipayVerifySDKbundle在外部,其余bundle.framework中。

如果您的App应用接入了容器,需要防止容器拦截scheme,否则您的App无法唤起扫脸应用。
NBServiceConfigurationGet().shouldWKDispatchStartEvent = YES;
反馈问题时请加上版本号,您可以在APVerifyService.h中找到版本号。查找版本号