如何检测设备是否支持FaceID?

Ale*_*eem 4 xcode objective-c ios11 face-id

它有点早,但我打算专门为FaceID添加功能,所以在此之前我需要验证设备支持FaceID与否?需要建议和帮助.提前致谢.

Stu*_* P. 10

我发现你必须先调用canEvaluatePolicy才能正确获取生物测量类型.如果不这样做,那么原始值总是为0.

所以在Swift 3中就是这样,在Xcode 9.0和beta 9.0.1中进行了测试和工作.

class func canAuthenticateByFaceID () -> Bool {
    //if iOS 11 doesn't exist then FaceID doesn't either
    if #available(iOS 11.0, *) {
        let context = LAContext.init()

        var error: NSError?

        if context.canEvaluatePolicy(LAPolicy.deviceOwnerAuthenticationWithBiometrics, error: &error) {
            //As of 11.2 typeFaceID is now just faceID
            if (context.biometryType == LABiometryType.typeFaceID) {
                return true
            }
        }
    }

    return false
}
Run Code Online (Sandbox Code Playgroud)

你当然可以写这个,只是为了看它是否是生物识别并将类型与bool一起返回,但这对于大多数人来说应该足够了.

  • 我们发现这个代码有效,如果手机有面部ID并且已经注册并且没问题.但是,如果未注册面部ID,或者通过识别太多不正确的面部而"锁定",则此函数将返回false(导致我们的代码至少沿着Touch ID的路径走向不正确).有没有人知道一种方法来检测设备是否支持Face ID,无论它是注册还是锁定? (4认同)

Hai*_* Hw 8

Objective-C版本

- (BOOL) isFaceIdSupported{
    if (@available(iOS 11.0, *)) {
        LAContext *context = [[LAContext alloc] init];
        if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:nil]){
            return ( context.biometryType == LABiometryTypeFaceID);
        }
    }
    return NO;
}
Run Code Online (Sandbox Code Playgroud)


Ale*_*eem 5

感谢 Ashley Mills,我创建了一个函数来检测设备中的 FaceID。

- (BOOL)canAuthenticateByFaceID {
    LAContext *context = [[LAContext alloc] init];
    if context.canEvaluatePolicy(LAPolicy.deviceOwnerAuthenticationWithBiometrics, error: &error) {
       if (context.biometryType == LABiometryTypeFaceID && @available(iOS 11.0, *)) {
        return YES;
    } else {
        return NO;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

希望这会帮助其他人。快乐编码!!

最后我写了我自己的库来检测 FaceID在这里你找到

  • 在 swift 中,我在模拟器中的任何设备上得到 0:context.biometryType.rawValue (iPhoneX, iPhone8)。不应该返回 2 和 1(typeFaceID,typeTouchID) (3认同)
  • 不正确的代码。让我们看看该属性的注释:仅当生物识别策略的 canEvaluatePolicy 成功时才设置此属性 (2认同)