美文网首页
iOS 面容解锁 LocalAuthentication

iOS 面容解锁 LocalAuthentication

作者: FlowYourHeart | 来源:发表于2023-09-12 10:42 被阅读0次
    先在info.plist中添加权限申请描述

    key: Privacy - Face ID Usage Description

    //
    //  ViewController.m
    //  faceDemo
    //
    //  Created by paul on 2023/9/13.
    //
    
    #import "ViewController.h"
    #import <LocalAuthentication/LocalAuthentication.h>
    
    @interface ViewController ()
    @property (nonatomic, strong) UIView *faceAuthView;
    @end
    
    @implementation ViewController
    
    //解锁前view
    - (UIView *)faceAuthView {
        if(!_faceAuthView){
            UIView *authView = [[UIView alloc] initWithFrame:self.view.bounds];
            authView.backgroundColor = UIColor.whiteColor;
            UIButton *giveAuthBtn = [[UIButton alloc] init];
            giveAuthBtn.frame = CGRectMake(0, 0, 350, 50);
            [giveAuthBtn setTitle:@"点击进行面容id解锁" forState:UIControlStateNormal];
            [giveAuthBtn setTitleColor:UIColor.blackColor forState:UIControlStateNormal];
            giveAuthBtn.backgroundColor = UIColor.clearColor;
            [giveAuthBtn addTarget:self action:@selector(giveFaceAuth) forControlEvents:UIControlEventTouchUpInside];
            giveAuthBtn.center = authView.center;
            [authView addSubview:giveAuthBtn];
            _faceAuthView = authView;
        }
        return _faceAuthView;
    }
    
    - (void)viewWillAppear:(BOOL)animated {
        [super viewWillAppear:animated];
        [self.view addSubview:self.faceAuthView];
        
    }
    - (void)viewDidLoad {
        [super viewDidLoad];
        self.view.backgroundColor = UIColor.yellowColor;
    }
    
    
    
    //用户点击face解锁
    - (void) giveFaceAuth {
        
        if ([self isFaceIDAvailable]) {
            LAContext *context = [[LAContext alloc] init];
            NSError *error = nil;
            NSString *reasonString = @"请验证您的面容以解锁应用";
            
            if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) {
                [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics
                        localizedReason:reasonString
                                  reply:^(BOOL success, NSError *error) {
                    if (success) {
                        // 用户已通过面容验证
                        dispatch_async(dispatch_get_main_queue(), ^{
                            // 在主线程中执行需要进行面容解锁后的操作
                            [self.faceAuthView removeFromSuperview];
                        });
                    } else {
                        // 用户未通过面容验证或取消了验证
                        NSLog(@"Face ID 验证失败: %@", error.localizedDescription);
                    }
                }];
            } else {
                // 无法使用面容识别功能
                NSLog(@"Face ID 不可用: %@", error.localizedDescription);
            }
        }
    
    }
    
    #pragma mark - 是否支持面容
    - (BOOL)isFaceIDAvailable {
        LAContext *context = [[LAContext alloc] init];
        NSError *error = nil;
        BOOL isFaceIDAvailable = [context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error];
        
        if (isFaceIDAvailable) {
            // 设备支持面容识别
            return YES;
        } else {
            // 设备不支持面容识别或配置错误
            NSLog(@"Face ID 不可用: %@", error.localizedDescription);
            return NO;
        }
    }
    
    /**
     * 在 iOS 11 及以上版本,可以通过 context.biometryType 来获取具体的生物识别类型,分为 LABiometryTypeFaceID(面容识别)
     * 和 LABiometryTypeTouchID(指纹识别)。而在 iOS 11 以下的版本,只支持指纹识别。
     */
    - (NSString *)biometricType {
        LAContext *context = [[LAContext alloc] init];
        NSError *error = nil;
        
        if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) {
            if (@available(iOS 11.0, *)) {
                if (context.biometryType == LABiometryTypeFaceID) {
                    // 设备支持面容识别
                    return @"Face ID";
                } else if (context.biometryType == LABiometryTypeTouchID) {
                    // 设备支持指纹识别
                    return @"Touch ID";
                }
            } else {
                // iOS 11 以下的版本只支持指纹识别
                return @"Touch ID";
            }
        }
        
        // 设备不支持生物识别或配置错误
        NSLog(@"生物识别不可用: %@", error.localizedDescription);
        return nil;
    }
    @end
    
    

    不想动手可以找轮子 别人轮github

    相关文章

      网友评论

          本文标题:iOS 面容解锁 LocalAuthentication

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