iOS8中使用TouchID校验

在iOS8中,开发者们可使用向第三方应用开放了Touch ID权限的API,以便他们在应用中使用指纹认证来完成用户认证部分。

本文主要介绍如何在应用中集成Touch ID来校验用户的身份。

#import <LocalAuthentication/LocalAuthentication.h>这个库必须要Xcode6并且连接的是真机,才不会提示找不到的错误。 如果是模拟器会提示找不到这个库。

  1 - (IBAction)authenticateButtonTapped:(id)sender {
  2     LAContext *context = [[LAContext alloc] init];
  3     context.localizedFallbackTitle = @"输入密码";
  4     NSError *error = nil;
  5
  6     if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) {
  7
  8         [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics
  9                 localizedReason:@"您是这设备的所有者吗?"
 10                           reply:^(BOOL success, NSError *error) {
 11                               if (success) {
 12                                   dispatch_async (dispatch_get_main_queue(), ^{
 13
 14                                       UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Success"
 15                                                                                       message:@"你是设备主人。"
 16                                                                                      delegate:nil
 17                                                                             cancelButtonTitle:@"Ok"
 18                                                                             otherButtonTitles:nil];
 19                                       [alert show];
 20                                   });
 21
 22                               }else{
 23
 24
 25                               /*
 26                                // 用户未提供有效证书,(3次机会失败 --身份验证失败)。
 27                                LAErrorAuthenticationFailed = kLAErrorAuthenticationFailed,
 28
 29                                // 认证被取消,(用户点击取消按钮)。
 30                                LAErrorUserCancel           = kLAErrorUserCancel,
 31
 32                                // 认证被取消,用户点击回退按钮(输入密码)。
 33                                LAErrorUserFallback         = kLAErrorUserFallback,
 34
 35                                // 身份验证被系统取消,(比如另一个应用程序去前台)。
 36                                LAErrorSystemCancel         = kLAErrorSystemCancel,
 37
 38                                // 身份验证无法启动,因为密码在设备上没有设置。
 39                                LAErrorPasscodeNotSet       = kLAErrorPasscodeNotSet,
 40
 41                                // 身份验证无法启动,因为触摸ID在设备上不可用。
 42                                LAErrorTouchIDNotAvailable  = kLAErrorTouchIDNotAvailable,
 43
 44                                // 身份验证无法启动,因为没有登记的手指触摸ID。 没有设置指纹密码时。
 45                                LAErrorTouchIDNotEnrolled   = kLAErrorTouchIDNotEnrolled,
 46                                **/
 47                               switch (error.code) {
 48                                   case LAErrorAuthenticationFailed:
 49                                       NSLog(@"身份验证失败。");
 50
 51                                       break;
 52
 53                                   case LAErrorUserCancel:
 54                                       NSLog(@"用户点击取消按钮。");
 55
 56                                       break;
 57
 58                                   case LAErrorUserFallback:
 59                                       NSLog(@"用户点击输入密码。");
 60
 61                                       break;
 62
 63                                   case LAErrorSystemCancel:
 64                                       NSLog(@"另一个应用程序去前台");
 65
 66                                       break;
 67
 68                                   case LAErrorPasscodeNotSet:
 69                                       NSLog(@"密码在设备上没有设置");
 70
 71                                       break;
 72
 73                                   case LAErrorTouchIDNotAvailable:
 74                                       NSLog(@"触摸ID在设备上不可用");
 75
 76                                       break;
 77
 78                                   case LAErrorTouchIDNotEnrolled:
 79                                       NSLog(@"没有登记的手指触摸ID。");
 80
 81                                       break;
 82
 83                                   default:
 84                                       NSLog(@"Touch ID没配置");
 85
 86                                       break;
 87                               }
 88                             }
 89                         }];
 90
 91     } else {
 92         dispatch_async (dispatch_get_main_queue(), ^{
 93
 94             UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"错误提示"
 95                                                             message:@"您的设备没有触摸ID."
 96                                                            delegate:nil
 97                                                   cancelButtonTitle:@"Ok"
 98                                                   otherButtonTitles:nil];
 99             [alert show];
100         });
101     }
102
103 }

其中:

(1)localizedFallbackTitle:用于设置左边的按钮的名称,默认是输入密码。

(2)localizedReason:用于设置提示语,表示为什么要使用Touch ID,如代码中@"您是这设备的所有者吗?"。

官方的API就是简单,简简单单几句话 就可以。

时间: 2024-11-08 20:26:55

iOS8中使用TouchID校验的相关文章

【SpringMVC学习06】SpringMVC中的数据校验

这一篇博文主要总结一下springmvc中对数据的校验.在实际中,通常使用较多是前端的校验,比如页面中js校验,对于安全要求较高的建议在服务端也要进行校验.服务端校验可以是在控制层conroller,也可以是在业务层service,controller校验页面请求的参数的合法性,在服务端控制层conroller的校验,不区分客户端类型(浏览器.手机客户端.远程调用):service层主要校验关键业务参数,仅限于service接口中使用的参数.这里主要总结一下何如使用springmvc中contr

iOS8中的定位服务

My app that worked fine in iOS 7 doesn't work with the iOS 8 SDK. CLLocationManager doesn't return a location, and I don't see my app under Settings > Location Services either. I did a Google search on the issue but nothing came up, what could be wro

初探 iOS8 中的 Size Class

以前和安卓的同学聊天的时候,谈到适配一直是一个非常开心的话题,看到他们被各种屏幕适配折磨的欲仙欲死,心里真替他们高兴.不过在做到 iPhone 和 iPad 的适配的时候,一个页面需要配置多个 xib 进行开发还是个很头疼的事情.再加上 iPhone6 和 iPhone6 plus 的发布,适配似乎也变得麻烦起来.今天了解了 iOS8 中的 Size Class 之后,真的笑,笑出声. 简介 先来看一下我们的新伙伴:Size Classes.在 iOS8 中,我们不用再像以前那样,一个页面新建多

iOS8中使用CoreLocation定位

在iOS8中,苹果已经强制开发者在请求定位服务时获得用户的授权,此外iOS状态栏中还有指示图标,提示用户当前应用是否正在使用定位服务.另外在iOS8中,苹果进一步改善了定位服务,让开发者请求定位服务时需要向用户提供更多的透明.此外,iOS8中还支持让应用开发者调用全新的"访问监控"功能,当用户允许后应用才能获得更多的定位数据. iOS8以前使用CoreLocation定位 1.首先定义一个全局的变量用来记录CLLocationManager对象,引入CoreLocation.frame

[iOS] 初探 iOS8 中的 Size Class

转自:http://www.itnose.net/detail/6112176.html ? ? ? 以前和安卓的同学聊天的时候,谈到适配一直是一个非常开心的话题,看到他们被各种屏幕适配折磨的欲仙欲死,心里真替他们高兴.不过在做到 iPhone 和 iPad 的适配的时候,一个页面需要配置多个 xib 进行开发还是个很头疼的事情.再加上 iPhone6 和 iPhone6 plus 的发布,适配似乎也变得麻烦起来.今天了解了 iOS8 中的 Size Class 之后,真的笑,笑出声. 简介 先

iOS8中添加的extensions总结(一)——今日扩展

通知栏中的今日扩展 分享扩展 Action扩展 图片编辑扩展 文件管理扩展 第三方键盘扩展 注:此教程来源于http://www.raywenderlich.com的<iOS8 by Tutorials> 关于App extensions 的原理,即How extensions work 首先App扩展是一个App功能性上的扩展,它并不独立与你原来的App,也就是说在给App Store提交的时候是打包到原有App中一起提交,它们并不是独立的App.其次,App的每一种扩展都有自己单独的API

ios8中的UIScreen

Java代码   let orientation: UIInterfaceOrientation = UIApplication.sharedApplication().statusBarOrientation println("Currently landscape: " + ((orientation == UIInterfaceOrientation.LandscapeLeft||orientation == UIInterfaceOrientation.LandscapeRig

iOS8中UITableVIew分割线短的问题

在iOS8中会发现分割线默认是没有全部显示的,在iOS7中适用的代码 if ([self.myCardTableView respondsToSelector:@selector(separatorInset)]) { self.myCardTableView.separatorInset = UIEdgeInsetsZero; } 已经不管用了.而要在viewDidLoad中加入已下代码 if ([self.myCardTableView respondsToSelector:@selecto

iOS8中 UITableView section 分区头部视图不显示

最近自己使用了UITableView写了一个通讯录,但是在编写过程还算顺利,但是后来测试的时候,发现在iOS8中TableView的分区头不能正常显示,使用 - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section 方法可以正常的设置分区的Title,但是如果你使用了 - (UIView *)tableView:(UITableView *)tableView viewF