#import "ViewController.h"
// iPhone5S開始, 6S第二代, 指紋識別驗證 YES/NO
// 授權驗證, 指紋識別框架
#import <LocalAuthentication/LocalAuthentication.h>
@interface ViewController ()
// 指紋識別
@property (strong, nonatomic) LAContext *context;
@end
@implementation ViewController
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
// 彈出指紋驗證
self.context = [[LAContext alloc] init];
// 判斷硬件是否支持
/**
LAPolicyDeviceOwnerAuthenticationWithBiometrics NS_ENUM_AVAILABLE(NA, 8_0) = kLAPolicyDeviceOwnerAuthenticationWithBiometrics, // 指紋識別, 5次失敗上鎖
LAPolicyDeviceOwnerAuthentication NS_ENUM_AVAILABLE(10_11, 9_0) = kLAPolicyDeviceOwnerAuthentication // 指紋識別, 6次失敗上鎖
*/
NSError *error;
// 判斷設備是否可以使用指紋識別
BOOL isAuthentication = [self.context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error];
if (isAuthentication == NO || error) {
NSLog(@"不能使用: %@", error);
return;
}
/**
請求進行指紋識別
localizedReason: 告訴用戶使用指紋識別的目的
*/
NSString *reason = @"使用指紋進行用戶登陸";
[self.context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:reason reply:^(BOOL success, NSError * _Nullable error) {
/**
// 指紋驗證失敗
LAErrorAuthenticationFailed = kLAErrorAuthenticationFailed,
// 用戶取消, 點擊了取消按鈕
LAErrorUserCancel = kLAErrorUserCancel,
// 用戶取消, 點出了輸入密碼
LAErrorUserFallback = kLAErrorUserFallback,
// 系統取消, (比如App進入後臺)
LAErrorSystemCancel = kLAErrorSystemCancel,
// 不能開始指紋驗證, 設備沒有設置密碼
LAErrorPasscodeNotSet = kLAErrorPasscodeNotSet,
// 不能開始指紋驗證, Touch ID 不能用
LAErrorTouchIDNotAvailable = kLAErrorTouchIDNotAvailable,
// 不能開始指紋驗證, Touch ID 沒有錄入指紋
LAErrorTouchIDNotEnrolled = kLAErrorTouchIDNotEnrolled,
// 指紋驗證失敗, 太多次的驗證失敗導致
// TouchID 鎖住了, 需要輸入密碼
LAErrorTouchIDLockout NS_ENUM_AVAILABLE(10_11, 9_0) = kLAErrorTouchIDLockout,
// App 取消了指紋驗證
LAErrorAppCancel NS_ENUM_AVAILABLE(10_11, 9_0) = kLAErrorAppCancel,
/// LAContext passed to this call has been previously invalidated.
LAErrorInvalidContext NS_ENUM_AVAILABLE(10_11, 9_0) = kLAErrorInvalidContext
*/
if (error) {
switch (error.code) {
case LAErrorAuthenticationFailed:
NSLog(@"指紋驗證失敗");
break;
case LAErrorUserCancel:
NSLog(@"用戶取消了指紋驗證");
break;
case LAErrorSystemCancel:
NSLog(@"系統取消了指紋驗證");
break;
default:
break;
}
}
// 結果回調
if (success) {
NSLog(@"驗證成功");
// 執行相關的功能代碼
}
}];
}
@end
實用知識:指紋識別功能的實現
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.