iOS FaceID和TouchID生物认证详解

1. 在 iOS 应用程序中使用 Face ID:

Privacy - Face ID Usage Description
我们的应用程序需要访问您的面部识别数据,以便您可以通过 Face ID 进行快速而安全的身份验证。

2. 详细介绍 LAContext 使用方法

LAContext 类是 Local Authentication 框架中的核心类,用于执行生物识别认证和密码认证。下面我将详细介绍 LAContext 的使用方法,并注解其属性和方法。

  1. 创建 LAContext 对象:
// 创建一个 LAContext 实例,用于执行身份验证操作。
let context = LAContext()
  1. 检查设备是否支持生物识别认证:
// 参数 policy:要评估的策略,可以是 .deviceOwnerAuthenticationWithBiometrics(生物识别认证)或 .deviceOwnerAuthentication(密码认证)。
// 参数 error:一个 NSError 指针,用于在发生错误时返回错误信息。
// 返回值:如果设备支持指定的身份验证策略,则返回 true;否则返回 false。
func canEvaluatePolicy(_ policy: LAPolicy, error: NSErrorPointer) -> Bool

  1. 执行身份验证:
// 参数 policy:要评估的策略,可以是 .deviceOwnerAuthenticationWithBiometrics(生物识别认证)或 .deviceOwnerAuthentication(密码认证)。
// 参数 localizedReason:一个本地化的字符串,用于向用户解释为什么需要进行身份验证。
// 参数 reply:一个闭包,包含了身份验证的结果。该闭包接收两个参数,第一个参数表示身份验证是否成功,第二个参数是一个 Error 对象,表示身份验证过程中发生的错误(如果有)。
func evaluatePolicy(_ policy: LAPolicy, localizedReason: String, reply: @escaping (Bool, Error?) -> Void)

  1. 设置最大生物识别失败重试次数:
// 此属性用于设置在一系列连续的生物识别失败后,系统将执行的额外操作次数。默认值为 5 次,当生物识别失败超过此次数时,系统将弹出密码验证界面。
var maxBiometryFailures: Int { get set }

  1. 取消身份验证操作:
// 取消当前 LAContext 对象的所有身份验证操作,释放相关资源。
func invalidate()

  1. 检索生物识别类型:

// 只读属性,返回当前设备支持的生物识别类型。可能的值有 .none(不支持生物识别)、.touchID(支持 Touch ID)和 .faceID(支持 Face ID)。
var biometryType: LABiometryType { get }

  1. 验证用户身份:
// 使用安全访问控制对象执行身份验证。这种方法允许您自定义身份验证过程,并将其与更复杂的安全场景集成。
func evaluateAccessControl(_ accessControl: SecAccessControl, operation: LAAccessControlOperation, localizedReason: String, reply: @escaping (Bool, Error?) -> Void)

  1. 设置取消按钮标题:
// 用于设置身份验证提示框中的取消按钮的标题。默认情况下,取消按钮标题为“取消”。
var localizedCancelTitle: String?

  1. 设置 fallback 按钮标题:
// 用于设置身份验证提示框中的 fallback(备用)按钮的标题。默认情况下,fallback 按钮标题为“输入密码”。

var localizedFallbackTitle: String?

3. Demo


import UIKit
import LocalAuthentication

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }

    @IBAction func authenticateWithFaceID(_ sender: UIButton) {
        let context = LAContext()

        var error: NSError?

        // 判断设备是否支持 Face ID
        if context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &error) {
            let reason = "通过 Face ID 进行身份验证"
            context.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: reason) {
                [weak self] success, authenticationError in

                DispatchQueue.main.async {
                    if success {
                        // 用户已通过 Face ID 身份验证
                        self?.showAlert(title: "身份验证成功", message: nil)
                    } else {
                        // Face ID 身份验证失败
                        self?.showAlert(title: "身份验证失败", message: authenticationError?.localizedDescription)
                    }
                }
            }
        } else {
            // 设备不支持 Face ID,或者配置不正确
            showAlert(title: "Face ID 不可用", message: error?.localizedDescription)
        }
    }

    func showAlert(title: String, message: String?) {
        let alertController = UIAlertController(title: title, message: message, preferredStyle: .alert)
        alertController.addAction(UIAlertAction(title: "确定", style: .default, handler: nil))
        present(alertController, animated: true, completion: nil)
    }
}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,377评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,390评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,967评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,344评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,441评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,492评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,497评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,274评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,732评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,008评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,184评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,837评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,520评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,156评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,407评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,056评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,074评论 2 352

推荐阅读更多精彩内容