系统: Mac OS 10.15.2, XCode 11.3,swift 5.0
写作时间:2020-01-13

说明

TouchId指纹识别,FaceId面部解锁,统称为生物识别。

实现

  1. 引入Local Authentication Framework,如果是iOS 13,默认就有,不用重新引入。
    引入头文件 import LocalAuthentication
  2. 检查生物识别是否可用
let context = LAContext()var error: NSError?if context.canEvaluatePolicy(LAPolicy.deviceOwnerAuthenticationWithBiometrics, error: &error) {// Biometry is available on the device
} else {// Biometry is not available on the device// No hardware support or user has not set up biometric auth
}

上面是验证生物识别是否可用,如果不可用。
错误的原因如下:

  • LAError.biometryNotEnrolled - 用户没有注册生物识别信息(没有录入指纹,或者录入面部识别信息).
  • LAError.passcodeNotSet - 用户没有设置密码.
  • LAError.biometryNotAvailable - 该设备硬件不支持生物识别.
  1. 如果可用,则可以校验用户信息。
func notifyUser(_ msg: String, err: String?)  {print("msg > \(msg)")print("err > \(err)")}func authorizeBiometrics(_ context: LAContext) {// Device can use biometric authenticationcontext.evaluatePolicy(LAPolicy.deviceOwnerAuthenticationWithBiometrics, localizedReason: "Access requires authentication") { (success, error) inif let err = error {switch err._code {case LAError.Code.systemCancel.rawValue:self.notifyUser("Session cancelled", err: err.localizedDescription)case LAError.Code.userCancel.rawValue:self.notifyUser("Please try again", err: err.localizedDescription)case LAError.Code.userFallback.rawValue:self.notifyUser("Authentication", err: "Password option selected")// Custom Code to obtain password heredefault:self.notifyUser("Authentication failed", err: error?.localizedDescription)}} else {//                    self.notifyUser("Authentication Successful", err: "You now have full access")if (context.biometryType == LABiometryType.faceID) {// Device support Face IDself.notifyUser("Authentication Successful", err: "Device support Face ID")} else if context.biometryType == LABiometryType.touchID {// Device supports Touch IDself.notifyUser("Authentication Successful", err: "Device supports Touch ID")} else {// Device has no biometric supportself.notifyUser("Authentication Successful", err: "Device has no biometric support")}}}}

校验成功则打印信息:

  • LABiometryType.faceID 面部识别成功
  • LABiometryType.touchID 指纹识别成功
  • 其它就是硬件不支持。

检验识别错误,标识为error不为空

  • LAError.systemCancel - 授权过程当中被系统取消。特别容易发生在,App推到后台background.
  • LAError.userCancel - 授权被用户取消.
  • LAError.userFallback - 用户选择用密码,而不是用Touch ID或者Face ID.

代码下载

笔者用SwiftUI实现,下载地址:
https://github.com/zgpeace/iOSBiometrics.git

运行代码

1. 如果没有启用Touch ID或者Face ID信息,则打印信息如下。

Biometry is not available on the device
No hardware support to user has not set up biometric auth
msg > User is not enrolled
err > Optional(“No identities are enrolled.”)

2. 模拟器也可以开启FaceID 或者 Touch ID。 Simulator > Hardware > Face ID / Touch ID > Enrolled.

3. 运行报错信息如下:

Biometry is available on the device
2020-01-13 17:54:00.881269+0800 Biometrics[36054:652894] [access] This app has crashed because it attempted to access privacy-sensitive data without a usage description. The app’s Info.plist must contain an NSFaceIDUsageDescription key with a string value explaining to the user how the app uses this data.

4. 需要在target > Info > Custom iOS Target Priorities > 添加Key Value

key :
Privacy - Face ID Usage Description
value:
This app uses Face ID to confirm your identity


5. 第一次打开的时候会弹出确认框

6. 点击OK后就弹出,验证Face ID的界面

7. 点击确认 Simulator > Hardware > Face ID/ Touch ID > Matching Face

8. 控制台打印结果如下:

Biometry is available on the device
msg > Authentication Successful
err > Optional("Device support Face ID")

9.Touch ID指纹验证错误出现的界面
一样的代码,指纹验证错误小于5次的页面

超过5次,指纹会被锁住LAError.Code.biometryLockout.rawValue, 错误信息为Biometry is locked out, 弹出密码解锁页面

参考

https://www.techotopia.com/index.php/Implementing_TouchID_Authentication_in_iOS_8_Apps

https://stackoverflow.com/questions/34185081/touch-id-how-to-get-to-the-passcode-screen-swift

Swift TouchId指纹解锁,FaceId面部解锁相关推荐

  1. 华为手机无法录入面部_OPPOfindX无法录入面部解锁,需要怎么弄

    OPPO面部识别无法删除已录入面部,怎么办? 进入手机[设置]--[指纹面部与密码]--[面部]--输入锁屏密码解锁--进入以后,点击[删除已录入面部]即可. oppofindx解锁方式 录入面部特征 ...

  2. 苹果用计算机解锁锁屏密码,我忘记了Apple解锁密码. 如何解锁锁屏密码?阅读了很长的知识...

    我忘记了Apple解锁密码. 如何解锁锁屏密码?阅读了很长的知识 每个人都很困惑,就像外出忘记带钥匙,忘记用钥匙锁门. 如今,智能手机的发展越来越先进. 指纹解锁和面部解锁为人们的生活提供了更多便利, ...

  3. TouchID 指纹解锁

    概述 TouchID 指纹解锁 详细 代码下载:http://www.demodashi.com/demo/10701.html 一.软硬件支持 指纹验证功能的最低硬件支持为iPhone5s, iPa ...

  4. iOS开发实现TouchID指纹解锁

    iOS开发实现TouchID指纹解锁 一直想实现一下指纹解锁,苦于一直没时间,最近终于闲了下来所以翻了翻文档看了看demo,完成了这篇教程.本功能实现起来是很简单的,因为苹果都已经帮我们封装好了,只需 ...

  5. android 结构光,Android Q有望原生支持3D结构光技术,面部解锁更安全

    如果你已经使用了多年的智能手机,那应该对面部解锁并不陌生.早在Android 4.0系统的时候,谷歌就加入了面部解锁功能,因此面部解锁是比指纹解锁更早出现的生物识别技术.但是碍于技术问题,当时的面部解 ...

  6. iOS指纹解锁和手势解锁

    前言 一直想写博客来着,一来可以记录一些自己学习和研究的东西,二来也可以将自己写的一些东西分享出去,给他人参考,还可能收到他人的一些建议,从而完善自己的项目和提升自己的技术,这也是一种很好的技术交流方 ...

  7. HTC获得面部解锁专利

    消息称HTC已经获得了面部解锁这一专利,但有意思的的,我们第一次接触这一功能并不是在HTC手机上,而是在Galaxy Nexus上.面部解锁是Android 4.0上的一个重要功 能,只要手机是And ...

  8. 开启android人脸解锁,vivos1pro如何开启人脸面部解锁?

    想必大家会有一个问题,vivoS1pro怎么设置人脸解锁?时尚的潮流滚滚向前,指纹解锁现在已经不是最时尚的了!时尚的我们已经开始人脸解锁了,特此为大家带来vivoS1pro怎么人脸解锁具体方法教程,感 ...

  9. pixel 解锁_如何在Google Pixel 4和Pixel 4 XL上禁用面部解锁

    pixel 解锁 Justin Duino 贾斯汀·杜伊诺(Justin Duino) Face Unlock is one of the Google Pixel 4 and Pixel 4 XL' ...

  10. IPAD移动端交互原型通用设计方案、ipad元件库、移动元件库、元件列表、设计元件、交互示例、界面模板、设备模板、手势图标、社交界面、音乐、电商、视图控制器、指示器、指纹解锁、手势解锁、rp元件库

    IPAD移动端交互原型通用设计方案.ipad元件库.移动元件库.元件列表.设计元件.交互示例.界面模板.设备模板.手势图标.社交界面.音乐.电商.视图控制器.指示器.指纹解锁.手势解锁.rp元件库.平 ...

最新文章

  1. ubuntu安装迅雷软件
  2. php global变量无效
  3. boost::python::long_相关的测试程序
  4. linux中apache配置文件在哪,linux网站服务Apache的安装与配置方法详解
  5. 算法分析:Oracle 11g 中基于哈希算法对唯一值数(NDV)的估算
  6. 【英语学习】【Level 08】U04 What I love L2 My favorite sport
  7. D3 selectselectAll
  8. 【报告分享】2020新零售直播活力报告.pdf(附下载链接)
  9. beforeunload中阻止提示关闭_React 系统中,在离开编辑页面前做提示
  10. 利用OpenCV将图片反色
  11. TQ2440开发板移植UBOOT-2010.06总结(2)
  12. 手机怎么用外嵌字幕_剪映教程大全:剪映加字幕、设置封面、变速等教程详解!...
  13. 查询与退订中国移动短信服务
  14. RPA智能客服机器人,电商的好伙伴
  15. ZooKeeper报错:Unable to access datadir, exiting abnormally windows版本
  16. 如何制作点餐小程序?
  17. 12个球,其中有1个坏球和其他11个重量不一样,给你一个天平,称3次,找出不一样的那个
  18. MMDetection 快速开始,训练自定义数据集
  19. 取得股票市值和所属行业
  20. 面向智能机器人的通讯安全机制研究与改进

热门文章

  1. python人脸识别程序如何嵌入到app_开源|手把手教你用Python进行人脸识别(附源代码)...
  2. oracle左裁剪原理,ORACLE 各种PARTITION 的分析(原)
  3. 使用 Fiddler 分析网页加载过程
  4. 【Zookeeper系列】Zookeeper命令操作(转)
  5. Linux中命令行终端切换工具screen
  6. 键盘视频鼠标(KVM)切换器基础知识
  7. Strtus2入门简单框架搭建
  8. Irrlicht引擎例子说明及中文链接
  9. 查找存储过程中的错误位置
  10. 杭电oj-----Nightmare(BFS)