刷脸认证提供iOS客户端SDK,帮助您在您的业务应用(App)中实现刷脸认证功能。您可通过刷脸认证的服务端认证初始化接口,获取刷脸认证唯一标识CertifyId,并使用CertifyId唤起刷脸认证客户端SDK。本文将结合示例代码进行iOS客户端接入的详细说明。

前提条件

  • 刷脸认证应用必须运行在iOS 9.0及以上版本的系统上。
  • 您的业务应用必须采用Objective C++或Swift集成金融级实人认证服务。
  • 您的业务应用中未集成支付宝mPaaS SDK。
说明 iOS接入不支持模拟器模式调试。

配置开发环境

  1. info.plist中配置摄像头权限请求。
    ios-开发环境配置1
  2. 在Xcode的编译设置中关闭Enable Bitcode选项。
    ios-开发环境配置2
  3. 在Xcode编译设置的Linking > Other Linker Flags中,添加设置-ObjC -framework "BioAuthAPI" -lxml2
    如果您的工程已设置了-force_load选项,则需要加入-force_load <framework path>/AliyunOSSiOSios-开发环境配置3
  4. 在Xcode调试设置的Edit Scheme > Run > Options中禁用Metal API Validation
    ios-开发环境配置4

配置依赖

  1. 下载AliyunFace iOS SDK
    该SDK为framework包。您需要在Xcode添加Link Binary With Libraries、SDK中的15个包和额外系统库依赖。
  2. 解压下载的SDK包,并在解压的文件夹中执行以下命令提取所有的framework到Products目录。
    for i in $(ls *.tgz);do tar xvf $i;done
    • SDK中的包:
      APPSecuritySDK
      MPRemoteLogging
      AliyunOSSiOS
      BioAuthEngine
      ZolozUtility
      AliyunIdentityManager
      APBToygerFacade
      BioAuthAPI
      ToygerService
      ZolozSensorServices
      ZolozOpenPlatformBuild
      deviceiOS
      ZolozMobileRPC
      ZolozIdentityManager
      OCRDetectSDKForTech
      ToygerNative
    • 系统库依赖:
      CoreGraphics.framework
      Accelerate.framework
      SystemConfiguration.framework
      AssetsLibrary.framework
      CoreTelephony.framework
      QuartzCore.framework
      CoreFoundation.framework
      CoreLocation.framework
      ImageIO.framework
      CoreMedia.framework
      CoreMotion.framework
      AVFoundation.framework
      WebKit.framework
      libresolv.tbd
      libz.tbd
      libc++.tbd
      libc++.1.tbd
      libc++abi.tbd
      AudioToolbox.framework
      CFNetwork.framework
      MobileCoreServices.framework
      libz.1.2.8.tbd
      AdSupport.framework

拷贝资源文件

选择TARGETS,单击Build Phases页签,在Copy Bundle Resources中添加以下4个bundle:
  • APBToygerFacade.bundle:位于APBToygerFacade.framework中。
  • ToygerNative.bundle:位于ToygerNative.framework中。
  • OCRXMedia.bundle:位于OCRDetectSDKForTech.framework中。
  • BioAuthEngine.bundle:位于BioAuthEngine.framework中。
金融级实人认证ios SDK Copy Bundle Resources页面

调用SDK

  1. 引入头文件。
    命令如下:
    #import <AliyunIdentityManager/AliyunIdentityPublicApi.h>
  2. 初始化SDK。
    说明 为了提升用户体验并为刷脸认证准备一些必备的数据,iOS客户端需要进行SDK初始化。您可以在调用appDelegate函数(如下示例)和步骤3获取metaInfo数据前,这两个位置二选一放置初始化SDK代码。

    appDelegate函数调用,示例代码:

    (BOOL)application:(UIApplication)application didFinishLaunchingWithOptions:(NSDictionary)launchOptions {
    [AliyunSdk init];// 初始化SDK。
    }
  3. 获取metaInfo数据。
    命令如下:
    [AliyunSdk init];// 初始化SDK,如果已经在appDelegate函数中调用过,此处无需再重复调用。
    [AliyunIdentityManager getMetaInfo]
    说明 返回值类型是NSDictionary,您的服务端需要将其转换为JSON字符串,调用服务端发起认证请求接口时,在入参metaInfo中传入该值。关于发起认证请求的具体操作,请参见InitFaceVerify
  4. 可选:获取设备指纹。
    命令如下:
    /*获取设备指纹token。
    1,SDK初始化后需要经过一段时间计算才能获取到deviceToken,建议间隔3秒以上。
    2,deviceToken短期有效,不能长期缓存使用,不能作为设备唯一标识。
    */
    
    NSString * astring = [AliyunSdk getMobileSession];             
    说明 调用[AliyunSdk init]后,才能获取到该结果。
  5. 调用SDK开始认证。
    命令如下:
    [[AliyunIdentityManager sharedInstance] verifyWith:certifyId extParams:extParams onCompletion:^(ZIMResponse *response) {}];
    参数说明如下表所示。
    名称 类型 描述
    certifyId NSString 您可以通过服务端发起申请请求接口获取该参数。关于发起认证请求的具体操作,请参见InitFaceVerify
    extParams NSDictionary 通过以下代码传入当前viewController,用于展现网络加载和presentViewController
    [extParams setValue:self forKey:@"currentCtr"];
    • 如需设置OCR的下一步按钮的颜色,在extParams中添加按钮的正常颜色和按钮按下时的颜色。代码示例如下:
      [extParams setValue:@"00FF00" forKey:ZIM_EXT_PARAMS_KEY_OCR_BOTTOM_BUTTON_COLOR];
      [extParams setValue:@"0000FF" forKey:PARAMS_KEY_OCR_BOTTOM_BUTTON_CLICKED_COLZIM_EXT_OR];
    • 如需设置扫脸时的圆圈颜色,在extParams中添加圆圈颜色。代码示例如下:
      [extParams setValue:@"FF0000" forKey:ZIM_EXT_PARAMS_KEY_OCR_FACE_CIRCLE_COLOR];
    • 如需返回本地视频,在extParams中添加returnVideo,并且设置值为true。代码示例如下:
      [extParams setValue:@"true" forKey:@"returnVideo"];
    • 如需服务端查询接口返回视频,需要额外在extParams中添加ZIM_EXT_PARAMS_KEY_USE_VIDEO_UPLOAD,并且设置值为true。代码示例如下:
       [extParams setValue:@"true" forKey:ZIM_EXT_PARAMS_KEY_USE_VIDEO_UPLOAD] 
      说明 金融级实人认证支持设置返回活体检测的视频,默认设置为不返回。如果设置为返回,在您使用金融级实人认证SDK完成认证(不区分认证结果为F或T),并在SDK回调和查询接口时返回视频路径,请您及时处理。
    返回结果说明:
    [[AliyunIdentityManager sharedInstance] verifyWith:certifyId extParams:extParams onCompletion:^(ZIMResponse *response) {}];
    response.code包含以下返回参数,具体说明如下表所示。
    错误码 错误码文案 错误码描述
    1000(ZIMResponseSuccess) 刷脸成功 代表刷脸成功,该结果仅供参考,可通过服务端查询认证结果接口获取最终认证结果。关于发起认证请求的具体操作,请参见InitFaceVerify
    1001(ZIMInternalError) 系统错误 表示系统错误。
    1003(ZIMInterrupt) 验证中断 表示验证中断。
    2002(ZIMNetworkfail) 网络错误 表示网络错误。
    2003(ZIMTIMEError) 客户端设备时间错误 表示客户端设备时间错误。
    2006(ZIMResponseFail) 刷脸失败 表示刷脸失败,如需获取更详细的失败原因,需调用服务端查询认证结果接口。关于发起认证请求的具体操作,请参见InitFaceVerify
    说明 更多错误码信息,请参见iOS客户端错误码详情
    代码示例:
    [[AliyunIdentityManager sharedInstance] verifyWith:certifyId extParams:extParams onCompletion:^(ZIMResponse *response) {
             dispatch_async(dispatch_get_main_queue(), ^{
                 NSString *title = @"刷脸成功";
                 switch (response.code) {
                     case ZIMResponseSuccess: //1000。
                         break;
                     case ZIMInterrupt:   //1003。
                         title = @"用户退出";
                         break;
                     case ZIMNetworkfail: //2002。
                         title = @"网络错误";
                         break;         
                     case ZIMTIMEError: //2003。
                         title = @"设备时间设置不对";
                         break; 
                     case ZIMResponseFail: //2006。
                         title = @"刷脸失败";
                         break;
                     case ZIMInternalError:   //1001。
                         title = @"初始化失败";
                         break;
                     default:
                         break;
                 }

Demo代码包

您可以下载以下iOS Demo代码包进行体验。在使用过程中,请替换iOS Demo代码包中的文件的版本为最新的版本:

SDK包大小裁剪说明

当您对SDK包大小有限制时,可以根据如下情况进行裁剪:
  • 如果您之前没有使用过支付宝开放平台版,或开放平台版代码已经下线,可以在SDK包中删除ZolozIdentityManager、ZolozMobileRPC内容。
  • 如果您不需要使用OCR功能,可以在SDK包中删除OCRDetectSDKForTech内容,并删除对应的bundle(OCRXMedia.bundle)。