iOS 8 中如何集成 Touch ID 功能

2013年9月,苹果为当时发布的最新iPhone产品配备了一系列硬件升级方案。在iPhone 5s当中,最具创新特性的机制无疑要数围绕Home按钮设计的超薄金属圈,也就是被称为Touch ID的指纹传感器。开发人员随后开始纷纷将其API作为突破口,希望能在自己的应用程序中引入这一最新功能。如今一年已经过去,iOS 8提供的新型框架则让开发者能够更加得心应手地使用这套指纹传感装置。

这套Local Authentication框架能够轻松实现用户身份验证,大家可以利用它来完成应用程序的登录机制或者通过它保护应用程序当中的敏感数据。在今天的教程中,我们将共同了解如何将整套选项应用在自己的设计成果当中、我们能够从设备中获取哪些数据并一步步引导各位构建起一款示例应用程序。

要完成本教程,大家需要安装Xcode 6以创建新项目,此外各位还需要一台配备Touch ID的设备来对自己创建完成的示例应用进行测试。

1. Touch ID

Touch ID指的是被安装在iPhone 5s Home按钮当中的指纹传感装置。它的出现旨在帮助用户更为轻松地完成身份识别流程,从而鼓励使用者尽可能多地使用保护机制。大家在每台设备上最多能够配置五种指纹识别信息。到目前为止,Touch ID已经能够被用于完成设备解锁并完成在iTunes Store、App Store以及iBooks Store当中的购买操作。在进一步探讨如何将其引入大家自己的应用程序之前,我们首先需要对这款传感器本身进行一番了解。

Touch ID传感器能够以每英寸500像素的分辨率对用户指纹进行扫描,并将指纹图案划归为三种类型之一:拱型、旋涡型以及环型。这款传感器在设计上充分考虑到了便捷性需求,大家可以从任何角度对手指进行扫描、而且当前扫描结果能够与任何方向的原有指纹记录进行正确匹配。

苹果公司宣称,对于任何一个给定指纹图案、Touch ID发生识别错误的机率仅为五万分之一,这样的保护效果明显优于原本的四位数PIN码机制——毕竟其内容只能在0001到9999之间提供一万种可能性组合。不过苹果没有明显指出的是,在某些情况下我们可能无法使用自己的指纹顺利实现解锁操作,例如在游泳之后手指纹理褶皱发生变化时。

如果大家打算使用Touch ID,那么最重要的一点就是首先考虑到那些用户可能无法使用手指进行验证的使用场景。由于苹果不再允许我们使用设备内自带的PIN码验证机制,因此如果Touch ID无法正常起效、大家最好能在应用程序当中额外建立一套密码匹配方案。

2. 安全注意事项

指令传感器带来的最大问题在于,用户的隐私会从根本上受到侵犯。如果大家的密码内容被泄露出去,那么各位完全可以通过修改及时挽救、恶意人士根本无法继续利用其访问用户的敏感数据。然而如果大家的指纹信息,或者是苹果的指纹内容算法遭到外泄,我们明显没办法快速对其进行变更。

Local Authentication框架负责处理所有用户身份验证的重任。当与Touch ID结合起效时,最重要的就是要确保该框架不会透露任何与用户有关的细节、而且不会有数据从设备中被传输出去。然而,开发人员可以利用这套框架来检查特定用户是否被允许使用对应应用程序。

如果大家已经比较熟悉OAuth规范,就会发现这两种验证处理方式其实颇为相似。我们要求第三方对用户身份进行审核,如果我们对第三方充分信任,则可以根据其反馈直接向该用户提供认证凭证。

3. LAContext

Local Authentication框架的核心就是LAContext类。开发人员可以利用LAContext实例来对安全策略加以评估。截至本文发稿时,这也是惟一可资使用的管理策略。它会利用Touch ID传感器来检查用户的身份是否正是设备持有者。未来其它安全管理策略可能将陆续推出。举例来说,苹果公司可能会引入一类无权限角色、只允许他们对特定资源加以访问。

如果这套框架无法完成验证,则会提供错误提示信息。设备无法完成验证的理由可能包括以下几种:

  • LAErrorTouchIDNotAvailable 设备本身并不具备指纹传感装置。
  • LAErrorPasscodeNotSet 设备上并不具备密码设置信息,也就是说Touch ID功能处于被禁用状态。
  • LAErrorTouchIDNotEnrolled 已经设定有密码机制,但设备配置当中还没有保存过任何指纹内容。

如果遇到了包含上述错误码的错误提示信息,大家就需要利用其它一些方法来完成对用户的身份验证。在这种情况下,各位已经不能单单依赖Touch ID来完成保护工作了。

下面让我们一起创建一款示例应用程序,共同了解如何对Local Authentication框架加以使用。

4. 项目设置

第一步

打开Xcode并在File菜单内选择New > Project…。接下来在iOS Application模板列表中选择Single view Application(单视图应用程序)并点击Next。

第二步

为我们的项目输入一个名称,我叫自己的应用命名为Auth。接下来输入组织名称、公司标识以及类前缀。在Devices列表中选择iPhone,然后点击Next,接下来为项目选择一个文件保存位置。

第三步

点击ViewController.h并定义一种新操作,authenticateButtonTapped,它会触发整个验证流程。ViewController类的界面外观应该如下所示:

#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
- (IBAction)authenticateButtonTapped:(id)sender;
@end

第四步

打开Main.storyboard并将一个Button拖拽到控制器的视图当中。变更该按钮的标签以使其读取为Authneticate。

第五步

右键点击该按钮以显示Connections Inspector。点击Touch Up Inside事件左侧的加号并选择用于容纳该按钮的视图控制器。这时屏幕上会显示出新的菜单,大家需要在这里选择我们之前已经设置完成的操作。

5. 对用户身份进行验证

第一步

开启ViewController.m以激活authenticateButtonTapped方法。在文件开头位置添加以下面向Local Authentication框架的导入语句。

#import <LocalAuthentication/LocalAuthentication.h>

第二步

在authenticateButtonTapped方法当中,我们创建一套背景信息并检测该背景是否能够对LAPolicyDeviceOwnerAuthenticationWithBiometrics策略加以评估,如果不同则显示错误信息。

- (IBAction)authenticateButtonTapped:(id)sender {
    LAContext *context = [[LAContext alloc] init]; 

    NSError *error = nil; 

    if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) { 

        // Authenticate User 

    } else { 

        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
                                                        message:@"Your device cannot authenticate using TouchID."
delegate:nil
cancelButtonTitle:@"Ok"
otherButtonTitles:nil];
        [alert show];
    }
}

第三步

如果该LAContext对象能够利用Touch ID进行身份验证,那么我们就可以对用户身份加以审核了。如果没有出现错误提示信息,我们就能判断当前用户是否属于设备持有者。最后通过以下代码实施authenticateButtonTapped方法。

- (void)authenicateButtonTapped:(id)sender {
   LAContext *context = [[LAContext alloc] init];
   NSError *error = nil;
   if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) {
       [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics
               localizedReason:@"Are you the device owner?"
                         reply:^(BOOL success, NSError *error) {
           if (error) {
               UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
message:@"There was a problem verifying your identity."
delegate:nil
                                                     cancelButtonTitle:@"Ok"
                                                     otherButtonTitles:nil];
               [alert show];
               return;
           }
           if (success) {
               UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Success"
                                                               message:@"You are the device owner!"
delegate:nil
cancelButtonTitle:@"Ok"
otherButtonTitles:nil];
               [alert show];
           } else {
               UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
message:@"You are not the device owner."
delegate:nil
cancelButtonTitle:@"Ok"
otherButtonTitles:nil];
               [alert show];
           }
       }];
   } else {
       UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
                                                       message:@"Your device cannot authenticate using TouchID."
                                                      delegate:nil
                                             cancelButtonTitle:@"Ok"
                                             otherButtonTitles:nil];
       [alert show];
   }
}

6. 构建并运行

下面我们需要在配备有指纹传感器的物理设备上构建并运行这款应用程序,并通过点触Home按钮进行身份验证。只要大家的设备能够切实支持Touch ID功能,应用程序中的验证机制应该就能得到正确通过。当各位将手指放在传感器上时,应用程序就可以正确识别出用户是否属于该设备的合法持有者。

总结

在今天的教程中,我们了解了iOS 8新近加入了Local Authentication框架。通过对用户身份进行查验,LAContext类允许用户在无法直接向应用程序本身提供任何敏感数据的前提下完成识别工作。

时间: 2024-10-12 17:37:39

iOS 8 中如何集成 Touch ID 功能的相关文章

【转】iOS Objective-C中的instancetype和id关键字-关联返回类型和非关联返回类型

Objective-C中的instancetype和id关键字 分类: Objective-C2013-11-28 19:48 5421人阅读 评论(1) 收藏 举报 clangobjective-c编译器cocoainstancetype 目录(?)[+] Objective-C中的instancetype和id关键字 作者:wangzz 原文地址:http://blog.csdn.net/wzzvictory/article/details/16994913 转载请注明出处 如果觉得文章对你

分分钟解决iOS开发中App启动广告的功能

前不久有朋友需要一个启动广告的功能,我说网上有挺多的,他说,看的不是很理想.想让我写一个,于是乎,抽空写了一个,代码通俗易懂,简单的封装了一下,各种事件用block回调的,有俩种样式的广告,一种是全屏广告,另一种是下面露logo的,类似网页新闻的启动广告.依赖SDWebImage主要用来下载网络的广告图片,一般项目里面网络图片都用的这个框架,所以在此不做过多的阐述.下面让我们来看看我封装的过程,对于新手来说,可以学习一下这种封装的思想. 1.首先建一个继承View的LBLaunchImageAd

iOS 中 Touch ID得使用方法

iPhone 5S公布以后,iOS设备基本都有集成Touch ID.而这个功能对自己的App也是一个非常好的扩展,关于Touch ID的使用方法.大致例如以下, Swift: 引入LocalAuthentication.framework import LocalAuthentication var myContext = LAContext() var error: NSError? var localizedReasonString = "认证提示信息" if myContext.

iOS 中 Touch ID得用法

iPhone 5S发布以后,iOS设备基本都有集成Touch ID,而这个功能对自己的App也是一个很好的扩展,关于Touch ID的用法,大致如下, Swift: 引入LocalAuthentication.framework import LocalAuthentication var myContext = LAContext() var error: NSError? var localizedReasonString = "认证提示信息" if myContext.canEv

使用iOS 8 SDK添加Touch ID指纹识别功能

iOS 8 SDK向开发者公开了Touch ID指纹识别功能,允许App对用户身份进行本地验证.使用Touch ID非常简单,只需要2步即可: 1. 检查Touch ID是否可用. 2. 获得指纹验证结果. 下面以一个简单的例子来说明如何使用Touch ID. 创建一个新的项目,向界面设计器中添加一个按钮.使用Touch ID需要引入LocalAuthentication框架: import LocalAuthentication 在按钮的Touch Up Inside事件中我们首先检查Touc

iOS 8使用Touch ID进行用户认证

iOS 8的SDK开放了Touch ID的接口.从WWDC的视频中可以看到Touch ID应用在两个方面:用于Key Chain加密和用于授权.iOS 8正式版发布以后我们可以看到Evernote的iOS app已经集成了该功能.下面来看看如何实现使用Touch ID进行身份认证. 其实很简单,用于身份认证的所有的接口都在LocalAuthentication framework中, 该framework实际上只有三个头文件: LAContext.h LAError.h LAPublicDefi

Touch ID和Passcode框架,Apple Watch风格的应用布局

本文转载至 http://www.cocoachina.com/ios/20141031/10110.html 水平滚动条(artwalk) 测试环境:Xcode 6.0,iOS 8.0 VENTouchLock Venmo app中使用的Touch ID和Passcode框架.VENTouchLock通过Touch ID指纹扫描或者Passcode来获得访问权限. 在iPhone上实现Apple Watch风格的应用布局 WatchSpringboard-Prototype是在iPhone上实

iOS用户数据安全:Keychain、Touch ID以及1Password

使用登录界面来保护APP用户数据是很好的方法--你可以使用Keychain(内嵌在iOS里的)来确保用户数据的安全.不过苹果现在使用Touch ID提供了另外一层保护,该功能适用于iPhone5.iPhone6. iPhone 6+.iPad Air2以及iPad mini 3. 如果这些都还不够,可以尝试iOS 8引入的扩展,你甚至可以使用AgileBits开发的1Password app来整合登录信息的存储和获取.这一切都要感谢AgileBits团队开发者开源了他们的扩展包.这样你就可以把管

IOS应用中社交分享集成

此功能是利用第三方SDK集成IOS应用中分享功能 1.获取AppKey 在mob官网注册应用得到appkey,www.mob.com 2.下载SDK 注册过下载需要的社会化的SDK工具 3.快速集成 第一步:将下载的SDK解压后导入您的工程中 注意:请务必在上述步骤中选择“Create groups for any added folders”单选按钮组.如果你选择“Create folder references for any added folders”,一个蓝色的文件夹引用将被添加到项目