Touch Id是iPhone5S後加入的一項新的功能,也就是你們熟知的指紋識別技術。你們用得最多的多是手機的解屏操做,不用在和之前同樣輸入手機的四位數密碼進行驗證。一方面不用擔憂密碼被別人看到,另外一方面也方便了本身的操做。iOS8後蘋果開放了Touch Id的API給開發者,這也給咱們的app帶來了新的體驗。安全
Touch Id的API很是的簡單也好理解,在使用前咱們須要導入LocalAuthentication
這個庫。
app
首先來看下頭文件的定義:atom
//驗證設備是否支持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的驗證功能。當咱們點擊按鈕進行調用的時候,就會彈出驗證的對話框:
彈窗目前還不能自定義,都是統一的,第一行是app的名字+Touch Id, 第二行是須要用Touch Id的理由。在用戶進行操做後,咱們能夠在回調的block那邊處理本身的業務邏輯。lua
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回調那邊,咱們須要對每種錯誤進行處理,以便獲得更好的用戶體驗。code
從上面的代碼中咱們也能夠看到,Touch Id驗證中咱們並不能拿到標識,只有一個YES
or NO
的結果,只能用來代表當前用戶有權限使用這設備。正常狀況下,咱們的手機裏面的帳號信息都是本身的,因此在必定方面的確有加固安全,驗證和方便的功能。blog