教你 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新知”,每天准时分享一个新知识,这里只是同步,想要及时学到就来关注我吧!

注册登录 后评论
    // 作者
    iOS新知 发布于 掘金
    • 0
    // 本帖子
    分类
    // 相关帖子
    Coming soon...
    • 0
    教你 5 分钟内为 iOS 应用实现 Face ID 和 Touch ID 登录iOS新知 发布于 掘金