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

前提条件

  • 应用必须在 iOS 9.0+ 平台上运行。
  • 您必须采用 Objective C++ 集成金融级实人认证服务。
  • 您的应用中未集成支付宝支付 SDK。

开发环境配置

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

配置依赖

下载AliyunFace iOS SDK, SDK为framework包。下载后,在Xcode添加Link Binary With Libraries 添加SDK中的10个包,和额外系统库依赖。具体如下:

  • SDK中的包
    MPRemoteLogging
    AliyunOSSiOS
    BioAuthEngine
    ZolozUtility
    AliyunIdentityManager
    APBToygerFacade
    BioAuthAPI
    ToygerService
    ZolozSensorServices
    MPRemoteLogging
    YunCeng
  • 系统库依赖
    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++.1.tbd
    libc++abi.tbd
    CoreMotion.framework
    AudioToolbox.framework
    CFNetwork.framework
    MobileCoreServices.framework
    CoreLocation.framework
    libz.1.2.8.tbd
    AdSupport.framework

拷贝资源文件

选择 TARGETS,点击 Build Phases 标签页,在 Copy Bundle Resources 中添加如下三个 bundle:

  • APBToygerFacade.bundle:所在位置为 APBToygerFacade.framework 中;
  • ToygerService.bundle:所在位置为 ToygerService.framework 中;
  • BioAuthEngine.bundle:所在位置为 BioAuthEngine.framework 中。
拷贝资源文件

调用SDK

  1. 引入头文件
    #import <AliyunIdentityManager/AliyunIdentityPublicApi.h>
  2. 初始化 SDK

    初始化 SDK 的代码为:[AliyunSdk init];

    增加初始化接口的目的提高身份核验的用户体验,为刷脸认证准备一些必备数据,初始化接口是异步执行,不会影响主线程 UI 渲染,建议接入方将初始化接口放在 appdelegate 的如下函数中调用:

     (BOOL)application:(UIApplication)application didFinishLaunchingWithOptions:(NSDictionary)launchOptions
  3. 获取 metainfo 数据
    [AliyunIdentityManager getMetaInfo]

    返回值是 NSDictionary,您的服务端需要将其转换为 JSON 字符串,调用服务端 发起认证请求 时在入参 metainfo 中传入该值。

  4. 开始认证
    • 调用 SDK
      [[AliyunIdentityManager sharedInstance] verifyWith:certifyId extParams:extParams onCompletion:^(ZIMResponse *response) {}];
    • 参数说明
      • certifyId:类型是NSString。通过服务端 发起认证请求 获取。
      • extParams:类型是 NSDictionary 。一般传入当前viewController,用于展现网络菊花。
        [extParams setValue:self forKey:@"currentCtr"];

        如果您希望在 iPad 接入,请参看以下代码获取本参数:

            UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
            NSString *direction = @"";
            NSMutableDictionary  *extParams = [NSMutableDictionary new];
            switch (orientation) {
                case UIInterfaceOrientationLandscapeLeft:
                    direction = @"left";
                    break;
                case UIInterfaceOrientationLandscapeRight:
                    direction = @"right";
                    break;
                default:
                    break;
            }
        
            //在iPad的横屏模式下,若您想使用横屏模式的人脸认证,请使用这个参数。
            [extParams setValue:direction forKey:@"direction"];
        
            //在iPad的横屏模式下,若您想使用竖屏模式的人脸认证,请使用这个参数。    
            [extParams setValue:@"forcePortrait" forKey:@"direction"];
        说明

        只有在iPad的横屏模式下,才传此参数。其他任何情况下都不传这个参数。

    • 示例代码:
      [[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 ZIMResponseFail:  //2006
                           title = @"刷脸失败";
                           break;
                       case ZIMInternalError:   //1001
                           title = @"初始化失败";
                           break;
                       default:
                           break;
                   }
    • 返回结果
      [[AliyunIdentityManager sharedInstance] verifyWith:certifyId extParams:extParams onCompletion:^(ZIMResponse *response) {}];

      respons.code 有以下五种返回值,类型是整型:

      • 1000 (ZIMResponseSuccess):代表刷脸成功,该结果仅供参考,可通过服务端 查询认证结果 获取最终认证结果。
      • 1001 (ZIMInternalError):表示系统错误
      • 1003 (ZIMInterrupt):表示验证中断
      • 2002 (ZIMNetworkfail):表示网络错误
      • 2006 (ZIMResponseFail):表示刷脸失败,如需获取更详细的失败原因,需调用服务端 查询认证结果