美文网首页
iOS 指纹识别/面部识别/生物识别

iOS 指纹识别/面部识别/生物识别

作者: 唐人街的乞丐 | 来源:发表于2019-11-11 14:30 被阅读0次

    前言

    指纹识别,面部识别都属于生物识别

    1.配置info.plist

    // 跟相机一样需要在info.plist文件中添加配置,否则会闪退

    //  字段: NSFaceIDUsageDescription


    2.校验方式

    LAPolicy 有两种方式

      . LAPolicyDeviceOwnerAuthenticationWithBiometrics iOS8.0以上支持,只有指纹验证功能

        . LAPolicyDeviceOwnerAuthentication iOS 9.0以上支持,包含指纹验证与输入密码的验证方式  (输入密码也可以验证通过)

    -(void)click{

            LAContext * context = [[LAContext alloc]init];

              context.localizedFallbackTitle = @"ddd";

              context.localizedCancelTitle = @"ccc";

        NSError * error = nil;

        if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) {

            // 支持指纹

            NSLog(@"可以验证");

            [self unlock];

        }else{

            NSLog(@"不能验证");

            [self recoveryLock];

        }

    }

    -(void)unlock{

        LAContext *    context = [[LAContext alloc]init];

                 context.localizedFallbackTitle = @"ddd";

                 context.localizedCancelTitle = @"ccc";

        NSString * reason = @"999999 ";

          [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:reason reply:^(BOOL success, NSError * _Nullable error) {

                        dispatch_async(dispatch_get_main_queue(), ^{

                    if (success) {

                        NSLog(@"验证成功");

                            [self.navigationController pushViewController:[PUSHViewController new]  animated:YES];

                    }else{

                        NSLog(@"验证失败");

        //                 NSLog(@"不支持指纹");

                                switch (error.code) {

                                    case LAErrorTouchIDNotEnrolled:

                                        NSLog(@"设备没有注册touchID");

                                        break;

                                    case LAErrorUserCancel:

                                            NSLog(@"点击了取消按钮");

                                            break;

                                        case LAErrorAuthenticationFailed:

                        //                 LAPolicyDeviceOwnerAuthentication 可以支持输入密码,进行验证

                                                NSLog(@"LAErrorAuthenticationFailed,连续三次输入错误,支付宝弹出指纹不匹配");

                                                break;

                                        case LAErrorPasscodeNotSet:

                        //                 LAPolicyDeviceOwnerAuthentication 可以支持输入密码,但是用户没有设置密码

                                                NSLog(@"用户没有设置密码");

                                                break;

                                        case LAErrorTouchIDNotAvailable:

                                                NSLog(@"不支持指纹,可能手机版本低");

                                                break;

                                    case LAErrorUserFallback:

                                            NSLog(@"点击输入密码按钮,,可以处理点击事件");

                                            break;

                                        case LAErrorTouchIDLockout:

                        //  类似支付宝,多次输入错误的话,锁定touchID,用密码接触锁定以后重新,重新支持touchID

                                    {

                                        NSLog(@"错误次数超过上限,需要手动输入密码");

                                        [self recoveryLock];

                                    }

                                        break;

                                    default:

                                        break;

                                }

                    }

                             });

                }];

    }

    -(void)recoveryLock{

        NSLog(@"弹出输入密码");

        LAContext *    context = [[LAContext alloc]init];

                 context.localizedFallbackTitle = @"ddd";

                 context.localizedCancelTitle = @"ccc";

        [context evaluatePolicy:LAPolicyDeviceOwnerAuthentication localizedReason:@"22222" reply:^(BOOL success, NSError * _Nullable error) {

            if (success) {

                NSLog(@"输入密码验证成功");

                [self unlock];

            }else{

                NSLog(@"输入密码验证失败");

            }

        }];

    }

    reason = @"999999 ";localizedCancelTitle=@“6666”:localizedFallbackTitle = @"77777"; 指纹输入错误reason = @"999999 ";localizedCancelTitle=@“6666”:localizedFallbackTitle = @"77777"; reason = @"999999 ";localizedCancelTitle=@“”:localizedFallbackTitle = @"";只有一个界面 localizedReason = @“999999”,可以自定义 验证成功,没有再主线程进行操作的话,会有上面的提示

    GitHub代码地址

    相关文章

      网友评论

          本文标题:iOS 指纹识别/面部识别/生物识别

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