分享是每个优秀的程序员所必备的品质
越来越多的设备开始支持指纹识别,因为它更安全,更简单,这一定是个趋势。废话少说直接上代码。
场景:sb拖按钮,背景红色,点击按钮开始识别
点击按钮开始识别.png
- 导入 <LocalAuthentication/LocalAuthentication.h>
- 指纹识别:SDK在iOS8以后,iPhone设备iPhone5S以上
#import "ViewController.h"
#import <LocalAuthentication/LocalAuthentication.h>
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIButton *button;
@end
@implementation ViewController
/*
指纹识别:SDK在iOS8以后,iPhone设备iPhone5S以上
*/
- (IBAction)buttonClick:(id)sender {
// 1. 判断iOS8.0以后
if([UIDevice currentDevice].systemVersion.floatValue >= 8.0){
// 2.创建本地验证上下文
LAContext *content = [LAContext new];
// 3. 判断指纹识别是否可用
/*
只使用指纹验证
LAPolicyDeviceOwnerAuthenticationWithBiometrics
// 使用指纹和设备密码验证(ios9以后)
LAPolicyDeviceOwnerAuthentication
*/
if([content canEvaluatePolicy:
LAPolicyDeviceOwnerAuthenticationWithBiometrics error:nil]){
NSLog(@"可以使用");
// 4. 调用指纹识别器
//localizedReason : 显示在界面上的原因, 用于提示用户
[content evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"请将您的手指放在Home键上开始验证" reply:^(BOOL success, NSError * _Nullable error) {
// 5. 验证成功
if(success){
[self alertWithTitle:@"验证通过" message:nil];
}
// 5.1 验证失败可以根据 error.code提示用户,也可以根据error.userInfo返回的具体信息提示用户
NSString *errorStr = error.userInfo[NSLocalizedDescriptionKey];
/*
错误码 error.code
-1: 连续三次指纹识别错误
-2: 在TouchID对话框中点击了取消按钮
-3: 在TouchID对话框中点击了输入密码按钮
-4: TouchID对话框被系统取消,例如按下Home或者电源键或激活了其他应用程序
-5: 验证无法启动,因为设备上没有设置密码
-6: 验证无法启动,因为设备上没有 Touch ID
-7: 验证无法启动,因为没有输入指纹
-8: 连续五次指纹识别错误,TouchID功能被锁定,下一次需要输入系统密码
*/
if ([errorStr containsString:@"Canceled by user"]) {
[self alertWithTitle:@"取消验证" message:nil];
}
if ([errorStr containsString:@"Application retry limit exceeded"]) {
[self alertWithTitle:@"超过3次失败" message:@"还有2次机会"];
}
if ([errorStr containsString:@"Biometry is locked out"]) {
[self alertWithTitle:@"5次验证全部失败" message:@"生物识别技术关闭, 请输入系统密码解密"];
}
}];
}else{
// 没有开启Touch ID
[self alertWithTitle:@"请先打开密码, 并设置Touch ID" message:nil];
}
} else{
[self alertWithTitle:@"iOS7以下无法使用此功能" message:@"请升级当前系统"];
}
}
- (void)alertWithTitle:(NSString *)title message:(NSString *)message
{
// 更新 UI 时, 一定要注意, 在主线程更新
dispatch_async(dispatch_get_main_queue(), ^{
UIAlertController *alertC = [UIAlertController alertControllerWithTitle:title message:message preferredStyle:(UIAlertControllerStyleAlert)];
UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"确定" style:(UIAlertActionStyleCancel) handler:nil];
[alertC addAction:cancel];
[self presentViewController:alertC animated:YES completion:nil];
if ([title isEqualToString:@"验证通过"]) {
[self.button setTitle:title forState:(UIControlStateNormal)];
self.button.backgroundColor = [UIColor greenColor];
}
});
}
@end
识别成功结果:
识别成功.png
网友评论