金融級NFC認證提供了iOS端的SDK,可以幫助您在應用(App)中快速實現NFC認證功能。本文將結合示例代碼介紹SDK接入的詳細流程。?
前提條件
系統版本:iOS 13.0 及以上
支持語言:Objective-C、Swift
SDK 不支持模擬器調試。
配置開發環境
在Xcode的編譯設置中,關閉Enable Bitcode選項。
重要Xcode 15 開始 ENABLE_BITCODE 將不再生效,詳見:Xcode Release Notes。
在Xcode編譯設置中,選擇Linking > Other Linker Flags,添加-ObjC。
應用權限配置。
登錄蘋果開發者證書管理后臺,在左側導航菜單選中Identifiers,隨后在右側列表中找到對應的bundle ID,進入配置詳情后確認NFC Tag Reading已經正確啟用。
在項目工程的info.plist文件中:
添加Privacy - NFC Scan Usage Description權限和說明;
添加ISO7816 application identifiers for NFC Tag Reader Session配置,在item0和item1中分別填寫
A0000002471001
(旅行證件)、F049442E43484E
(身份證)。
在Xcode中,選擇TARGETS > Signing&Capabilities > All,添加Near Field Communication Tag Reading。
配置依賴
下載iOS SDK。該SDK為framework包。
解壓下載的SDK包,并在解壓的文件夾中執行以下命令,以提取所有的framework到Products目錄。
# 提取所有.tgz和.tar格式的壓縮文件。 for i in $(ls *.tgz *.tar);do tar xvf $i;done
解壓后iOS SDK中的包如下所示:
AliyunFaceAuthFacade.framework DTFUtility.framework DTFNFCIdentityManager.framework
在Build Phases > Link Binary With Libraries中,添加SDK解壓后的包和以下系統庫依賴。
libc++.tbd CoreNFC.framework
拷貝資源文件
在Xcode中,選擇TARGETS,單擊Build Phases頁簽,在Copy Bundle Resources中添加DTFNFCIdentityManager.bundle。
該Bundle位于DTFNFCIdentityManager.framework中。
調用SDK
引入頭文件。
命令如下:
#import <AliyunFaceAuthFacade/AliyunFaceAuthFacade.h>
初始化SDK。
說明為了提升用戶體驗并為NFC認證準備一些必備的數據,iOS客戶端需要初始化SDK。
您可以在
appDelegate
方法中調用初始化SDK的代碼(如下代碼塊所示)。在appDelegate方法中初始化SDK,示例代碼:
- (BOOL)application:(UIApplication)application didFinishLaunchingWithOptions:(NSDictionary)launchOptions { [AliyunFaceAuthFacade initSDK]; // 初始化SDK。 }
IPv6網絡初始化,示例代碼如下:
[AliyunFaceAuthFacade init]; // 初始化SDK,如果已經在appDelegate函數中調用過,此處無需再重復調用。 [AliyunFaceAuthFacade getNFCMetaInfo];
獲取metaInfo數據,示例代碼如下:
[AliyunFaceAuthFacade initSDK]; // 初始化SDK,如果已經在appDelegate函數中調用過,此處無需再重復調用。 [AliyunFaceAuthFacade getNFCMetaInfo]; // 獲取NFCMetainfo,調用前請務必先初始化SDK。
說明getNFCMetaInfo返回值類型是NSDictionary,在調用服務端的發起認證請求接口時,您需要先將其轉為JSON格式。
關于發起認證請求的具體操作,請參見InitFaceVerify-發起NFC認證請求。
調用SDK開始認證。
示例代碼如下:
// NFC認證接口 [AliyunFaceAuthFacade nfcVerifyWith:certifyId extParams:extParams onCompletion:^(ZIMResponse *response) {}];
名稱
類型
描述
certifyId
NSString
您可以通過服務端發起申請請求接口獲取該參數。關于發起認證請求的具體操作,請參見InitFaceVerify-發起NFC認證請求。
extParams
NSDictionary
通過以下代碼傳入當前viewController,用于展現網絡加載和presentViewController。
[extParams setValue:self forKey:@"currentCtr"];
重要請注意在extParams中務必傳入當前控制器,否則會導致 SDK 頁面無法正常展示。
返回結果說明:
response.code包含以下返回參數,具體說明如下表所示。
錯誤碼
錯誤碼文案
錯誤碼描述
1000(ZIMResponseSuccess)
驗證成功
表示驗證成功。
說明該結果僅供參考。可通過調用服務端DescribeFaceVerify-查詢NFC認證結果接口獲取最終認證結果。
1001(ZIMInternalError)
系統錯誤
表示系統錯誤。
1003(ZIMInterrupt)
驗證中斷
表示驗證中斷。
2002(ZIMNetworkfail)
網絡錯誤
表示網絡錯誤。
2003(ZIMTIMEError)
客戶端設備時間錯誤
表示客戶端設備時間錯誤。
2006(ZIMResponseFail)
驗證失敗
表示驗證失敗。
說明如需獲取認證不通過的詳情,需通過調用服務端DescribeFaceVerify-查詢NFC認證結果接口。
說明關于錯誤碼的更多信息,請參見金融級NFC認證iOS客戶端錯誤碼。
代碼示例:
[AliyunFaceAuthFacade nfcVerifyWith: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代碼包進行體驗:
Demo體驗前,請將其中的SDK版本更新至最新。?
升級注意事項
如果您在使用金融級NFC認證之前接入過金融級實人認證方案,您只需要將金融級實人認證方案升級到最新版本。
升級后復用金融級實人認證方案中的AliyunFaceAuthFacade.framework和DTFUtility.framework即可。