iOS客戶端接入教程
人臉核身提供iOS客戶端SDK,幫助您在App中實(shí)現(xiàn)刷臉認(rèn)證功能。您可通過(guò)核身認(rèn)證移動(dòng)端請(qǐng)求接口獲取實(shí)人認(rèn)證唯一標(biāo)識(shí)VerificationToken,并使用VerificationToken喚起人臉核身客戶端SDK。本文將結(jié)合示例代碼進(jìn)行詳細(xì)的說(shuō)明介紹。
阿里云視覺(jué)智能開(kāi)放平臺(tái)各類目視覺(jué)AI能力API接入、接口使用或問(wèn)題咨詢等,請(qǐng)通過(guò)釘釘群(23109592)加入阿里云視覺(jué)智能開(kāi)放平臺(tái)咨詢?nèi)郝?lián)系我們。
前提條件
應(yīng)用必須在iOS 9.0+真機(jī)平臺(tái)上運(yùn)行。
您必須采用Objective C++集成人臉核身服務(wù)。
獲取SDK和Demo代碼
模擬器使用存在安全風(fēng)險(xiǎn),暫不支持在模擬器上運(yùn)行。
開(kāi)發(fā)環(huán)境配置
在info.plist中配置攝像頭權(quán)限請(qǐng)求。
在Xcode的編譯設(shè)置中關(guān)閉Bitcode選項(xiàng)。
在Xcode編譯設(shè)置的Linking > Other Linker Flags中,添加設(shè)置-ObjC。
拷貝資源文件
選擇TARGETS,選擇Build Phases標(biāo)簽頁(yè),在Copy Bundle Resources中添加如下四個(gè)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包和額外系統(tǒng)庫(kù)依賴。具體如下:
SDK中的包
APBToygerFacade APPSecuritySDK BioAuthEngine DTFIdentityManager DTFMobileRPC DTFUtility OCRDetectSDKForTech ToygerNative ToygerService ZolozFaceAuthFacade
系統(tǒng)庫(kù)依賴
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
調(diào)用SDK
引入頭文件。
#import <ZolozFaceAuthFacade/ZolozFaceAuthFacade.h>
初始化SDK。
初始化SDK的代碼為:
[ZolozFaceAuthFacade init];
增加初始化接口的目的在于提高身份核驗(yàn)的用戶體驗(yàn),為刷臉認(rèn)證準(zhǔn)備一些必備數(shù)據(jù)。初始化接口是異步執(zhí)行,不會(huì)影響主線程UI渲染,建議接入方將初始化接口放在appdelegate的如下函數(shù)中調(diào)用:
-(BOOL)application:(UIApplication)application didFinishLaunchingWithOptions:(NSDictionary)launchOptions
獲取metainfo數(shù)據(jù)。
[ZolozFaceAuthFacade getMetaInfo];
返回值為NSDictionary,接入方移動(dòng)端需要將其轉(zhuǎn)換為JSON字符串,調(diào)用移動(dòng)端的核身認(rèn)證移動(dòng)端請(qǐng)求接口時(shí)在請(qǐng)求參數(shù)MetaInfo中傳入該值。
開(kāi)始認(rèn)證。
調(diào)用SDK
[ZolozFaceAuthFacade verifyWith:self.verificationToken extParams:extParams onCompletion:^(ZIMResponse *response) {}];
參數(shù)說(shuō)明
verificationToken:NSString類型,通過(guò)調(diào)用移動(dòng)端的核身認(rèn)證移動(dòng)端請(qǐng)求接口獲取VerificationToken的對(duì)應(yīng)值。
說(shuō)明調(diào)用核身認(rèn)證移動(dòng)端請(qǐng)求接口返回的verificationToken有效期時(shí)間為30分鐘,從verificationToken生成時(shí)間開(kāi)始算起,超過(guò)有效期再進(jìn)行人臉認(rèn)證會(huì)報(bào)錯(cuò),請(qǐng)?jiān)谟行跁r(shí)間內(nèi)完成認(rèn)證。
extParams:NSDictionary類型。必須傳入當(dāng)前viewController,用于展現(xiàn)等待圖標(biāo)和presentViewController。
[extParams setValue:self forKey:@"currentCtr"];
(非必須,默認(rèn)不返回)返回視頻:在extParams里面添加returnVideo,設(shè)置值為true,視頻存儲(chǔ)的路徑:verifyWith接口返回的參數(shù)里,ZIMResponse類型參數(shù)的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 = @"系統(tǒng)錯(cuò)誤"; break; case 1003: title = @"用戶退出"; break; case 2002: title = @"網(wǎng)絡(luò)錯(cuò)誤"; break; case 2006: title = @"刷臉失敗"; break; case 2003: title = @"設(shè)備時(shí)間不準(zhǔn)確"; break; default: break; } }); }];
返回結(jié)果espons.code有以下六種返回值,類型為整型。
HttpCode
錯(cuò)誤碼
描述
1000
ZIMResponseSuccess
表示刷臉成功,該結(jié)果僅供參考,可通過(guò)移動(dòng)端核身認(rèn)證移動(dòng)端查詢獲取最終認(rèn)證結(jié)果。
1001
ZIMInternalError
表示系統(tǒng)錯(cuò)誤。
1003
ZIMInterrupt
表示驗(yàn)證中斷。
2002
ZIMNetworkfail
表示網(wǎng)絡(luò)錯(cuò)誤。
2003
ZIMTIMEError
表示設(shè)備時(shí)間設(shè)置不對(duì)。
2006
ZIMResponseFail
表示刷臉失敗,如需獲取更詳細(xì)的失敗原因,可通過(guò)移動(dòng)端核身認(rèn)證移動(dòng)端查詢獲取最終認(rèn)證結(jié)果。
了解更多信息,請(qǐng)參見(jiàn)iOS客戶端錯(cuò)誤碼詳情。
[ZolozFaceAuthFacade verifyWith:self.verificationToken extParams:extParams onCompletion:^(ZIMResponse *response) {}];
response.imageContent:返回采集到的人臉圖片數(shù)據(jù),格式為NSData。如果用戶中途退出或者超時(shí),則圖片數(shù)據(jù)為nil。客戶上傳圖片到移動(dòng)端時(shí),不能對(duì)NSData進(jìn)行任何壓縮或者縮放,因?yàn)橐苿?dòng)端會(huì)對(duì)圖片做MD5校驗(yàn),如果有壓縮或者縮放,會(huì)導(dǎo)致MD5值不一致。將NSData轉(zhuǎn)換成圖的示例如下:
UIImage* newImage = [UIImage imageWithData:response.imageContentData];
response.reason和response.retMessageSub:返回原因或者認(rèn)證文案。
AppStore上架注意事項(xiàng)
AppStore上架時(shí),請(qǐng)確保您的App已申請(qǐng)了如下權(quán)限,并在Info.plist中已添加相關(guān)說(shuō)明,否則AppStore將上架失敗:
Camera權(quán)限,需在Info.plist中已添加NPrivacy - Camera Usage Description說(shuō)明。
IDFA權(quán)限,需在Info.plist中已添加NSUserTrackingUsageDescription說(shuō)明。說(shuō)明文字可以結(jié)合您的業(yè)務(wù)情況進(jìn)行描述,參考文案:“請(qǐng)放心,開(kāi)啟權(quán)限不會(huì)獲取您在其他APP或網(wǎng)站的隱私信息,該權(quán)限僅用于標(biāo)識(shí)設(shè)備并保障實(shí)名認(rèn)證流程安全、提升服務(wù)使用體驗(yàn)。”。