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

前提条件

  • 应用必须在iOS 9.0+平台上运行。
  • 您必须采用Objective C++集成人脸核身服务。

获取SDK和Demo代码

开发环境配置

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

配置依赖

下载iOS SDK(SDK为framework包)后,在Xcode的Link Binary With Libraries添加SDK包和额外系统库依赖。具体如下:
  • SDK中的包
    MPRemoteLogging
    BioAuthEngine
    ZolozUtility
    AliyunIdentityManager
    APBToygerFacade
    BioAuthAPI
    ToygerService
    ZolozSensorServices
    ZolozMobileRPC
    ZolozOpenPlatformBuild
    APPSecuritySDK
  • 系统库依赖
    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
    AudioToolbox.framework
    CFNetwork.framework
    MobileCoreServices.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中。
  • OCRXMedia.bundle:位于AliyunIdentityManager.framework中。
TARGETS

调用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类型,通过调用移动端的核身认证移动端请求接口获取VerificationToken的对应值。
      • extParams:NSDictionary类型。必须传入当前viewController,用于展现等待图标和presentViewController。
        [extParams setValue:self forKey:@"currentCtr"];
        (非必须,默认不返回)返回视频:在extParams里面添加returnVideo,设置值为true,视频存储的路径:verifyWith接口返回的参数里,ZIMResponse类型参数的videoFilePath字段。
        [extParams setValue:@"true" forKey:@"returnVideo"];
        (非必须,默认为蓝色)设置OCR的下一步按钮颜色:在extParams里面添加正常颜色和按下颜色:ZIM_EXT_PARAMS_KEY_OCR_BOTTOM_BUTTON_COLORZIM_EXT_PARAMS_KEY_OCR_BOTTOM_BUTTON_CLICKED_COLOR,设置值为FFFFFF格式。
        [extParams setValue:@"00FF00" forKey:ZIM_EXT_PARAMS_KEY_OCR_BOTTOM_BUTTON_COLOR];
        [extParams setValue:@"0000FF" forKey:ZIM_EXT_PARAMS_KEY_OCR_BOTTOM_BUTTON_CLICKED_COLOR];
        (非必须,默认为蓝色)设置扫脸圆圈颜色:在extParams里面添加圆圈颜色:ZIM_EXT_PARAMS_KEY_OCR_FACE_CIRCLE_COLOR,设置格式为:FFFFFF格式。
        [extParams setValue:@"FF0000" forKey:ZIM_EXT_PARAMS_KEY_OCR_FACE_CIRCLE_COLOR];
    • 示例代码
      [[AliyunIdentityManager sharedInstance] verifyWith:certifyId extParams:extParams onCompletion:^(ZIMResponse *response) {
                  dispatch_async(dispatch_get_main_queue(), ^{
                     NSString *title = @"刷脸成功";
                     switch (response.code) {
                         case 1000:
                             break;
                         case 1003:
                             title = @"用户退出";
                             break;
                         case 2002:
                             title = @"网络错误";
                             break;
                         case 2006:
                             title = @"刷脸失败";
                             break;
                          case 2003:
                             title = @"设备时间不准确";
                             break;
                         default:
                             break;
                     }
                  });
              }];
    • 返回结果espons.code有以下六种返回值,类型为整型。
      HttpCode 错误码 描述
      1000 ZIMResponseSuccess 表示刷脸成功,该结果仅供参考,可通过移动端核身认证移动端查询获取最终认证结果。
      1001 ZIMInternalError 表示系统错误。
      1003 ZIMInterrupt 表示验证中断。
      2002 ZIMNetworkfail 表示网络错误。
      2003 ZIMTIMEError 表示设备时间设置不对。
      2006 ZIMResponseFail 表示刷脸失败,如需获取更详细的失败原因,可通过移动端核身认证移动端查询获取最终认证结果。
      了解更多信息,请参见iOS客户端错误码详情
      [[AliyunIdentityManager sharedInstance] verifyWith:certifyId extParams:extParams onCompletion:^(ZIMResponse *response) {}];
      response.imageContent:返回采集到的人脸图片数据,格式为NSData。如果用户中途退出或者超时,则图片数据为nil。客户上传图片到移动端时,不能对NSData进行任何压缩或者缩放,因为移动端会对图片做MD5校验,如果有压缩或者缩放,会导致MD5值不一致。将NSData转换成图的示例如下:
      UIImage* newImage = [UIImage imageWithData:response.imageContentData];
      (使用OCR能力时返回)response.faceData:返回采集到的身份证人脸面照片,格式为NSData。把NSData转换为图的示例如下:
      UIImage* faceImage = [UIImage imageWithData:response.faceData];
      (使用OCR能力时返回)response.countryData:返回采集到的身份证国徽面照片,格式为NSData。把NSData转换为图的示例如下:
      UIImage* countryImage = [UIImage imageWithData:response.countryData];

      response.reason和response.retMessageSub:返回原因或者认证文案。

AppStore上架注意事项

AppStore上架时,请确保您的App已申请了Camera权限,并在Info.plist中已添加NPrivacy - Camera Usage Description说明,否则AppStore将上架失败。