从2013年的iPhone 5s开始苹果就引入了Touch ID,之后Touch ID基本上成了苹果设备的标配,iOS 8起,开发者就可以调用API在自己的应用中添加Touch ID验证功能了,国内常见的第三方应用比如支付宝,也逐渐引入了对Touch ID的支持。
接下来我将讲一下怎样在自己的应用中添加对Touch ID的支持。
一、导入LocalAuthentication.framework
Touch ID是基于LocalAuthentication.framework这个框架的,但我们新建的工程里默认是没有导入这个框架,所以需要我们手工导入,直接上图
光导入了还没有结束,我们还需要在自己的文件上面import,就像import UIKit一样
import LocalAuthentication

但是我们还要注意一点,有的设备是不支持Touch ID的,比如iPhone 5s之前的设备和前几代iPad,所以我们需要通过这个函数来验证一下当前设备是否支持Touch ID

canEvaluatePolicy(_:error:)
下面这个是完成Touch ID验证功能的示例代码,可以在你LoginViewController里面修改后调用,具体功能的解释都在注释里面了,非常简单
    func authenticateWithTouchID() {//获得引入的LocalAuthentication框架的Contextlet localAuthContext = LAContext()let reasonText = "Authentication is required to sign in AppCoda"var authError: NSError?if !localAuthContext.canEvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, error: &authError) {// 代码执行到这里说明当前设备不支持Touch IDreturn}// 进行Touch ID验证localAuthContext.evaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, localizedReason: reasonText, reply: { (success: Bool, error: NSError?) -> Void inif success {// 处理成功的情况,这段示例代码里面采用异步完成页面跳转NSOperationQueue.mainQueue().addOperationWithBlock({self.performSegueWithIdentifier("showHomeScreen", sender: nil)})} else {// 显示各种错误提示switch error!.code {case LAError.AuthenticationFailed.rawValue:print("Authentication failed")case LAError.PasscodeNotSet.rawValue:print("Passcode not set")case LAError.SystemCancel.rawValue:print("Authentication was canceled by system")case LAError.UserCancel.rawValue:print("Authentication was canceled by the user")case LAError.TouchIDNotEnrolled.rawValue:print("Authentication could not start because Touch ID has no enrolled fingers.")case LAError.TouchIDNotAvailable.rawValue:print("Authentication could not start because Touch ID is not available.")case LAError.UserFallback.rawValue:print("User tapped the fallback button (Enter Password).")default:print(error!.localizedDescription)}// 如果最后没有成功通过Touch ID验证,则调用另外的函数来进行密码验证,下面的代码实现了异步弹出手工输入密码的自定义对话框NSOperationQueue.mainQueue().addOperationWithBlock({self.showLoginDialog()})}})}

iOS开发中Touch ID的使用相关推荐

  1. 在IOS开发中根据(id)sender获取UIButton的信息

    -(IBAction) buttonClick:(id)sender   //sender参数,表示接受哪个按钮消息 { UIButton *button = (UIButton *)sender;  ...

  2. iOS开发中经常用的实用代码合集

    iOS开发中经常用的实用代码合集 本文整理了,在iOS开发中我们所遇到一些开发问题的技巧类的代码,让你在开发过程中避免了很多弯路,希望能给你的开发带来帮助和启发. 1.判断邮箱格式是否正确的代码: / ...

  3. iOS开发中常用的方法

    iOS开发中常用的方法 系统弹窗: 过期方法: UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"确认报价" ...

  4. iOS开发中的Web应用概述

    为了更好的阅读体验,建议阅读原文 插播广告 -- 几十行代码完成资讯类App多种形式内容页 HybridPageKit :一个针对资讯类App高性能.易扩展.组件化的通用内容页实现框架. 想和我一起全 ...

  5. iOS开发中遇到的一些问题及解决方案【转载】

    iOS开发中遇到的一些问题及解决方案[转载] 2015-12-29 [385][scrollView不接受点击事件,是因为事件传递失败] // //  MyScrollView.m //  Creat ...

  6. iOS 开发中的多线程

    线程.进程 什么是线程.进程   有的人说进程就像是人的脑袋,线程就是脑袋上的头发~~.其实这么比方不算错,但是更简单的来说,用迅雷下载文件,迅雷这个程序就是一个进程,下载的文件就是一个线程,同时下载 ...

  7. iOS开发中使用[[UIApplication sharedApplication] openURL:]加载其它应用

    iOS 应用程序之间(1) 在iOS开发中,经常需要调用其它App,如拨打电话.发送邮件等.UIApplication:openURL:方法是实现这一目的的最简单方法,该方法一般通过提供的url参数的 ...

  8. iOS开发中各种关键字的区别

    1.一些概念 1.浅Copy:指针的复制,只是多了一个指向这块内存的指针,共用一块内存. 深Copy:内存的复制,两块内存是完全不同的, 也就是两个对象指针分别指向不同的内存,互不干涉. 2.atom ...

  9. ios开发中计算代码运算时间_iOS日历、日期、时间的计算

    时间和日历的计算在iOS开发中经常看到,经常看到大家在百度,开源中国等搜索这些答案.今天写个简单的时间和日历有关的计算. 获取一个月的总天数 1.获取当月的天数 - (NSInteger)getNum ...

最新文章

  1. 对DeDecms之index.php页面的补充
  2. oracle数据库解锁表
  3. Spring+Mybatis+MySql+Maven 简单的事务管理案例
  4. exchange服务器磁盘性能,如何解决Exchange磁盘空间问题
  5. ADO,ADO.NET,OLEDB,ODBC连接数据库的区别
  6. python写机器人插件_从Python写入机器人框架控制台
  7. 电脑模拟收银机_模拟超市的收银系统
  8. swagger2 注解说明
  9. 使用阿里云国际版创建外贸网站,需要注意什么?-Unirech
  10. getlasterror 126
  11. 【翻译】设备管理器—英特尔网卡属性设置高级选项的功能
  12. iphone有关QQ和微信无法收到推送通知的终极解决方案
  13. Evaluate之迷思
  14. APP开发-第三方SDK使用
  15. SPSS MODELER笔记1----数据基本处理和整体方法概念
  16. 顺时针打印矩阵(编程题讲解)
  17. 【模电实验】基尔霍夫定律、叠加定理和戴维南定理验证实验
  18. 嵌入式工程师月薪最高排行榜
  19. 急!求各位学长大佬拯救!!
  20. c#使用wpd读取便携式设备信息二

热门文章

  1. VC++6.0安装、编译NTL类库
  2. Windows下软件提示“没有注册类”问题解决
  3. 信息系统项目管理师必背整体核心考点
  4. 扫盲serverless
  5. 从0开始强化学习——强化学习的简介和分类
  6. Wasserstein距离 和 Lipschitz连续
  7. 增量式编码器与绝对值编码器的区别
  8. 为什么爱因斯坦反对《自然辨证法》
  9. MAXIMO部分AppBean类操作经验
  10. 【leetcode】字符串(KMP、滑动窗口)