人脸核身提供iOS客户端SDK,帮助您在App中实现刷脸认证功能。您可通过核身认证移动端请求接口获取实人认证唯一标识VerificationToken,并使用VerificationToken唤起人脸核身客户端SDK。本文将结合示例代码进行详细的说明介绍。
阿里云视觉智能开放平台各类目视觉AI能力API接入、接口使用或问题咨询等,请通过钉钉群(23109592)加入阿里云视觉智能开放平台咨询群联系我们。
前提条件
- 应用必须在iOS 9.0+真机平台上运行。 
- 您必须采用Objective C++集成人脸核身服务。 
获取SDK和Demo代码
模拟器使用存在安全风险,暂不支持在模拟器上运行。
开发环境配置
- 在info.plist中配置摄像头权限请求。  
- 在Xcode的编译设置中关闭Bitcode选项。  
- 在Xcode编译设置的Linking > Other Linker Flags中,添加设置-ObjC。  
拷贝资源文件
选择TARGETS,选择Build Phases标签页,在Copy Bundle Resources中添加如下四个bundle:
- APBToygerFacade.bundle:位于APBToygerFacade.framework中。 
- BioAuthEngine.bundle:位于BioAuthEngine.framework中。 
- OCRXMedia.bundle:所在位置为OCRDetectSDKForTech.framework中。 
- ToygerService.bundle:所在位置为ToygerService.framework中。 

配置依赖
下载iOS SDK(SDK为framework包)后,在Xcode的Link Binary With Libraries添加SDK包和额外系统库依赖。具体如下:
- SDK中的包 - APBToygerFacade APPSecuritySDK BioAuthEngine DTFIdentityManager DTFMobileRPC DTFUtility OCRDetectSDKForTech ToygerNative ToygerService VerifyNativeAbility ZolozFaceAuthFacade
- 系统库依赖 - CoreGraphics.framework Accelerate.framework SystemConfiguration.framework AssetsLibrary.framework CoreTelephony.framework QuartzCore.framework CoreFoundation.framework CoreLocation.framework ImageIO.framework CoreMedia.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
调用SDK
- 引入头文件。 - #import <ZolozFaceAuthFacade/ZolozFaceAuthFacade.h>
- 初始化SDK。 - 初始化SDK的代码为: - [ZolozFaceAuthFacade init];- 增加初始化接口的目的在于提高身份核验的用户体验,为刷脸认证准备一些必备数据。初始化接口是异步执行,不会影响主线程UI渲染,建议接入方将初始化接口放在appdelegate的如下函数中调用: - -(BOOL)application:(UIApplication)application didFinishLaunchingWithOptions:(NSDictionary)launchOptions
- 获取metainfo数据。 - [ZolozFaceAuthFacade getMetaInfo];- 返回值为NSDictionary,接入方移动端需要将其转换为JSON字符串,调用移动端的核身认证移动端请求接口时在请求参数MetaInfo中传入该值。 
- 开始认证。 - 调用SDK - [ZolozFaceAuthFacade verifyWith:self.verificationToken extParams:extParams onCompletion:^(ZIMResponse *response) {}];
- 参数说明 - verificationToken:NSString类型,通过调用移动端的核身认证移动端请求接口获取VerificationToken的对应值。 说明- 调用核身认证移动端请求接口返回的verificationToken有效期时间为30分钟,从verificationToken生成时间开始算起,超过有效期再进行人脸认证会报错,请在有效期时间内完成认证。 
- extParams:NSDictionary类型。必须传入当前viewController,用于展现等待图标和presentViewController。 - [extParams setValue:self forKey:@"currentCtr"];- (非必须,默认不返回)返回视频:在extParams里面添加returnVideo,设置值为true,视频存储的路径:verifyWith接口返回的参数里,ZIMResponse类型参数的videoFilePath字段。 - [extParams setValue:@"true" forKey:@"returnVideo"];
 
- 示例代码 - [ZolozFaceAuthFacade verifyWith:self.verificationToken extParams:extParams onCompletion:^(ZIMResponse *response) { dispatch_async(dispatch_get_main_queue(), ^{ NSString *title = @"刷脸成功"; switch (response.code) { case 1000: break; case 1001: title = @"系统错误"; 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客户端错误码详情。 - [ZolozFaceAuthFacade verifyWith:self.verificationToken extParams:extParams onCompletion:^(ZIMResponse *response) {}];- response.imageContent:返回采集到的人脸图片数据,格式为NSData。如果用户中途退出或者超时,则图片数据为nil。客户上传图片到移动端时,不能对NSData进行任何压缩或者缩放,因为移动端会对图片做MD5校验,如果有压缩或者缩放,会导致MD5值不一致。将NSData转换成图的示例如下: - UIImage* newImage = [UIImage imageWithData:response.imageContentData];- response.reason和response.retMessageSub:返回原因或者认证文案。 
 
AppStore上架注意事项
AppStore上架时,请确保您的App已申请了如下权限,并在Info.plist中已添加相关说明,否则AppStore将上架失败:
- Camera权限,需在Info.plist中已添加NPrivacy - Camera Usage Description说明。 
- IDFA权限,需在Info.plist中已添加NSUserTrackingUsageDescription说明。说明文字可以结合您的业务情况进行描述,参考文案:“请放心,开启权限不会获取您在其他APP或网站的隐私信息,该权限仅用于标识设备并保障实名认证流程安全、提升服务使用体验。”。