iOS 指纹解锁

本文详细介绍如何在iOS应用中集成TouchID功能,包括检测设备是否支持TouchID、实现登录页面的指纹验证逻辑及设置页面的指纹开关功能。

LocalAuthentication

Security

 导入上面的两个库

逻辑有点喽  简单易懂

登录页面 

- (void)exMainQueue:(void (^)())queue {

    dispatch_async(dispatch_get_main_queue(), queue);

}


- (void)touch{

    BOOL setOn = [[NSUserDefaults standardUserDefaults]boolForKey:@"Touch"];

    if (setOn) {

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

        NSString *hihihihi = @"123456789";

        [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:hihihihi reply:

         ^(BOOL success, NSError *error) {

             

             if (success) {

                 [self exMainQueue:^{

                     UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];

                     HomeViewController * home = [storyBoard instantiateViewControllerWithIdentifier:@"HomeViewController"];

                     [self.navigationController pushViewController:home animated:YES];


                 }];

             }

         }];

        

    }


}

设置页面 

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

    BOOL success;

    NSError *error;

    

    // .检查设备是否能用TouchID,返回检查结果BOOL类型success

    success = [context canEvaluatePolicy: LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error];

    if (success) {

        

        NSLog(@"支持");

        _isSupport = YES;

    } else {

        _isSupport = NO;


        NSLog(@"不支持");

        

    }


  if (_isSupport&&indexPath.row == 0) {

        cell.textLabel.text = @"指纹解锁";

        UISwitch * sw = [[UISwitch alloc]initWithFrame:CGRectMake(0, 0, 50, 30)];

        [sw addTarget:self action:@selector(switchDragDownAD:) forControlEvents:UIControlEventValueChanged];

        //本地拿到sw的状态

        sw.on = [[NSUserDefaults standardUserDefaults]boolForKey:@"Touch"];

        _setOn = sw.on;

        cell.accessoryView = sw;

    }else{

        cell.textLabel.text = @"指纹123456789746546解锁";


    }


- (void)switchDragDownAD:(UISwitch *)sw{

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

    _setOn = [[NSUserDefaults standardUserDefaults]boolForKey:@"Touch"];

    NSString *hihihihi = @"123456789";

    //如果设备能使用TouchID,代码块中返回识别结果BOOL类型的success

    [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:hihihihi reply:

     ^(BOOL success, NSError *error) {

         

         if (success) {

             // 验证成功后执行的代码

             if (_setOn) {

                 //存在

                 [[NSUserDefaults standardUserDefaults]removeObjectForKey:@"Touch"];

                 [[NSUserDefaults standardUserDefaults]synchronize];

                 [self exMainQueue:^{

                     sw.on = NO;

                     NSLog(@"取消指纹解锁了touch");

                 }];

             } else {

                 [[NSUserDefaults standardUserDefaults]setBool:YES forKey:@"Touch"];

                 [[NSUserDefaults standardUserDefaults]synchronize];

                 [self exMainQueue:^{

                     sw.on = YES;

                     NSLog(@"添加指纹解锁了touch");


                 }];

             }

            

         } else {

             if (_setOn) {

                 //存在

                 [[NSUserDefaults standardUserDefaults]setBool:YES forKey:@"Touch"];

                 [[NSUserDefaults standardUserDefaults]synchronize];

                 [self exMainQueue:^{

                     sw.on = YES;

                     NSLog(@"取消指纹解锁 失败了touch");


                 }];

             } else {

                 [[NSUserDefaults standardUserDefaults]removeObjectForKey:@"Touch"];

                 [[NSUserDefaults standardUserDefaults]synchronize];

                 [self exMainQueue:^{

                     sw.on = NO;

                     NSLog(@"添加指纹解锁失败了 touch");


                 }];

             }

             NSLog(@"不支持,不能使用");

             

             

             NSLog(@"error = %@",error);

             switch (error.code) {

                 case -1:

                     NSLog(@"验证指纹失败");

                     break;

                 case -2:

                     NSLog(@"你点了取消");

                     break;

                 case -3:

                     NSLog(@"你点了输入密码");

                     break;

                 case -4:

                     NSLog(@"系统终止了验证");

                     break;

                 case -5:

                     NSLog(@"用户没有在设备Settings中设定密码");

                     break;

                 case -6:

                     NSLog(@"设备不支持Touch ID");

                     break;

                 case -7:

                     NSLog(@"设备没有进行Touch ID 指纹注册");

                     break;

                 default:

                     break;

             }


         }

      


     }];

}

- (void)exMainQueue:(void (^)())queue {

    dispatch_async(dispatch_get_main_queue(), queue);

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值