iOS指纹验证TouchID应用学习教程

2020-01-18 19:37:58于海丽

 指纹验证这个功能现在在一些app中经常常见,常常与数字解锁,手势解锁联合起来使用。前几天接到说实现一个指纹验证的功能,捣鼓了挺久,然后今天,我就简单的介绍下指纹验证,会做个简单的demo实现一下基本的功能。
    支持系统和机型:iOS系统的指纹识别功能最低支持的机型为iPhone 5s,最低支持系统为iOS 8。实现起来呢,其实还是很简单的,下面我们就用纯代码方式实现一个简单的demo1。

第一部分:调用原生服务实现指纹验证

这部分了解个大概就可以了

第一步:添加LocalAuthentication.framework库

iOS,指纹验证,TouchID

iOS,指纹验证,TouchID

iOS,指纹验证,TouchID

第二步:在appdelegate.m中添加代码
这个不说其实大家也都知道的吧。


#import "AppDelegate.h"
#import "ViewController.h"
@interface AppDelegate ()

@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
 //appdelegate
 _window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
 _window.backgroundColor = [UIColor whiteColor];
 [_window makeKeyAndVisible];
 ViewController *vc = [[ViewController alloc]init];
 UINavigationController *na = [[UINavigationController alloc]initWithRootViewController:vc];
 _window.rootViewController = na;
 return YES;
}

第三步
引入头文件

  #import <LocalAuthentication/LocalAuthentication.h>

第四步:实现指纹验证 

这一步就是很重要的地方了,在- (void)viewDidLoad中写入验证实现的代码,这里只有两步,因为LAContext在官方文档中只有两个方法:


 -canEvaluatePolicy:error: 
//-(BOOL)canEvaluatePolicy:(LAPolicy)policy error:(NSError * __autoreleasing *)error __attribute__((swift_error(none)));

 -evaluatePolicy:localizedReason:reply: 
//- (void)evaluatePolicy:(LAPolicy)policy localizedReason:(NSString *)localizedReason reply:(void(^)(BOOL success, NSError * __nullable error))reply;

一个是判断设备是否支持touchid,一个是进行验证返回不同的结果,之前在网上经常可以一些文章中写了,指纹验证的第一步都是先判断设备的系统版本等等,现在似乎都不需要了,只要调用该方法就可以了。全部的代码 如下:

 


- (void)viewDidLoad {
 [super viewDidLoad];
 self.title = @"TouchIDSimpleDemoOne";
 LAContext *context = [[LAContext alloc]init];
 NSError *error;
 NSString *result = @"需要你身份验证呢"; 
 if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error])
 {
 [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:result reply:^(BOOL success, NSError *error)
 {
  if (success)
  {
  //验证成功,主线程处理UI
  //这个地方呢就是写一些验证成功之后需要做些什么事情的代码。
  NSLog(@"验证成功");
  }
  else
  {
  //以下是一些验证失败的原因啥的
  NSLog(@"%@",error.localizedDescription);
  switch (error.code) {
   case LAErrorSystemCancel:
   {
   NSLog(@"切换到其他APP,系统取消验证Touch ID");
   //切换到其他APP,系统取消验证Touch ID
   break;
   }
   case LAErrorUserCancel:
   {
   NSLog(@"用户取消验证Touch ID");
   //用户取消验证Touch ID
   break;
   }
   case LAErrorUserFallback:
   {
   NSLog(@"用户选择输入密码");
   [[NSOperationQueue mainQueue] addOperationWithBlock:^{
    //用户选择其他验证方式,切换主线程处理
   }];
   break;
   }
   default:
   {
   NSLog(@"LAErrorAuthenticationFailed,授权失败");
   //授权失败
   [[NSOperationQueue mainQueue] addOperationWithBlock:^{
    //其他情况,切换主线程处理
   }];
   break;
   }
  }
  }
 }]; 
 }else
 {
 //不支持指纹识别,LOG出错误详情

 switch (error.code) {
  case LAErrorTouchIDNotEnrolled:
  {
  NSLog(@"设备Touch ID不可用,用户未录入");
  break;
  }
  case LAErrorPasscodeNotSet:
  {
  NSLog(@"系统未设置密码");
  break;
  }
  case LAErrorTouchIDNotAvailable:
  {
  NSLog(@"设备Touch ID不可用,例如未打开");
  break;
  }
  default:
  {
  NSLog(@"系统未设置密码");
  break;
  }
 }
 NSLog(@"%@",error.localizedDescription);
 } 
}