检查是否启用FaceID

时间:2019-01-04 10:49:16

标签: ios swift biometrics face-id passcode

我想获取设备中使用的当前锁定类型的字符串,无论是FaceID,touchID还是PassCode。下面是我的代码:-

func getBiometricType() -> String {
    var biometricType: Global.BiometricType {
        let context = LAContext()
        var error: NSError?
        guard context.canEvaluatePolicy(.deviceOwnerAuthentication, error: &error) else { return .none }
        if #available(iOS 11.0, *) {
            switch context.biometryType {
                case .touchID:
                    return .touchID
                case .faceID:
                    return .faceID
                case .none:
                    return .none
            }
        } else {
            guard context.canEvaluatePolicy(.deviceOwnerAuthentication, error: &error) else { return .none }
            return context.canEvaluatePolicy(.deviceOwnerAuthentication, error: nil) ?
     .touchID : .PIN
        }
    }
    return biometricType.rawValue
}

但这canEvaluatePolicy仅检查设备是否支持生物识别。即使尚未设置FaceID但启用了密码,它也不会提供有关密码的信息。我需要显示启用的类型是“密码”。有什么办法可以做到这一点?

1 个答案:

答案 0 :(得分:1)

您必须使用LAPolicy.deviceOwnerAuthenticationWithBiometrics

根据Apple文档:

  

如果Touch ID或Face ID不可用或未注册,请采取政策   评估失败。三个不成功的Touch ID或Face ID后   连续尝试,策略评估将失败。触控ID和面部   尝试失败五次后,将禁用ID身份验证,   要求用户输入设备密码才能   重新启用。

LAPolicy.deviceOwnerAuthentication 启用:

  

如果Touch ID或Face ID可用,已注册且未禁用,则   首先要求用户输入。否则,要求他们输入   设备密码。如果未启用设备密码,则策略   评估失败。 6后禁用密码验证   尝试失败,并且之间的延迟逐渐增加   他们。