zoukankan      html  css  js  c++  java
  • iOS开发——Touch ID 指纹识别

       项目中为了安全性,一般使用密码或iPhone手机的指纹识别Touch ID。

       第一步,判断系统是否支持,iOS8.0及以上才支持。

       第二步,判断手机是否支持,带Touch ID的手机iPhone5s及以上才支持

      代码如下:

    - (void)openTouchID{
        
        if ([UIDevice currentDevice].systemVersion.floatValue < 8.0) {
            
            NSLog(@"系统版本过低,不支持");
            return;
        }
        
        
        //创建安全验证对象
        LAContext * ctx = [[LAContext alloc]init];
        
        //判断是否支持密码验证
        /**
         *LAPolicyDeviceOwnerAuthentication 手机密码的验证方式
         *LAPolicyDeviceOwnerAuthenticationWithBiometrics 指纹的验证方式
         */
        BOOL isEnable = [ctx canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:NULL];
        if (isEnable) {
            ctx.localizedFallbackTitle = @"";  // 去掉错误时显示【输入密码】
            [ctx evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"指纹验证" reply:^(BOOL success, NSError * _Nullable error) {
                
                
                if (success)
                {
                    //输入成功 存储状态
                  //  NSString *keyF = [NSString stringWithFormat:@"%@fingerKey",userInfomation().userId];
                  //  [[NSUserDefaults standardUserDefaults] setObject:@"1" forKey:keyF];
                  //  [[NSUserDefaults standardUserDefaults] synchronize];
                    
                    NSLog(@"指纹验证成功");
                    dispatch_async(dispatch_get_main_queue(), ^{
                        
                       
                            
                            // 进入风险评测
                           
    
                            
                  
                         
                      
                        
                    });
                    
                } else
                {
                    // 失败
                    dispatch_async(dispatch_get_main_queue(), ^{
                        NSLog(@"指纹验证失败----");
                        
                        NSLog(@"%@",error.localizedDescription);
                        switch (error.code) {
                            case LAErrorSystemCancel:
                            {
                                NSLog(@"Authentication was cancelled by the system");
                                //切换到其他APP,系统取消验证Touch ID
                                break;
                            }
                            case LAErrorUserCancel:
                            {
                                NSLog(@"Authentication was cancelled by the user");
                                //用户取消验证Touch ID
                                // 进入风险评测
                               // [self enterRiskEvaluation];
    
                                break;
                            }
                            case LAErrorAuthenticationFailed:
                            {
                                NSLog(@"指纹错误:LAErrorAuthenticationFailed");
                                //切换到其他APP,系统取消验证Touch ID
                                [self timesLimited];
                                break;
                            }
                            case LAErrorPasscodeNotSet:
                            {
                                NSLog(@"指纹错误:LAErrorPasscodeNotSet");
                               
                                break;
                            }
                            case LAErrorTouchIDNotAvailable:
                            {
                                NSLog(@"指纹错误:LAErrorTouchIDNotAvailable");
                                
                                
                                break;
                            }
                            case LAErrorTouchIDNotEnrolled:
                            {
                                NSLog(@"指纹错误:LAErrorTouchIDNotEnrolled");
                               
                                break;
                            }
                            case LAErrorTouchIDLockout:
                            {
                                NSLog(@"指纹错误:LAErrorTouchIDLockout");
                                
                               // [self timesLimited];
                                break;
                            }
                                
                            case LAErrorAppCancel:
                            {
                                NSLog(@"指纹错误:LAErrorAppCancel");
                               
                                break;
                            }
                            default:
                            {
                                // 次数受限
                               // [self timesLimited];
                                break;
                            }
                        }
                        
                        //......
                    
                    });
                    
                }
                
            }];
            
        }else{
            
            // 密码验证的方式(不支持指纹) 可加弹窗提示
            NSLog(@"不支持指纹");
            
        }
        
    }

    效果图如下:

  • 相关阅读:
    Java中的transient关键字
    【笔记】html的改变(上)
    《开发板 — 实现看门狗》
    《头文件导致Symbol xxx multiply defined重复定义问题分析和解决》
    《APP读取按键值》
    《补充 — Linux内核device结构体分析(转)》
    《设备树LED模板驱动程序》
    《C库 — 字符串和整型数相互转换函数atoi和itoa》
    《Ubuntu — rsync命令》
    《Ubuntu — 2>/dev/null和>/dev/null 2>&1和2>&1>/dev/null的区别》
  • 原文地址:https://www.cnblogs.com/LiuChengLi/p/5334015.html
Copyright © 2011-2022 走看看