Touch ID 开发

2017-03-14  本文已影响25人  冰霜海胆

.deviceOwnerAuthenticationWithBiometrics: 指纹识别失败后, 点击输入密码,自定义输入密码操作 (例如: 跳转到自定义的视图来让用户输入早先设置的密码)
.deviceOwnerAuthentication: 指纹识别失败后, 点击输入密码, 弹出系统自带的密码输入框(需要输入的是锁屏密码)如下图:⬇️

输入的密码第一个字符不会显示,但不影响识别

导入框架

import LocalAuthentication
fileprivate func setupAuthentication() {
        // 初始化
        let myContext = LAContext()
        
        // 弹窗说明文字
        let myLocalizedReasonString = "测试指纹识别"
        
        var authError: NSError? = nil
        
        /** 
         .deviceOwnerAuthenticationWithBiometrics: 指纹识别失败后, 自定义输入密码操作 (例如: 跳转到自定义的视图来让用户输入早先设置的密码)
         .deviceOwnerAuthentication: 指纹识别失败后, 弹出系统自带的密码输入框(需要输入的是锁屏密码)
         */
        if myContext.canEvaluatePolicy(.deviceOwnerAuthentication, error: &authError) {
            myContext.evaluatePolicy(.deviceOwnerAuthentication, localizedReason: myLocalizedReasonString, reply: { (success, evaluateError) in
                if success {
                    // 指纹识别成功, 进行下一步操作
                    print("指纹识别成功")
                } else {
                    // 指纹识别失败
                    if let evaluateError = evaluateError {
                        print("指纹识别失败 -> \(evaluateError)")
                        self.infoOf(error: evaluateError as! LAError)
                    } else {
                        print("指纹识别失败 -> 未知错误")
                    }
                }
            })
        } else {
            // 指纹识别不可用
            if let authError = authError {
                print("指纹识别不可用 -> \(authError)")
                self.infoOf(error: authError as! LAError)
            } else {
                print("指纹识别不可用 -> 未知错误")
            }
        }
    }
    
    // 捕获错误原因以及信息
    func infoOf(error: LAError) {
        switch error.code {
        case .authenticationFailed:
            print("身份验证多次失败:  因为用户未能提供有效身份证件.")
        case .userCancel:
            print("身份验证被用户取消:  (例如: 点击 [取消] 按钮).")
        case .userFallback:
            // 输入密码后续操作
            // .deviceOwnerAuthenticationWithBiometrics 模式下点击输入密码才会触发此错误
            print("身份验证被取消:  因为用户在 \"首次验证失败后\" 的 \"第二次验证中\" 点击了 [输入密码] 按钮.")
        case .systemCancel:
            print("身份验证被系统取消:  (例如: 另一个应用程序准备切换到前台).")
        case .passcodeNotSet:
            print("身份验证无法启动:  因为没有在设备上设置密码 (只有设置设备的锁屏密码, 才能开启 Touch ID).")
        case .touchIDNotAvailable:
            print("身份验证无法启动:  因为 Touch ID 不可用 (例如: Touch ID 损坏、设备没有指纹识别硬件模块...).")
        case .touchIDNotEnrolled:
            print("身份验证无法启动:  因为没有设置指纹.")
        case .touchIDLockout:
            print("身份验证失败:  因为多次尝试失败, Touch ID 被锁定, 需要通过验证锁屏密码来重新启用 Touch ID.")
        case .appCancel:
            print("身份验证被 App 取消")
        case .invalidContext:
            print("LAContext 失效.")
        }
    }
上一篇 下一篇

猜你喜欢

热点阅读