在我们的应用中,用户必须注册到设备生物特征才能使用它进行身份验证。
注册文本和法律注释根据相关生物特征(注册为触摸ID或注册为面部ID)
据我发现,生物特征类型可以通过LAContext获得,但是如果用户拒绝使用生物特征,则上下文返回biometryType = .none

除了询问屏幕尺寸并与iphone X进行比较之外,还有其他想法吗?

    static fileprivate var biometryType: DSLocalAuthenticationBiometryType {
        let context = LAContext()

        var error: NSError?
        let _ = context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &error)

        if #available(iOS 11.0, *) {

            return context.biometryType == .typeFaceID ? .typeFaceID : .none
        }
        else {
            return .none
        }
    }

谢谢

最佳答案

我有一个相同的问题,我刚刚发现,即使您拒绝了用户的许可后,如果您根据键 LAPolicyDeviceOwnerAuthentication 而不是 LAPolicyDeviceOwnerAuthenticationWithBiometrics 进行评估,即使用户拒绝了许可,评估也会成功,并且您将获得正确的biometryType。您的代码就像

static fileprivate var biometryType: DSLocalAuthenticationBiometryType {
    let context = LAContext()

    var error: NSError?
    let _ = context.canEvaluatePolicy(.deviceOwnerAuthentication, error: &error)

    if #available(iOS 11.0, *) {

        return context.biometryType == .typeFaceID ? .typeFaceID : .none
    }
    else {
        return .none
    }
}

注意:在没有触摸ID和面部ID的设备上,它仍返回YES,因此您将不知道该设备是否具有低于11的iOS的生物统计学硬件(不公开biometriyType属性)

更新

对于iOS版本10或更低版本的设备,您可以使用
LAPolicyDeviceOwnerAuthenticationWithBiometrics像往常一样,它将正常运行(设备是否支持触摸ID均返回true),因此只需区分正在运行的OS版本即可:)

让我知道它是否有效:)

最好

08-16 04:47