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. king枚举帮助类

    可以方便的实现枚举 枚举 public enum DeptType { [Description("科室1")] Professional = , [Description(&qu ...

  2. RedHat/centOS 部分字符处理

    sed -i '/^$/d' filename #删除空行sed -i '/tablename/d' filename #删除含有匹配字符串的行sed -i '/_c1/d' filename #删除 ...

  3. mysql Seconds_Behind_Master

    通过show slave status查看到的Seconds_Behind_Master,从字面上来看,他是slave落后master的秒数,一般情况下,也确实这样,通过Seconds_Behind_ ...

  4. DeepMind用ReinforcementLearning玩游戏

    原文 :  http://dataunion.org/?p=639 1.引言 说到机器学习最酷的分支,非Deep learning和Reinforcement learning莫属(以下分别简称DL和 ...

  5. 杭电2054 WA

    #include<stdio.h> #include<string.h> ],b[]; int main() { ,len2=,i; ; scanf("%s" ...

  6. 图表库 - Highchart / Echart

    当前主要使用HighChart和Echart图表库,都基于Jquery,需要先引用Jquery. 实际问题:引入Jquery需在图表库前,否则报错. HighChart官网:https://www.h ...

  7. jq图片懒加载

    jQuery图片延迟加载插件jQuery.lazyload,使用延迟加载在可提高网页下载速度.在某些情况下,它也能帮助减轻服务器负载. 使用方法 引用jquery和jquery.lazyload.js ...

  8. Laravel 查询某天数据 whereDate

  9. 解决phpstudy mysql 启动不了的问题

    1.端口监测 查看3306 的端口是否被占用,如占用,停止进程 2.服务没有启动.因为学习python 我把phpstudy的mysql升级到了mysql8.0. sc delete mysql  删 ...

  10. jquery.lazyload滚动不起作用

    昨天同事在开发图片懒加载功能时用到了lazyload,使用相当标准,然而结果却不如人意,在滚动时未能起作用.引用https://cdn.bootcss.com/jquery_lazyload/1.9. ...