最近正在開發的一個app需要加入指紋識別的功能,先搜索一下找到官方文檔,簡單易懂:
指紋識別主要的目的應該是判斷當前用戶是否機主,寫了個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這個功能,應該是一個附加的便利性功能,有了,那會跟方便,用戶體驗會跟好,沒有的話也沒有什么影響。
