最近正在開發的一個app需要加入指紋識別的功能,先搜索一下找到官方文檔,簡單易懂:
https://developer.apple.com/library/ios/documentation/LocalAuthentication/Reference/LocalAuthentication_Framework/index.html#classes
指紋識別主要的目的應該是判斷當前用戶是否機主,寫了個demo簡單體驗下:
1 首先需要引入指紋識別庫
2 引入庫
#import "LocalAuthentication/LAContext.h"
3 關鍵代碼
LAContext *myContext = [[LAContext alloc] init]; NSError *authError = nil; NSString *myLocalizedReasonString = @"We need to verify your fingerprint to confirm your identity"; // 判斷設備是否支持指紋識別 if ([myContext canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&authError]) { // 指紋識別只判斷當前用戶是否機主 [myContext evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:myLocalizedReasonString reply:^(BOOL success, NSError *error) { if (success) { // User authenticated successfully, take appropriate action NSLog(@"指紋認證成功"); returnCode = @"1"; } else { // User did not authenticate successfully, look at error and take appropriate action NSLog(@"指紋認證失敗,%@",error.description); // 錯誤碼 error.code // -1: 連續三次指紋識別錯誤 // -2: 在TouchID對話框中點擊了取消按鈕 // -3: 在TouchID對話框中點擊了輸入密碼按鈕 // -4: TouchID對話框被系統取消,例如按下Home或者電源鍵 // -8: 連續五次指紋識別錯誤,TouchID功能被鎖定,下一次需要輸入系統密碼 returnCode = [@(error.code) stringValue]; } }]; } else { // Could not evaluate policy; look at authError and present an appropriate message to user NSLog(@"TouchID設備不可用"); // TouchID沒有設置指紋 // 關閉密碼(系統如果沒有設置密碼TouchID無法啟用) }
4 搞定!
5 FAQ
指紋認證失敗之後TouchID對話框中會出現一個“輸入密碼”的按鈕,本來以為點擊了這個按鈕應該會彈出系統的輸入密碼界面,但是實際上並沒有,error.code的值是-3,之後便有很多疑問,比如“如果系統沒有設置密碼怎麼辦?”,“能不能把這個輸入密碼按鈕去掉或者改成取消按鈕”,“我為什麼需要TouchID,好像沒有什麼意義”。。
經過測試得到以下結論:
a. 系統如果沒有設置密碼,TouchID便無法啟用,開啟TouchID系統會強制讓你設置密碼
b. “輸入密碼”按鈕應該蘋果提供給我們整合自己業務認證機制的入口,比如支付寶,支付的時候你可以通過TouchID指紋識別,也可以通過輸入支付密碼來完成支付
c. 為什麼需要TouchID指紋識別功能?個人認為TouchID這個功能不應該參與到APP的業務考慮場景中,不管你的設備有沒有TouchID,app應該都有自己的一套認證機制,這樣你的業務在有沒有TouchID的設備中才都能說得通,Android平台道理也是一樣的。至於TouchID這個功能,應該是一個附加的便利性功能,有了,那會跟方便,用戶體驗會跟好,沒有的話也沒有什麼影響。