標籤:ios 指紋識別 touch id
iOS 8的SDK開放了Touch ID的介面.從WWDC的視頻中可以看到Touch ID應用在兩個方面:用於Key Chain加密和用於授權.iOS 8正式版發布以後我們可以看到Evernote的iOS app已經整合了該功能.下面來看看如何?使用Touch ID進行身份認證. 其實很簡單,用於身份認證的所有的介面都在LocalAuthentication framework中, 該framework實際上只有三個標頭檔: LAContext.h LAError.h LAPublicDefines.h 而實際用到的函數也只有兩個: // 用來判斷裝置是否支援Touch ID - (BOOL)canEvaluatePolicy:(LAPolicy)policy error:(NSError * __autoreleasing *)error; // 真正驗證身份的函數 - (void)evaluatePolicy:(LAPolicy)policy localizedReason:(NSString *)localizedReason
reply:(void(^)(BOOL success, NSError *error))reply;
上述兩個函數都是LAContext的member function.目前LAPolicy只有一個值: LAPolicyDeviceOwnerAuthenticationWithBiometrics.
如果canEvaluatePolicy返回YES,表示裝置支援指紋識別,那麼便可以調用evaluatePolicy:函數進行指紋識別了.調用evaluatePolicy函數後會彈出一個alert,如:
該alert可定製的只有兩處: 1.”To access your photos”提示文字是由localizedReason參數指定的,用來向使用者說明使用Touch ID的目的. 2.”Enter Password”可由LAContext的localizedFallbackTitle屬性設定(LAContext目前只有這一個屬性),如果不設定的話,預設是”Enter Password”.值得注意的是,如果該屬性設定為@“”(Null 字元串),該按鈕會被隱藏,Evernote應該就是這麼做的. 其他的免談,當然更別提擷取使用者的指紋資料了. 理論上三種情況下會退出驗證(alert會被dismiss,reply回調會被調用): 1.使用者指紋通過驗證 2.使用者點擊”Enter Password”按鈕 3.使用者點擊”Cancel”按鈕 還有一種情況:使用者輸入了錯誤的指紋.這種情況下,該alert不會被dismiss,其標題會由”Touch ID”改為”Try Again”,有彈簧狀的動畫效果過渡.好了,代碼如下(不要忘了引入標頭檔 <LocalAuthentication/LocalAuthentication.h>): LAContext *context = [LAContext new];
NSError *error;
context.localizedFallbackTitle = @"";
if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) {
NSLog(@"Touch ID is available.");
[context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:NSLocalizedString(@"Use Touch ID to log in.", nil) reply:^(BOOL success, NSError *error) {
if (success) {
NSLog(@"Authenticated using Touch ID.");
} else { if (error.code == kLAErrorUserFallback) { NSLog(@"User tapped Enter Password");
} else if (error.code == kLAErrorUserCancel) {
NSLog(@"User tapped Cancel");
} else {
NSLog(@"Authenticated failed."); }
}];
} else {
NSLog(@"Touch ID is not available: %@", error);
}
iOS 8使用Touch ID進行使用者認證