iOS 8的SDK开放了Touch ID的接口.从WWDC的视频中能够看到Touch ID应用在两个方面:用于Key Chain加密和用于授权.iOS 8正式版公布以后我们能够看到Evernote的iOS app已经集成了该功能.以下来看看怎样实现使用Touch ID进行身份认证.

  事实上非常easy,用于身份认证的全部的接口都在LocalAuthentication framework中, 该framework实际上仅仅有三个头文件:
  LAContext.h
  LAError.h
  LAPublicDefines.h
  而实际用到的函数也仅仅有两个:
  // 用来推断设备是否支持Touch ID
  - (BOOL)canEvaluatePolicy:(LAPolicy)policy
error:(NSError * __autoreleasing *)error;
  // 真正验证身份的函数
  - (void)evaluatePolicy:(LAPolicy)policy

localizedReason:(NSString *)localizedReason

                 reply:(void(^)(BOOL success, NSError *error))reply;

  上述两个函数都是LAContext的member function.眼下LAPolicy仅仅有一个值: LAPolicyDeviceOwnerAuthenticationWithBiometrics.

假设canEvaluatePolicy返回YES,表示设备支持指纹识别,那么便能够调用evaluatePolicy:函数进行指纹识别了.调用evaluatePolicy函数后会弹出一个alert,例如以下图:

  该alert可定制的仅仅有两处:
  1.”To access your photos”提示文字是由localizedReason參数指定的,用来向用户说明使用Touch ID的目的.
  2.”Enter Password”可由LAContext的localizedFallbackTitle属性设置(LAContext眼下仅仅有这一个属性),假设不设置的话,默认是”Enter Password”.值得注意的是,假设该属性设置为@“”(空字符串),该button会被隐藏,Evernote应该就是这么做的.
  其它的免谈,当然更别提获取用户的指纹数据了.
  理论上三种情况下会退出验证(alert会被dismiss,reply回调会被调用):
  1.用户指纹通过验证
  2.用户点击”Enter Password”button
  3.用户点击”Cancel”button
  另一种情况:用户输入了错误的指纹.这样的情况下,该alert不会被dismiss,其标题会由”Touch ID”改为”Try Again”,有弹簧状的动画效果过渡.好了,代码例如以下(不要忘了引入头文件 <LocalAuthentication/LocalAuthentication.h>):
    LAContext *context = [LAContext new];

   

    NSError *error;

    context.localizedFallbackTitle = @"";

   

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

        NSLog(@"Touch
ID is available.");

        [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics 
                localizedReason:NSLocalizedString(@"Use
Touch ID to log in.", nil) 
                          reply:^(BOOL success, NSError *error)
{
            if (success)
{

                NSLog(@"Authenticated
using Touch ID.");

            } else {
                if (error.code == kLAErrorUserFallback)
{

NSLog(@"User
tapped Enter Password");

                } else if (error.code == kLAErrorUserCancel)
{

                    NSLog(@"User
tapped Cancel");

                } else {

                    NSLog(@"Authenticated
failed.");

            }

        }];

    } else {

        NSLog(@"Touch
ID is not available: %@", error);

    }

在开发中遇到过一个问题, 不知道是不是bug, 就是启动程序后马上使用Touch ID, 这样会导致身份验证通过了, 可是上述的alert并不会被dismiss. 详情參见https://github.com/RungeZhai/TouchIDIssue

iOS 8使用Touch ID进行身份认证的更多相关文章

  1. IOS 8 关于 Touch ID

    一.什么是Touch ID? Touch ID是在iPhone 5s后的设备上出现的指纹识别.Apple在IOS 8中开放给第三方APP使用. 可以使用 Touch ID 来验证用户的身份,用户经验证 ...

  2. iOS指纹识别Touch ID的安全性探讨

    苹果公司在 iPhone 5s 的发布会上公布了全新的指纹识别安全技术,也就是 Touch ID,开创了生物安全识别技术在便携设备上使用的新篇章.此后,苹果还将此技术带到了 iPad 上.此前没有任何 ...

  3. iOS Touch ID 身份认证

    iOS Touch ID 身份认证 iOS 8 及以后录了指纹的设备可以使用 touch ID 进行身份认证,指纹符合录入的指纹才能认证成功. 步骤 导入 LocalAuthentication 框架 ...

  4. iOS 8 中如何集成 Touch ID 功能

    2013年9月,苹果为当时发布的最新iPhone产品配备了一系列硬件升级方案.在iPhone 5s当中,最具创新特性的机制无疑要数围绕Home按钮设计的超薄金属圈,也就是被称为Touch ID的指纹传 ...

  5. Apple本地认证(密码+Touch id)

    转载请注明原文链接:http://www.cnblogs.com/zhanggui/p/6839554.html 前言 本片博客主要介绍如何在自己的APP中添加指纹解锁/密码解锁技术.主要是对苹果的L ...

  6. iOS 使用Touch ID 校验[新增 iOS9 三种错误]

    iOS8后苹果开放了Touch ID的API给开发者,这也给我们的app带来了新的体验.开发者们可使用向第三方应用开放了Touch ID权限的API,以便他们在应用中使用指纹认证来完成用户认证或支付购 ...

  7. iOS 中 Touch ID得使用方法

    iPhone 5S公布以后,iOS设备基本都有集成Touch ID.而这个功能对自己的App也是一个非常好的扩展,关于Touch ID的使用方法.大致例如以下, Swift: 引入LocalAuthe ...

  8. iOS --- Touch ID指纹解锁

    https://www.cnblogs.com/ljmaque/p/TouchID.html 最近在项目中刚好用到了TouchId指纹解锁功能,之前也没有接触过,立马百度看看究竟是要如何使用,发现其实 ...

  9. 保护 iOS 用户数据安全: Keychain 和 Touch ID

    原文:How To Secure iOS User Data: The Keychain and Touch ID 作者:Tim Mitra 译者:kmyhy 更新说明:本教程由 Tim Mitra ...

随机推荐

  1. iOS数组越界

    数组越界就是假如你的下标总数现在为32个,然后你在下一秒又执行了一个方法要从50个数据里进行赋值啊筛选之类的,而你此时数组里的值为32个,50的数据还没有请求到,往往会出现数组越界的崩溃信息,大概是这 ...

  2. 第4章 部署模式 Three-Tiered Distribution(三级分布)

    影响因素 Tiered Distribution 中讨论的影响因素也适用于此模式.有关这些通用影响因素的讨论,请参阅"Tiered Distribution".下列影响因素仅适用于 ...

  3. 派遣函数IRP

    派遣函数是Windows驱动程序中的重要概念.驱动程序的主要功能是负责处理I/O请求,其中大部分I/O请求是在派遣函数中处理的. 用户模式下所有对驱动程序的I/O请求,全部由操作系统转换为一个叫做IR ...

  4. Three入门学习笔记整理

    一.官方网站:https://threejs.org 二.关于Three.js 三.开始 四.实例 基本结构 结果 五.概念 坐标系 场景 相机 灯光 3D模型 六.简单动画 七.交互控制 结束 # ...

  5. (转)使用Vue-Router 2实现路由功能

    注意:vue-router 2只适用于Vue2.x版本,下面我们是基于vue2.0讲的如何使用vue-router 2实现路由功能.推荐使用npm安装. npm install vue-router ...

  6. 推荐10个超棒的jQuery工具 提示插件

    脚本之家 http://www.jb51.net/article/28525.htm

  7. ubuntu16 mysql 远程连接

    打开配置文件: sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf 将下面一行注释掉: # bind-address = localhost 重启服务 sudo s ...

  8. 组装自己的tesla超级计算机

    原文链接:blog.csdn.net/xqj198404/article/details/20016279 NVIDIA链接:http://www.nvidia.cn/object/tesla_bui ...

  9. 04-手把手教你把Vim改装成一个IDE编程环境(图文)

    Linux下编程一直被诟病的一点是: 没有一个好用的IDE, 但是听说Linux牛人, 黑客之类的也都不用IDE. 但是对我等从Windows平台转移过来的Coder来说, 一个好用的IDE是何等的重 ...

  10. 接口测试及Postman工具

    首先,什么是接口呢? 接口一般来说有两种,一种是程序内部的接口,一种是系统对外的接口.系统对外的接口:比如你要从别的网站或服务器上获取资源或信息,别人肯定不会把数据库共享给你,他只能给你提供一个他们写 ...