Touch ID
Touch ID是iPhone5S後加入的一項新的功能,也就是大家熟知的指紋識別技術。大家用得最多的可能是手機的解屏操作,不用在和以前一樣輸入手機的四位數密碼進行驗證。一方面不用擔心密碼被別人看到,另一方面也方便了自己的操作。iOS8後蘋果開放了Touch ID的API給開發者,這也給我們的app帶來了新的體驗。
使用
Touch ID的API非常的簡單也好理解,在使用前我們需要導入LocalAuthentication
這個庫。
1.png
首先來看下頭文件的定義:
//驗證設備是否支持Touch ID - (BOOL)canEvaluatePolicy:(LAPolicy)policy error:(NSError * __autoreleasing *)error; //進行驗證的回調 - (void)evaluatePolicy:(LAPolicy)policy localizedReason:(NSString *)localizedReason reply:(void(^)(BOOL success, NSError *error))reply; //取消Touch Id驗證的按鈕的標題,默認標題是輸入密碼 @property (nonatomic, copy) NSString *localizedFallbackTitle;
代碼使用示例
LAContext *laContext = [[LAContext alloc] init]; NSError *error; if ([laContext canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) { [laContext evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"Touch Id Test" reply:^(BOOL success, NSError *error) { if (success) { NSLog(@"success to evaluate"); //do your work } if (error) { NSLog(@"---failed to evaluate---error: %@---", error.description); //do your error handle } }]; } else { NSLog(@"==========Not support :%@", error.description); //do your error handle }
這樣我們就完成了一個Touch ID的驗證功能。當我們點擊按鈕進行調用的時候,就會彈出驗證的對話框:
2.png
彈窗目前還不能自定義,都是統一的,第一行是app的名字+Touch ID, 第二行是需要用Touch ID的理由。在用戶進行操作後,我們可以在回調的block那邊處理自己的業務邏輯。
錯誤處理
typedef NS_ENUM(NSInteger, LAError) { //用戶驗證沒有通過,比如提供了錯誤的手指的指紋 LAErrorAuthenticationFailed = kLAErrorAuthenticationFailed, // 用戶取消了Touch ID驗證 LAErrorUserCancel = kLAErrorUserCancel, //用戶不想進行Touch ID驗證,想進行輸入密碼操作 LAErrorUserFallback = kLAErrorUserFallback, // 系統終止了驗證 LAErrorSystemCancel = kLAErrorSystemCancel, // 用戶沒有在設備Settings中設定密碼 LAErrorPasscodeNotSet = kLAErrorPasscodeNotSet, // 設備不支持Touch ID LAErrorTouchIDNotAvailable = kLAErrorTouchIDNotAvailable, // 設備沒有進行Touch ID 指紋註冊 LAErrorTouchIDNotEnrolled = kLAErrorTouchIDNotEnrolled, } NS_ENUM_AVAILABLE(10_10, 8_0);
在block回調那邊,我們需要對每種錯誤進行處理,以便得到更好的用戶體驗。
總結
從上面的代碼中我們也可以看到,Touch ID驗證中我們並不能拿到標識,只有一個YES
or NO
的結果,只能用來表明當前用戶有權限使用這設備。正常情況下,我們的手機裏面的賬號信息都是自己的,所以在一定方面的確有加固安全,驗證和方便的功能。