在iOS8中,開發者們可使用向第三方應用開放了Touch ID權限的API,以便他們在應用中使用指紋認證來完成用戶認證部分。
本文主要介紹如何在應用中集成Touch ID來校驗用戶的身份。
#import <LocalAuthentication/LocalAuthentication.h>這個庫必須要Xcode6並且連接的是真機,才不會提示找不到的錯誤。 如果是模擬器會提示找不到這個庫。
- (IBAction)authenticateButtonTapped:(id)sender {
LAContext *context = [[LAContext alloc] init];
context.localizedFallbackTitle = @"輸入密碼";
NSError *error = nil;
if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) {
[context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics
localizedReason:@"您是這設備的所有者嗎?"
reply:^(BOOL success, NSError *error) {
if (success) {
dispatch_async (dispatch_get_main_queue(), ^{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Success"
message:@"你是設備主人。"
delegate:nil
cancelButtonTitle:@"Ok"
otherButtonTitles:nil];
[alert show];
});
}else{
/*
// 用戶未提供有效證書,(3次機會失敗 --身份驗證失敗)。
LAErrorAuthenticationFailed = kLAErrorAuthenticationFailed,
// 認證被取消,(用戶點擊取消按鈕)。
LAErrorUserCancel = kLAErrorUserCancel,
// 認證被取消,用戶點擊回退按鈕(輸入密碼)。
LAErrorUserFallback = kLAErrorUserFallback,
// 身份驗證被系統取消,(比如另一個應用程序去前台)。
LAErrorSystemCancel = kLAErrorSystemCancel,
// 身份驗證無法啟動,因為密碼在設備上沒有設置。
LAErrorPasscodeNotSet = kLAErrorPasscodeNotSet,
// 身份驗證無法啟動,因為觸摸ID在設備上不可用。
LAErrorTouchIDNotAvailable = kLAErrorTouchIDNotAvailable,
// 身份驗證無法啟動,因為沒有登記的手指觸摸ID。 沒有設置指紋密碼時。
LAErrorTouchIDNotEnrolled = kLAErrorTouchIDNotEnrolled,
**/
switch (error.code) {
case LAErrorAuthenticationFailed:
NSLog(@"身份驗證失敗。");
break;
case LAErrorUserCancel:
NSLog(@"用戶點擊取消按鈕。");
break;
case LAErrorUserFallback:
NSLog(@"用戶點擊輸入密碼。");
break;
case LAErrorSystemCancel:
NSLog(@"另一個應用程序去前台");
break;
case LAErrorPasscodeNotSet:
NSLog(@"密碼在設備上沒有設置");
break;
case LAErrorTouchIDNotAvailable:
NSLog(@"觸摸ID在設備上不可用");
break;
case LAErrorTouchIDNotEnrolled:
NSLog(@"沒有登記的手指觸摸ID。");
break;
default:
NSLog(@"Touch ID沒配置");
break;
}
}
}];
} else {
dispatch_async (dispatch_get_main_queue(), ^{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"錯誤提示"
message:@"您的設備沒有觸摸ID."
delegate:nil
cancelButtonTitle:@"Ok"
otherButtonTitles:nil];
[alert show];
});
}
}
其中:
(1)localizedFallbackTitle:用於設置左邊的按鈕的名稱,默認是輸入密碼。
(2)localizedReason:用於設置提示語,表示為什麼要使用Touch ID,如代碼中@"您是這設備的所有者嗎?"。
官方的API就是簡單,簡簡單單幾句話 就可以。