iOS Touch ID 身份认证
发布时间 - 2026-01-10 23:04:45 点击率:次iOS Touch ID 身份认证

iOS 8 及以后录了指纹的设备可以使用 touch ID 进行身份认证,指纹符合录入的指纹才能认证成功。
步骤
- 导入 LocalAuthentication 框架:import LocalAuthentication
- 初始化 LAContext 对象:let context = LAContext()
- 调用 LAContext 对象的 canEvaluatePolicy(_ policy: LAPolicy, error: NSErrorPointer) -> Bool方法
- 上一步如果返回 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 】
相关推荐:
米侠浏览器网页背景异常怎么办 米侠显示修复
nginx修改上传文件大小限制的方法
javascript读取文本节点方法小结
JavaScript Ajax实现异步通信
如何生成腾讯云建站专用兑换码?
python中快速进行多个字符替换的方法小结
Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑
Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】
免费网站制作appp,免费制作app哪个平台好?
个人摄影网站制作流程,摄影爱好者都去什么网站?
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
网站建设要注意的标准 促进网站用户好感度!
如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体
如何用已有域名快速搭建网站?
消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工
如何在万网开始建站?分步指南解析
Laravel怎么做数据加密_Laravel内置Crypt门面的加密与解密功能
Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】
如何快速生成凡客建站的专业级图册?
Laravel如何实现数据导出到CSV文件_Laravel原生流式输出大数据量CSV【方案】
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
Laravel事件监听器怎么写_Laravel Event和Listener使用教程
Laravel怎么上传文件_Laravel图片上传及存储配置
如何撰写建站申请书?关键要点有哪些?
Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID
INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】
laravel怎么配置Redis作为缓存驱动_laravel Redis缓存配置教程
太平洋网站制作公司,网络用语太平洋是什么意思?
高端智能建站公司优选:品牌定制与SEO优化一站式服务
Laravel如何构建RESTful API_Laravel标准化API接口开发指南
Laravel如何配置Horizon来管理队列?(安装和使用)
如何快速搭建高效香港服务器网站?
Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能
Laravel如何使用.env文件管理环境变量?(最佳实践)
JavaScript数据类型有哪些_如何准确判断一个变量的类型
哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?
如何在景安云服务器上绑定域名并配置虚拟主机?
如何用腾讯建站主机快速创建免费网站?
Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理
Firefox Developer Edition开发者版本入口
谷歌Google入口永久地址_Google搜索引擎官网首页永久入口
如何利用DOS批处理实现定时关机操作详解
韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制
长沙做网站要多少钱,长沙国安网络怎么样?
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
实例解析Array和String方法
英语简历制作免费网站推荐,如何将简历翻译成英文?
lovemo网页版地址 lovemo官网手机登录

