4

在我们的应用程序中,用户必须注册设备生物特征才能使用它进行身份验证。注册文本和法律说明是根据相关的生物特征(注册到触摸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
        }
    }

谢谢

4

1 回答 1

6

我遇到了同样的问题,我刚刚发现,如果您针对密钥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
    }
}

注意:在没有 touch id 和 face id 的设备上,它仍然返回 YES,所以你不会知道设备是否真的有生物识别硬件,iOS 低于 11(不公开属性 biometriyType)

更新

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

让我知道它是否有效:)

最好的

于 2017-11-24T09:52:34.357 回答