iOS 指纹识别TouID 跳转页面问题

因为公司项目里需要用到指纹识别,就是类似于QQ那种的从后台进入前台后验证的。但是我发现通过指纹识别验证成功之后,如果是类似QQ那种模态出来的视图,会很快的收回去。但如果是导航控制器Push出来的视图,验证成功后,需要等几秒钟才会Push到下一个页面,这样肯定是不行的。

这是我之前的代码:

// 上下文对象

    LAContext *context = [LAContext new];

    // 存储错误信息

    NSError *error = nil;

    // 需要在弹出框中显示的文字,不可以为空

    NSString *errorReason = NSLocalizedStringFromTable(@"验证指纹来登录洋葱", kLocTable, nil);

    // 检查设备是不是可以使用biometrics(指纹识别)的方式验证身份(就是看看有没有指纹识别的硬件,或者有硬件但是没设定好指纹识别都是不可以进行验证的)

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

        // 判断输入的指纹是否正确

        [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics

                localizedReason:errorReason reply:^(BOOL success, NSError *error) {

                          if (success) {

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

                          }

                          if (error){

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

                              switch (error.code) {

                                  case -1:

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

                                      break;

                                  case -2:

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

                                      break;

                                  case -3:

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

                                      break;

                                  case -4:

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

                                      break;

                                  case -5:

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

                                      break;

                                  case -6:

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

                                      break;

                                  case -7:

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

                                      break;

                                  default:

                                      break;

                              }

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

                          }

                      }];        

    } else { // 不可用

        DLog(@"你的设备不支持指纹");

    }

问题就是如果验证成功后,通过导航控制器推到下一个页面,会等待一段时间才过去。之后我找到了通过多线程,并且提高优先级的方法来跳转页面,一下是代码:

dispatch_queue_t highPriorityQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.75 * NSEC_PER_SEC), highPriorityQueue, ^{

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

        NSError *error = nil;        

        // 检查设备是否支持TouchID

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

            // 如果设备支持TouchID,则展示给用户

            [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics

                    localizedReason:NSLocalizedStringFromTable(@"验证指纹来登录洋葱", kLocTable, nil)

                              reply:^(BOOL success, NSError *error) {

                                  if (success) {

                                      // 验证成功的方法放到主线程里执行

                                      dispatch_async(dispatch_get_main_queue(), ^{

                                          // 这里放验证成功后执行的代码

                                      });

                                  }

                                  else if (error) {

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

                                  }

                              }];

        }

    });


此段代码也要延时一段时间执行,否则如果手指一直放在TouchID上进入App的话,可能会导致显示上的问题和其他错误。我写的延时是0.75秒,时间是很短的,不影响用户体验。以上就是解决此问题的方案






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值