• 如何使用Local Authentication框架实现Face ID和Touch ID登录
  • 发布于 1个月前
  • 57 热度
    0 评论
前言
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)
// 堆代码 duidaima.com
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?
// 堆代码 duidaima.com
// 检查生物识别身份验证权限
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 应用中实现更安全、便捷的登录方式。

用户评论