iOS Touch ID 身份认证

发布时间 - 2026-01-10 23:04:45    点击率:

iOS Touch ID 身份认证

iOS 8 及以后录了指纹的设备可以使用 touch ID 进行身份认证,指纹符合录入的指纹才能认证成功。

步骤

  1. 导入 LocalAuthentication 框架:import LocalAuthentication
  2. 初始化 LAContext 对象:let context = LAContext()
  3. 调用 LAContext 对象的 canEvaluatePolicy(_ policy: LAPolicy, error: NSErrorPointer) -> Bool方法
  4. 上一步如果返回 false,表示不能进行认证,执行相应的失败操作;如果返回 true,调用 LAContext 对象的evaluatePolicy(_ policy: LAPolicy, localizedReason: String, reply: @escaping (Bool, Error?) -> Void)方法,在 reply 中判断是否认证成功来执行相应的操作(如果认证失败,可以获取错误码 code,看看属于 LAError.Code 的哪种类型错误来执行相应的失败操作)

调用 LAContext 对象的 canEvaluatePolicy 和 evaluatePolicy 方法都要传入 LAPolicy 枚举类型的值,目前有两种取值:deviceOwnerAuthenticationWithBiometrics 和 deviceOwnerAuthentication。前一种 deviceOwnerAuthenticationWithBiometrics 是进行指纹认证。后一种 deviceOwnerAuthentication 是 iOS 9.0 及以后才能使用,先进行指纹认证,如果指纹认证失败可以通过输入密码进行认证。

调用 LAContext 对象的 evaluatePolicy 方法会弹出指纹认证对话框。对话框会显示需要进行认证的原因(String),就是 localizedReason 参数的值。对话框有取消按钮,iOS 10.0 及以后可以设置 LAContext 对象的 localizedCancelTitle 的值来改变取消按钮显示的字。如果指纹认证失败,对话框还会显示 fallback 按钮,可以设置 LAContext 对象的 localizedFallbackTitle 的值来改变 fallback 按钮显示的字。

需要注意,evaluatePolicy 方法的 reply 回调不在主线程。如果需要更新 UI 的话,要调用主线程再更新。

代码示例

代码已上传GitHub:https://github.com/Silence-GitHub/TouchIDDemo

在控制器中放置一个 label 显示认证返回结果。

指纹认证代码

let context = LAContext()
context.localizedFallbackTitle = "Fall back button"
if #available(iOS 10.0, *) {
 context.localizedCancelTitle = "Cancel button"
}
var authError: NSError?
if context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &authError) {
 context.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: "Localized reason for authentication with biometrics", reply: { (success, evaluateError) in
 // NOT in main thread
 DispatchQueue.main.async {
 if success {
 self.label.text = "Success"
 // Do something success
 } else if let error = evaluateError {
 self.label.text = error.localizedDescription
 // Deal with error
 if let code = LAError.Code(rawValue: (error as NSError).code) {
  switch code {
  case .userFallback:
  print("fall back button clicked")
  default:
  break
  }
 }
 }
 } 
 })
} else if let error = authError {
 label.text = error.localizedDescription
 // Deal with error
}

指纹和密码认证代码

if #available(iOS 9.0, *) {
 let context = LAContext()
 context.localizedFallbackTitle = "Fall back button"
 if #available(iOS 10.0, *) {
 context.localizedCancelTitle = "Cancel button"
 }
 var authError: NSError?
 if context.canEvaluatePolicy(.deviceOwnerAuthentication, error: &authError) {
 context.evaluatePolicy(.deviceOwnerAuthentication, localizedReason: "Localized reason for authentication", reply: { (success, evaluateError) in
 // NOT in main thread
 DispatchQueue.main.async {
 if success {
  self.label.text = "Success"
  // Do something success
 } else if let error = evaluateError {
  self.label.text = error.localizedDescription
  // When fall back button clicked, user is required to enter PIN. Error code will not be "userFallback"
  // Deal with error
 }
 }
 })
 } else if let error = authError {
 label.text = error.localizedDescription 
 // Deal with error
 }
} else {
 let alert = UIAlertController(title: nil, message: "Authentication is available on iOS 9.0 or later", preferredStyle: .alert)
 alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
 present(alert, animated: true, completion: nil)
}

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!


# iOS  # Touch  # ID  # iOS 中使用正则表达式判断身份证格式及银行卡号格式是否正确(推荐)  # IOS开发之由身份证号码提取性别的实现代码  # iOS身份证号码识别示例  # IOS 身份证校验详细介绍及示例代码  # iOS正则表达式验证手机号、邮箱、身份证号等  # IOS身份证识别(OCR源码)详解及实例代码  # iOS判断身份证号码是否正确的方法  # Objective-C实现身份证验证的方法示例  # 对话框  # 身份认证  # 都要  # 还会  # 可以通过  # 弹出  # 可以使用  # 有两种  # 需要注意  # 回调  # 输入密码  # 判断是否  # 法会  # 上一步  # 器中  # 上传  # 哪种类型  # 错误码  # ff  # span 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: EditPlus中的正则表达式 实战(2)  简历没回改:利用AI润色让你的文字更专业  node.js报错:Cannot find module 'ejs'的解决办法  Laravel如何使用Livewire构建动态组件?(入门代码)  如何快速打造个性化非模板自助建站?  香港服务器网站卡顿?如何解决网络延迟与负载问题?  如何在七牛云存储上搭建网站并设置自定义域名?  C#如何调用原生C++ COM对象详解  如何使用 jQuery 正确渲染 Instagram 风格的标签列表  如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)  如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】  如何快速搭建自助建站会员专属系统?  Laravel如何处理CORS跨域请求?(配置示例)  使用PHP下载CSS文件中的所有图片【几行代码即可实现】  如何在服务器上三步完成建站并提升流量?  Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】  ChatGPT 4.0官网入口地址 ChatGPT在线体验官网  Android中AutoCompleteTextView自动提示  ,在苏州找工作,上哪个网站比较好?  Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程  长沙做网站要多少钱,长沙国安网络怎么样?  公司网站制作价格怎么算,公司办个官网需要多少钱?  如何彻底删除建站之星生成的Banner?  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  如何在IIS中新建站点并配置端口与物理路径?  如何破解联通资金短缺导致的基站建设难题?  如何在IIS管理器中快速创建并配置网站?  如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)  详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点  Swift中循环语句中的转移语句 break 和 continue  详解MySQL数据库的安装与密码配置  想要更高端的建设网站,这些原则一定要坚持!  Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知  Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】  edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】  如何在云服务器上快速搭建个人网站?  Laravel控制器是什么_Laravel MVC架构中Controller的作用与实践  Laravel如何实现API速率限制?(Rate Limiting教程)  如何用PHP快速搭建CMS系统?  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用  如何用y主机助手快速搭建网站?  Android滚轮选择时间控件使用详解  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  Linux安全能力提升路径_长期防护思维说明【指导】  使用spring连接及操作mongodb3.0实例  如何确保FTP站点访问权限与数据传输安全?