1. info.plist中添加权限申请
<key>NSFaceIDUsageDescription</key>
<string>APP would like to use Face ID</string>
<key>NSBiometricUsageDescription</key>
<string>APP would like to use Touch ID</string>
2. 添加库
Build Phases
→ Link Binary With Libraries
→ LocalAuthentication.framework
3. 实现代码
#import <LocalAuthentication/LocalAuthentication.h>
// 检查是否支持认证
-(BOOL) isSupportBiometricCheck {
LAContext *context = [[LAContext alloc] init];
NSError *error = nil;
// 检查设备是否支持生物识别认证
if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthentication error:&error]) {
return true;
} else {
return false;
}
}
// 认证
// title:标题 eg.生物识别登录
// subTitle:副标题 eg.使用生物识别凭证登录
// negativeText:取消文本 eg.取消
- (void)biometricCheck:(CallSN)cbSn title:(NSString *)title
subTitle:(NSString *)subTitle
negativeButton:(NSString *)negativeText {
LAContext *context = [[LAContext alloc] init];
NSString *localizedReason = [NSString stringWithFormat:@"%@\\n%@", title, subTitle];
[context evaluatePolicy:LAPolicyDeviceOwnerAuthentication
localizedReason:localizedReason
reply:^(BOOL success, NSError * _Nullable error) {
dispatch_async(dispatch_get_main_queue(), ^{
if (success) {
NSLog(@"认证成功");
} else {
NSLog(@"认证失败,原因:%@", error.description);
}
});
}];
}
目前来看
LAPolicyDeviceOwnerAuthentication
优于LAPolicyDeviceOwnerAuthenticationWithBiometrics
,因为LAPolicyDeviceOwnerAuthenticationWithBiometrics
在验证失败时,需要重新输入一次锁屏密码或者调用LAPolicyDeviceOwnerAuthentication
输入密码才可以再次被正常调用。否则直接返回生物特征已锁定,而引起认证失败。