zoukankan      html  css  js  c++  java
  • ios8指纹识别

    简介

    苹果从iPhone5S开始,具有指纹识别技术,从iOS8.0之后苹果允许第三方 App 使用 Touch ID进行身份验证。指纹识别Touch ID提供3+2共5次指纹识别机会(3次识别失败后,弹出的指纹验证框会消失,同时会报错code = -1,然后点击指纹会再次弹框可验证两次),如果五次指纹识别全部错误,就需要手动输入数字密码,数字密码可以输入6次,如果6次输入的数字密码都错误,系统会停止验证,一定的间隔后才能再次输入密码验证,而且间隔会随着输入的次数增长。

    使用方法

    1.首先导入框架LocalAuthentication
    2.判断系统版本,最低iOS 8.0
    3.创建验证对象上下文LAContext
    4.判断指纹识别技术是否可用canEvaluatePolicy
    5.如果可用,开始调用方法开始使用指纹识别

    #import <LocalAuthentication/LocalAuthentication.h>
    //指纹按钮
    - (void)showFingerprintTouch
    {
        //系统支持,最低iOS 8.0
        if ([UIDevice currentDevice].systemVersion.floatValue >= 8.0)
        {
            LAContext * context = [[LAContext alloc] init];
            NSError * error;
            if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error])
            {
    
                //localizedReason: 指纹识别出现时的提示文字
                [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"指纹解锁" reply:^(BOOL success, NSError * _Nullable error) {
    
                    if (success)
                    {
                        //识别成功
                        dispatch_async(dispatch_get_main_queue(), ^{
                                //在主线程中,处理 ......
                        });
                    }
                    else if (error)
                    {
                        NSLog(@"LAPolicyDeviceOwnerAuthenticationWithBiometrics -- %@",error);
                    }
    
                }];
    
            }
            else if([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthentication error:nil])
            {
                [context evaluatePolicy:LAPolicyDeviceOwnerAuthentication localizedReason:@"密码解锁" reply:^(BOOL success, NSError * _Nullable error){
    
                    NSLog(@"LAPolicyDeviceOwnerAuthentication -- %@", error);
    
                }];
            }
            NSLog(@" --- %@ ", error);
        }
    }


    代码解析

    指纹识别的策略

    [context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:nil] [context canEvaluatePolicy:LAPolicyDeviceOwnerAuthentication error:nil]

    • LAPolicyDeviceOwnerAuthenticationWithBiometrics ,指纹授权使用, 当设备不具有Touch ID的功能,或者在系统设置中没有设置开启指纹,授权将会失败。当指纹验证3+2次都没有通过的时候指纹验证就会被锁定,就需要先进行数字密码的解锁才能继续使用指纹密码。
    • LAPolicyDeviceOwnerAuthentication,指纹和数字密码的授权使用,当指纹可用且没有被锁定,授权后会进入指纹密码验证。不然的话会进入数字密码验证的页面。当系统数字密码没有设置不可用的时候,授权失败。如果数字密码输入不真确,连续6次输入数字密码都不真确后,会停用鉴定过一定的间隔后才能使用,间隔时间依次增长,如图:


    • 弹出的指纹验证框的两个按钮的标题,可以通过下面的方法修改:
      context.localizedCancelTitle = @"取消"; context.localizedFallbackTitle = @"输入密码";
    • localizedReason:是用来设置弹出框的提示内容的,一般写的是是用原因,如图:

       

       
       
       
       
      //详细介绍

      //创建LAContext(指纹验证操作对象)

          LAContext *context = [LAContext new];

          

          //这个属性是设置指纹输入 失败 之后的弹出框的选项

          context.localizedFallbackTitle = @"没有忘记密码";

          

          NSError *error = nil;

      //    使用canEvaluatePolicy  ,判断设备支持状态

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

              NSLog(@"支持指纹识别");

              [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"请按home键指纹解锁" reply:^(BOOL success, NSError * _Nullable error) {

                  if (success) {

                      NSLog(@"验证成功 刷新主界面");

                  }else{

                      NSLog(@"错误:%@",error.localizedDescription);

                      switch (error.code) {

                          case LAErrorSystemCancel:

                          {

                              NSLog(@"系统取消授权,如其他APP切入");

                              break;

                          }

                          case LAErrorUserCancel:

                          {

                              NSLog(@"用户取消验证Touch ID");

                              break;

                          }

                          case LAErrorAuthenticationFailed:

                          {

                              NSLog(@"授权失败");

                              break;

                          }

                          case LAErrorPasscodeNotSet:

                          {

                              NSLog(@"系统未设置密码");

                              break;

                          }

                          case LAErrorTouchIDNotAvailable:

                          {

                              NSLog(@"设备Touch ID不可用,例如未打开");

                              break;

                          }

                          case LAErrorTouchIDNotEnrolled:

                          {

                              NSLog(@"设备Touch ID不可用,用户未录入");

                              break;

                          }

                          case LAErrorUserFallback:

                          {

                              [[NSOperationQueue mainQueue] addOperationWithBlock:^{

                                  NSLog(@"用户选择输入密码,切换主线程处理");

                              }];

                              break;

                          }

                          default:

                          {

                              [[NSOperationQueue mainQueue] addOperationWithBlock:^{

                                  NSLog(@"其他情况,切换主线程处理");

                              }];

                              break;

                          }

                      }

                  }

              }];

          }else{

              NSLog(@"不支持指纹识别");

              switch (error.code) {

                  case LAErrorTouchIDNotEnrolled:

                  {

                      NSLog(@"TouchID is not enrolled");

                      break;

                  }

                  case LAErrorPasscodeNotSet:

                  {

                      NSLog(@"A passcode has not been set");

                      break;

                  }

                  default:

                  {

                      NSLog(@"TouchID not available");

                      break;

                  }

              }

              

              NSLog(@"%@",error.localizedDescription);

          }

     


    
    
  • 相关阅读:
    刷水题(四)
    C++如何调试
    刷水题(三)
    刷水题(二)
    虔诚的墓主人(BZOJ1227)(洛谷P2154)解题报告
    同余方程组(EXCRT)(luogu4777)
    数据结构——树状数组详解
    程序自动分析(NOI2015)(洛谷P1955)题解
    小胖的奇偶(Viojs1112)题解
    小胖守皇宫(VIJOS P1144 )题解
  • 原文地址:https://www.cnblogs.com/daxueshan/p/6092397.html
Copyright © 2011-2022 走看看