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. CI中的文件上传

    //首先在控制器中装载url类和view视图: //在view视图中创建一个表单,注:在做文件上传一定要写encype=“multipart/form-data”: //form表单的提交页面应该使用 ...

  2. JavaWeb中使用到的类与接口整理(一)servlet包

    javaweb学了半本,整理了一下Servlet技术模型.servlet容器模型.jsp技术模型中的类与接口,有助于理解web应用中的页面跳转和参数传递,目录: HttpServlet 可作Scope ...

  3. 参数转对象 类似 ?camera=1&travel=0&faceScore=1

    parseQueryString(url) { var obj = {}; var keyvalue = []; var key = "", value = "" ...

  4. 【转】Oracle基础结构认知—oracle物理结构 礼记八目 2017-12-13 20:31:06

    原文地址:https://www.toutiao.com/i6499008214980362765/ oracle数据库启动:oracle服务启动,通过参数文件查找控制文件,启动控制文件,则控制文件调 ...

  5. javaee字节流文件复制

    package Zy; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.Fil ...

  6. 路飞学城Python-Day80

    36-模板语法之继承 Django模版引擎中最强大也是最复杂的部分就是模版继承了.模版继承可以让您创建一个基本的“骨架”模版,它包含您站点中的全部元素,并且可以定义能够被子模版覆盖的 blocks . ...

  7. ubuntu16.04下安装配置nodejs及npm

    官网下载ubuntu对应的二进制文件(Linux Binaries (x64)这一行) https://nodejs.org/en/download/ 解压并安装 ``` $tar zxvf node ...

  8. fork() 函数解析

    转载自http://blog.csdn.net/jason314/article/details/5640969  一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通 ...

  9. [TJOI2008]彩灯

    线性基裸题,求最大线性无关组. 注意:1ll<<i #include <cstdio> int n,m; const int mod=2008; long long b[64] ...

  10. python装饰器实现登陆验证

    一: 定义有参数的装饰器 其中 CheckFileByName 是进行验证的过程 二: 登陆方法 三: 实现装饰调用