zoukankan      html  css  js  c++  java
  • CoreBluetooth

    支持系统和机型:

      iOS系统的指纹识别功能最低支持的机型为iPhone 5s,最低支持系统为iOS 8

      虽然安装iOS 7系统的5s机型可以使用系统提供的指纹解锁功能,但由于API并未开放,所以理论上第三方软件不可使用。

    依赖框架

    LocalAuthentication.framework
    #import <LocalAuthentication/LocalAuthentication.h>
    

    注意事项

    iOS 8以下版本适配时,务必进行API验证,避免调用相关API引起崩溃。

    if(iOS8){xxx} // 系统版本验证
    
    if ([myContext canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&authError])
    

    使用类

    LAContext 指纹验证操作对象

    操作流程

    • 判断系统版本,iOS 8及以上版本执行-(void)authenticateUser方法,
    • 方法自动判断设备是否支持和开启Touch ID。

    代码示例

      1 #import "ViewController.h"
      2 #import "MBProgressHUD+MJ.h"
      3 #import <LocalAuthentication/LocalAuthentication.h>
      4 
      5 #define iOS8 ([UIDevice currentDevice].systemVersion.doubleValue >= 8.0)
      6 
      7 
      8 @interface ViewController ()
      9 - (IBAction)clickMethod:(id)sender;
     10 
     11 @end
     12 
     13 @implementation ViewController
     14 
     15 - (void)viewDidLoad {
     16     [super viewDidLoad];
     17     // Do any additional setup after loading the view, typically from a nib.
     18 }
     19 
     20 
     21 - (IBAction)clickMethod:(id)sender {
     22     
     23     if (!iOS8) { // iOS8以后支持 touchID
     24         // HUD 提示
     25         [MBProgressHUD showError:@"当前系统不支持touchID"];
     26         return;
     27     }
     28     
     29     // 调用touchID
     30     [self touchIDShow];
     31     
     32 }
     33 
     34 - (void)touchIDShow
     35 {
     36     // 创建指纹校验对象
     37     LAContext *context = [[LAContext alloc] init];
     38     
     39     NSError *error1 = nil;
     40     if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error1]) {
     41         // 弹出验证
     42         [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"touchID error" reply:^(BOOL success, NSError * _Nullable error) {
     43            
     44             if (success) { // 验证成功
     45                 NSLog(@"success");
     46             }else{
     47                 switch (error.code) {
     48                     case LAErrorSystemCancel:
     49                     {
     50                         NSLog(@"Authentication was cancelled by the system");
     51                         //切换到其他APP,系统取消验证Touch ID
     52                         break;
     53                     }
     54                     case LAErrorUserCancel:
     55                     {
     56                         NSLog(@"Authentication was cancelled by the user");
     57                         //用户取消验证Touch ID
     58                         break;
     59                     }
     60                     case LAErrorUserFallback:
     61                     {
     62                         NSLog(@"User selected to enter custom password");
     63                         [[NSOperationQueue mainQueue] addOperationWithBlock:^{
     64                             //用户选择输入密码,切换主线程处理
     65                         }];
     66                         break;
     67                     }
     68                     default:
     69                     {
     70                         [[NSOperationQueue mainQueue] addOperationWithBlock:^{
     71                             //其他情况,切换主线程处理
     72                         }];
     73                         break;
     74                     }
     75                 }
     76                  NSLog(@"
    %s
     ---line=%d
     -- error=%@
    ", __FUNCTION__, __LINE__, error.localizedDescription);
     77             }
     78         }];
     79         
     80     }else{
     81         switch (error1.code) {
     82             case LAErrorTouchIDNotEnrolled:
     83                 NSLog(@"LAErrorTouchIDNotEnrolled");
     84                 break;
     85                 
     86                 
     87             case LAErrorPasscodeNotSet:
     88                 NSLog(@"LAErrorPasscodeNotSet"); // 此处触发showPasscodeResetAlert方法
     89                 break;
     90                 
     91             default:
     92                 NSLog(@"Touch ID is unaviliable");
     93                 break;
     94         }
     95     }
     96     /*
     97      typedef NS_ENUM(NSInteger, LAError)
     98      {
     99      //授权失败
    100      LAErrorAuthenticationFailed = kLAErrorAuthenticationFailed,
    101      
    102      //用户取消Touch ID授权
    103      LAErrorUserCancel           = kLAErrorUserCancel,
    104      
    105      //用户选择输入密码
    106      LAErrorUserFallback         = kLAErrorUserFallback,
    107      
    108      //系统取消授权(例如其他APP切入)
    109      LAErrorSystemCancel         = kLAErrorSystemCancel,
    110      
    111      //系统未设置密码
    112      LAErrorPasscodeNotSet       = kLAErrorPasscodeNotSet,
    113      
    114      //设备Touch ID不可用,例如未打开
    115      LAErrorTouchIDNotAvailable  = kLAErrorTouchIDNotAvailable,
    116      
    117      //设备Touch ID不可用,用户未录入
    118      LAErrorTouchIDNotEnrolled   = kLAErrorTouchIDNotEnrolled,
    119      } NS_ENUM_AVAILABLE(10_10, 8_0);
    120      
    121      */
    122     
    123     [self dealWithError:error1];
    124 }
    125 
    126 
    127 - (void)dealWithError:(NSError *)error
    128 {
    129     if (error) {
    130         NSLog(@"error = %@", error.localizedDescription);
    131     }
    132 }
    133 @end
  • 相关阅读:
    jquery扩展鼠标mousewheel事件
    addEventListener和attachEvent介绍, 原生js和jquery的兼容性写法
    HTML,CSS,font-family:中文字体的英文名称
    最好的Java和Android开发IDE---IntelliJ IDEA使用技巧
    《Thinking in Java》习题——吸血鬼数字
    Java学习之——JavaBeans
    Android 开源库——侧滑菜单栏(SlidingMenu)的导入和使用
    Android 布局学习之——Layout(布局)详解二(常见布局和布局参数)
    Android 布局学习之——Layout(布局)详解一
    Android 布局学习之——LinearLayout的layout_weight属性
  • 原文地址:https://www.cnblogs.com/guangleijia/p/5197783.html
Copyright © 2011-2022 走看看