教你 5 分钟内为 iOS 应用实现 Face ID 和 Touch ID 登录
这里每天分享一个 iOS 的新知识,快来关注我吧
前言
Face ID 和 Touch ID 目前已经被 iOS 应用广泛应用了,是 iOS 中最常用的登录方式,能够让 iOS 和 macOS 应用能够实现无缝登录和用户身份验证。
你是否也想为自己的 App 实现 Face ID 和 Touch ID 的功能呢?
今天就来讲一讲如何使用 Local Authentication
框架来实现 Face ID 和 Touch ID 登录。
Local Authentication 框架
Local Authentication
框架为希望使用 Face ID 和 Touch ID 的 iOS 和 macOS 应用提供了支持。
今天主要是用的就是这个框架,要想使用它,首先需要导入 LocalAuthentication
框架:
import LocalAuthentication
LAContext
LAContext
是用于与 Face ID 和 Touch ID 进行交互的对象。
我们先创建一个 LAContext
上下文,初始化器不需要任何参数:
// 创建一个 LAContext
var context = LAContext()
然后你可以使用 localizedCancelTitle
来定制取消按钮的标题。
// 设置取消按钮的标题
context.localizedCancelTitle = "取消"
biometryType
这个枚举代表设备的生物识别类型,提供了用户设备上可用的身份验证机制信息。设备上主要有以下三种选项:
-
LABiometryType.none
: 表示没有可用的生物识别身份验证 -
LABiometryType.touchID
: 表示设备支持 Touch ID -
LABiometryType.faceID
: 表示设备支持 Face ID
从 iOS 17 开始,LABiometryType
枚举中新增了 LABiometryType.opticID
选项,虹膜识别身份验证,目前主要是用在 Apple Vision Pro 上。
// 获取支持的生物识别类型
var biometry = context.biometryType
LAError
Local Authentication
实现了一个描述性错误的类 LAError
,可以提供有关身份验证期间可能发生的错误信息。
我们先来看看都有哪些错误类型:
// 如果错误是 LAError 的实例
var code = LAError.Code(rawValue: error.code)
switch code {
case LAError.Code.appCancel:
// 应用通过使 LAContext 无效取消了身份验证
case LAError.Code.authenticationFailed:
// 用户未提供有效凭证
case LAError.Code.invalidContext:
// LAContext 无效
case LAError.Code.notInteractive:
// 不允许交互,因此身份验证失败
case LAError.Code.passcodeNotSet:
// 用户未在此设备上设置密码
case LAError.Code.systemCancel:
// 系统取消了身份验证,例如显示另一个应用
case LAError.Code.userCancel:
// 用户取消了身份验证对话框
case LAError.Code.userFallback:
// 用户选择使用备用身份验证方法
case LAError.Code.biometryLockout:
// 失败的尝试次数过多,锁定了生物识别身份验证
case LAError.Code.biometryNotAvailable:
// 用户设备不支持生物识别身份验证
case LAError.Code.biometryNotEnrolled:
// 用户未配置生物识别身份验证
@unknown default:
// 发生了其他错误
}
检查 Face ID 权限
NSFaceIDUsageDescription
为了使用 Face ID,必须在 iOS 或 macOS 应用的 Info.plist
文件中添加一个使用描述。
key 是 NSFaceIDUsageDescription
,值应该是一个字符串,解释为什么应用需要使用生物识别身份验证,会在用户首次使用此功能时显示。
如果不做这一步,系统将不允许你的应用使用 Face ID,当你调用相关方法的时候会直接弹出输入开机密码页面来代替。
LAContext.canEvaluatePolicy
canEvaluatePolicy(_:error:)
方法可以用于确定应用是否具有使用生物识别身份验证所需的权限:
var error: NSError?
// 检查生物识别身份验证权限
var permissions = context.canEvaluatePolicy(
.deviceOwnerAuthentication,
error: &error
)
if permissions {
// 有权限,继续进行身份验证
} else {
// 处理权限被拒绝或错误
}
.deviceOwnerAuthentication
使用 .deviceOwnerAuthentication
开始进行身份验证,允许使用生物识别或设备密码。
Local Authentication 框架将首先尝试使用已配置和启用的生物识别(如 Touch ID 和 Face ID)进行身份验证。
.deviceOwnerAuthenticationWithBiometrics
使用 .deviceOwnerAuthenticationWithBiometrics
要求用户使用生物识别进行身份验证。如果设备不支持生物识别、用户未配置生物识别,或者用户未提供有效的生物识别,则身份验证将失败。
使用 Face ID 的示例代码
使用 evaluatePolicy(_:localizedReason:reply:)
在支持 Face ID 并配置了 Face ID 的设备上显示 Face ID 身份验证弹出窗口:
let reason = "使用 Face ID 登录"
context.evaluatePolicy(
.deviceOwnerAuthentication,
localizedReason: reason
) { success, error in
if success {
// 处理成功的身份验证
} else {
// 处理 LAError 错误
}
}
使用 Touch ID 的示例代码
相同的方法:
let reason = "使用 Touch ID 登录"
context.evaluatePolicy(
.deviceOwnerAuthentication,
localizedReason: reason
) { success, error in
if success {
// 处理成功的身份验证
} else {
// 处理 LAError 错误
}
}
结论
通过使用 LocalAuthentication
框架,你可以在 Swift 中很轻易的实现 Face ID 和 Touch ID 来进行用户身份验证。
希望本文对你有所帮助,让你能够在自己的 iOS 和 macOS 应用中实现更安全、便捷的登录方式。
这里每天分享一个 iOS 的新知识,快来关注我吧
本文同步自微信公众号 “iOS新知”,每天准时分享一个新知识,这里只是同步,想要及时学到就来关注我吧!