iOS11中的LABiometryType始终返回None

时间:2017-10-03 09:51:19

标签: ios11 biometrics lacontext localauthentication face-id

enter image description here

无论在Device的密码和touchId设置中配置了什么设置,LAContext始终都不返回任何设置。它只是给我一个警告而不是例外。

它仅适用于iOS11.1测试版中的XCode 9.1 Beta:(

4 个答案:

答案 0 :(得分:22)

我刚刚发现了问题!您必须致电canEvaluatePolicy biometryType才能正确设置。

示例:

func isFaceIdSupported() -> Bool {
    if #available(iOS 11.0, *){
        if context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: nil) {
            return context.biometryType == LABiometryType.typeFaceID
        }
    }

    return false
}

根据biometryType的Apple docs

“此属性仅在canEvaluatePolicy(_:error :)成功生成生物识别策略时设置。默认值为none。”

答案 1 :(得分:4)

在这里遇到同样的问题,用以下代码修复它。但它仅适用于Xcode 9.1 Beta(以及模拟器中的iOS 11.1 beta)。

if (laContext.canEvaluatePolicy(LAPolicy.deviceOwnerAuthenticationWithBiometrics, error: nil)) {

            if #available(iOS 11.0, *) {
                if (laContext.biometryType == LABiometryType.faceID) {
                    print("FaceId support")
                } else if (laContext.biometryType == LABiometryType.touchID) {
                    print("TouchId support")
                } else {
                    print("No Biometric support")
                }
            } else {
                // Fallback on earlier versions
            }
}

答案 2 :(得分:3)

如果使用@Ermish中的代码,如果设备上没有注册的面,则isFaceIdSupported()将返回false。 根据我在iOS SDK 11.1上的最新测试显示,只需调用laContext.canEvaluatePolicy函数而不关心结果,然后检查laContext.biometryType的内容。

如果没有注册的面孔,则canEvaluatePolicy将失败,但设备支持面部识别。

答案 3 :(得分:0)

在Xamarin.iOS中,您需要先评估策略:

   NSError error;
   bool success = context.CanEvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, out error);
   if (context.BiometryType == LABiometryType.TouchId)
   {
       //Do Something
   }