1.引入LocalAuthentication.framework库,并导入头文件
#import <LocalAuthentication/LocalAuthentication.h>
2.判断设备是否支持Touch ID
LAContext *context = [[LAContext alloc] init];
/*
* LAPolicyDeviceOwnerAuthenticationWithBiometrics(指纹验证)
* LAPolicyDeviceOwnerAuthentication(密码验证)
*/
NSError *error;
// 判断是否支持指纹验证
BOOL can = [context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error];
if (can) {// 支持
NSLog(@"支持TouchID");
[context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"指纹验证" reply:^(BOOL success, NSError * _Nullable error) {
if (success) {// 验证成功
NSLog(@"TouchID验证成功");
}
if (error) {
NSLog(@"error==%@, %ld", error.localizedDescription, error.code);
}
}];
} else {// 不支持
NSLog(@"不支持%@", error);
}
3.设备支持Touch ID验证失败处理
[context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"指纹验证" reply:^(BOOL success, NSError * _Nullable error) {
if (success) {// 验证成功
NSLog(@"TouchID验证成功");
}
if (error) {
NSLog(@"error==%@, %ld", error.localizedDescription, error.code);
switch (error.code) {
case LAErrorSystemCancel:
NSLog(@"身份验证被系统取消(验证时当前APP被移至后台或者点击了home键导致验证退出时提示)");
break;
case LAErrorUserCancel:
NSLog(@"身份验证被用户取消(当用户点击取消按钮时提示)");
break;
case LAErrorAuthenticationFailed:
NSLog(@"身份验证没有成功,因为用户未能提供有效的凭据(连续3次验证失败时提示)");
break;
case LAErrorPasscodeNotSet:
NSLog(@"Touch ID无法启动,因为没有设置密码(当系统没有设置密码的时候,Touch ID也将不会开启)");
break;
case LAErrorTouchIDNotAvailable:
NSLog(@"无法启动身份验证"); // 这个没有检测到,应该是出现硬件损坏才会出现
break;
case LAErrorTouchIDNotEnrolled:
NSLog(@"无法启动身份验证,因为触摸标识没有注册的手指"); // 这个暂时没检测到
break;
case LAErrorUserFallback:
{
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
NSLog(@"用户选择输入密码,切换主线程处理");
}];
break;
}
default:
{
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
NSLog(@"其他情况,切换主线程处理"); // 5次失败进入,如果继续验证,则需要输入密码解锁
}];
break;
}
}
}
}];
4.设备不支持
NSLog(@"不支持%@", error);
NSLog(@"不支持指纹识别");
switch (error.code) {
case LAErrorTouchIDNotEnrolled:
NSLog(@"设备Touch ID不可用");
break;
case LAErrorPasscodeNotSet:
NSLog(@"系统未设置密码");
break;
default:
NSLog(@"TouchID不可用或已损坏");
break;
}
NSLog(@"%@", error.localizedDescription);