iOS 8 SDK向開發者公開了Touch ID指紋識別功能,允許App對用戶身份進行本地驗證。使用Touch ID非常簡單,只需要2步:
檢查Touch ID是否可用。
獲得指紋驗證結果。
注意:使用Touch ID需要引入LocalAuthentication框架
import LocalAuthentication
廢話不多說,直接上代碼:
/*創建了一個LAContext實例,用於執行認證策略 */
LAContext* context = [[LAContext alloc]init];
NSError* errorMessage = nil;
/*
然後在該對象上調用canEvaluatePolicy方法執行某個指定的認證策略 canEvaluatePolicy方法返回的是Bool值,表示指定的認證策略是否允許執行。當方法返回false時,可以通過error對象來獲取詳細的失敗原因。失敗的情況可能是設備本身不支持,例如舊版本的iPhone與iPad;運行在模擬器上;或者用戶未開啟Touch ID功能等
LAPolicy枚舉目前只有一個枚舉值.DeviceOwnerAuthenticationWithBiometrics,即使用指紋生物識別方式來認證設備機主。
*/
BOOL isAvailable = [context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&errorMessage];
if (isAvailable) {
NSLog(@"TouchID 可用 ");
//獲取驗證結果
/*
調用該方法將彈出系統調用Touch ID的對話框,其中的localizedReason參數用於在對話框中提示用戶詳細的理由和原因
reply參數是一個Block,其中的Bool類型參數success表示指紋驗證是否通過,當失敗時error參數包含了具體的失敗信息
*/
[context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"需要驗證你的指紋來確認您的身份信息" reply:^(BOOL success, NSError *error) {
dispatch_async(dispatch_get_main_queue(), ^{
if (success) {
NSLog(@"TouchID 驗證成功");
}else{
//點擊取消按鈕 code = -2
if(error.code == -2){
return;
}
//點擊輸入密碼按鈕 code = -3
if (error.code == -3){
/*可以在此處做輸入密碼的操作*/
return;
}
[self showAlert:[NSString stringWithFormat:@"TouchID 驗證失敗 error:%@",error]];
}
});
}];
}else{
[self showAlert:[NSString stringWithFormat:@"TouchID 不可用 error:%@",errorMessage]];
}
源碼地址:https://github.com/xingxianqing/TouchID-Demo
注: 指紋驗證失敗結果 其中的幾種
1. 連續三次指紋識別錯誤的運行結果:
抱歉,您未能通過Touch ID指紋驗證!
Error Domain=com.apple.LocalAuthentication Code=-1 "Aplication retry limit exceeded." UserInfo=0x1740797c0 {NSLocalizedDescription=Aplication retry limit exceeded.}
2. Touch ID功能被鎖定,下一次需要輸入系統密碼時的運行結果:
抱歉,您未能通過Touch ID指紋驗證!
Error Domain=com.apple.LocalAuthentication Code=-1 "Biometry is locked out." UserInfo=0x17407dc00 {NSLocalizedDescription=Biometry is locked out.}
3. 用戶在Touch ID對話框中點擊了取消按鈕:
抱歉,您未能通過Touch ID指紋驗證!
Error Domain=com.apple.LocalAuthentication Code=-2 "Canceled by user." UserInfo=0x17006c780 {NSLocalizedDescription=Canceled by user.}
4. 在Touch ID對話框顯示過程中,背系統取消,例如按下電源鍵:
抱歉,您未能通過Touch ID指紋驗證!
Error Domain=com.apple.LocalAuthentication Code=-4 "UI canceled by system." UserInfo=0x170065900 {NSLocalizedDescription=UI canceled by system.}
5. 用戶在Touch ID對話框中點擊輸入密碼按鈕:
抱歉,您未能通過Touch ID指紋驗證!
Error Domain=com.apple.LocalAuthentication Code=-3 "Fallback authentication mechanism selected." UserInfo=0x17407e040 {NSLocalizedDescription=Fallback authentication mechanism selected.}