Touch ID 开发

基础知识

支持系统和机型

iOS系统的指纹识别功能最低支持的机型为iPhone 5s,最低支持系统为iOS 8,虽然安装iOS 7系统的5s机型能够使用系统提供的指纹解锁功能,但因为API并未开放,因此理论上第三方软件不可以使用。ios

依赖框架

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

注意事项

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

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

使用类

LAContext 指纹验证操做对象框架

操做流程

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

代码示例

#import "ViewController.h"
#import <LocalAuthentication/LocalAuthentication.h>

#define iOS8later [UIDevice currentDevice].systemVersion.doubleValue >= 8.0

@interface ViewController ()

@end

@implementation ViewController
- (IBAction)showTouchIDAlert:(id)sender {
    // 1.判断是不是iOS8以后
    if (!iOS8later) {
        NSLog(@"版本不对不能使用TouchID");
        return;
    }
    
    // 2.调用touchID的相关方法
    [self authenticateUser];
}

// 鉴定用户
- (void)authenticateUser
{
    // 建立指纹验证对象
    LAContext *context = [[LAContext alloc] init];
    NSError *yfError = nil;
    
    // 验证设备是否支持touchID
    // LAPolicyDeviceOwnerAuthenticationWithBiometrics 14年时候枚举只有这一个属性
    // LAPolicyDeviceOwnerAuthentication 后来加的枚举属性
    if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&yfError]) {
        // 支持touchID
        [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics
                localizedReason:@"XMGlocalizedReason"
                          reply:^(BOOL success, NSError * _Nullable error) {
                              if (success) {
                                  // touchID验证成功
                                  NSLog(@"touchID验证成功");
                                  // 继续处理相关业务(注意线程)
                              }else
                              {
                                  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
                                          break;
                                      }
                                      case LAErrorUserFallback:
                                      {
                                          NSLog(@"User selected to enter custom password");
                                          [[NSOperationQueue mainQueue] addOperationWithBlock:^{
                                              //用户选择输入密码,切换主线程处理
                                          }];
                                          break;
                                      }
                                      default:
                                      {
                                          [[NSOperationQueue mainQueue] addOperationWithBlock:^{
                                              //其余状况,切换主线程处理 
                                          }];
                                          break;
                                      }
                                  }
                              }
                }];
        
    }else
    {
        switch (yfError.code) {
            case LAErrorTouchIDNotEnrolled:
                NSLog(@"LAErrorTouchIDNotEnrolled");
                break;
                
        
            case LAErrorPasscodeNotSet:
                NSLog(@"LAErrorPasscodeNotSet"); // 此处触发showPasscodeResetAlert方法
                break;
                
            default:
                NSLog(@"Touch ID is unaviliable");
                break;
        }
        NSLog(@"%@", yfError.localizedDescription);
    }
}

/*
 typedef NS_ENUM(NSInteger, LAError)
 {
 //受权失败
 LAErrorAuthenticationFailed = kLAErrorAuthenticationFailed,
 
 //用户取消Touch ID受权
 LAErrorUserCancel           = kLAErrorUserCancel,
 
 //用户选择输入密码
 LAErrorUserFallback         = kLAErrorUserFallback,
 
 //系统取消受权(例如其余APP切入)
 LAErrorSystemCancel         = kLAErrorSystemCancel,
 
 //系统未设置密码
 LAErrorPasscodeNotSet       = kLAErrorPasscodeNotSet,
 
 //设备Touch ID不可用,例如未打开
 LAErrorTouchIDNotAvailable  = kLAErrorTouchIDNotAvailable,
 
 //设备Touch ID不可用,用户未录入
 LAErrorTouchIDNotEnrolled   = kLAErrorTouchIDNotEnrolled,
 } NS_ENUM_AVAILABLE(10_10, 8_0);
 
 */

- (void)viewDidLoad {
    [super viewDidLoad];
  
}

@end

 前辈Demo:两行代码集成TouchID指纹验证lua

相关文章
相关标签/搜索