iOS指纹识别比较简单,主要由LAContontext类中的两种方法完成:
1. - (BOOL)canEvaluatePolicy:(LAPolicy)policy error:(NSError * autoreleasing *)error __attribute((swift_error(none))) 检测设备是否支持指纹识别;
2. - (void)evaluatePolicy:(LAPolicy)policy
localizedReason:(NSString *)localizedReason
reply:(void(^)(BOOL success, NSError * __nullable error))reply 识别指纹
代码:
LAContext *context = [LAContext new];
context.localizedCancelTitle = @"取消";
context.localizedFallbackTitle = @"密码登录";
NSError *error = nil;
BOOL supportFingerPrint = [context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error];
if (!supportFingerPrint) {
NSLog(@"不支持指纹解锁:%@",error.localizedDescription);
switch (error.code) {
case LAErrorTouchIDNotEnrolled:
NSLog(@"TouchID Not Enrolled");
break;
case LAErrorPasscodeNotSet:
NSLog(@"Password Not Set");
break;
default:
NSLog(@"TouchID Not Available");
break;
}
} else {
NSLog(@"支持指纹解锁");
[context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"指纹解锁" reply:^(BOOL success, NSError * _Nullable error) {
if(success) {
NSLog(@"指纹解锁成功");
} else {
switch (error.code) {
case LAErrorAuthenticationFailed: {
NSLog(@"Authentication Failed");
}
break;
case LAErrorUserCancel: {
NSLog(@"User Canceled");
}
break;
case LAErrorUserFallback: {
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
NSLog(@"User Fallback");
}];
}
break;
case LAErrorSystemCancel: {
NSLog(@"System Cancel");
}
break;
case LAErrorPasscodeNotSet: {
NSLog(@"Password Not Set");
}
break;
case LAErrorTouchIDNotAvailable: {
NSLog(@"TouchID Not Available");
}
break;
case LAErrorTouchIDNotEnrolled: {
NSLog(@"TouchID Not Enrolled");
}
default: {
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
NSLog(@"Other Targat ");
}];
}
break;
}
}
}];
}