iOS指纹识别(TouchID)

作者: HuyaRC | 来源:发表于2016-11-09 16:05 被阅读115次

分享是每个优秀的程序员所必备的品质


越来越多的设备开始支持指纹识别,因为它更安全,更简单,这一定是个趋势。废话少说直接上代码。
场景: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
个人浅见,有错误的地方欢迎指正

相关文章

网友评论

    本文标题:iOS指纹识别(TouchID)

    本文链接:https://www.haomeiwen.com/subject/qyftpttx.html