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

前提条件

  • 应用必须运行在iOS 9.0+平台上。
  • 您必须采用Objective C++集成金融级实人认证服务。
  • 您的应用中未集成支付宝支付SDK。如果您的应用中已经集成了支付宝mPaaS版支付SDK,请参见 iOS客户端接入(mPaaS版)

获取SDK和Demo代码

下载iOS 支付宝认证(标准版)code demo

您可以在这个文件的注释中确认您使用的SDK的版本号:AlipayVerifySDK.framework/Headers/APVerifyService.h

开发环境配置

  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
    禁用设置

添加framework文件和bundle文件

注意 步骤1和步骤2是开发过程中的必须步骤,请勿忽略。
  1. 引入SDK中frameworks文件夹下所有的framework到工程之中。
    framework
  2. 找到并拷贝以下四个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中。
    bundle
  3. 添加系统库。
    Linked Framweworks and Libraries中添加如下iOS系统库:添加系统库
  4. 添加支付宝认证库。
    添加支付宝认证库

调用API

  1. 引用头文件。
    #import<AlipayVerifySDK/APVerifyService.h>
  2. 进行初始化。
    [ZolozSdk init]
  3. 调用startVerifyService
    #import <AlipayVerifySDK/APVerifyService.h>
    [[APVerifyService sharedService] startVerifyService:@{@"url": url?:@"",
                                                    @"certifyId": @"test-certifyId",
                                                          @"ext": @"test-extInfo"
                                                              } 
     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时,由于前端数据是可以修改的,业务方需要去查询认证结果接口的最终状态。
    当resultStatus为4000时,包含的部分错误码如下表格所示 :
    错误码 描述
    UNKNOWN_ERROR 未知异常。
    SYSTEM_ERROR 系统异常。
    USER_IS_NOT_CERTIFY 用户未认证。