iOS11 中的 LABiometryType 总是 return None
LABiometryType in iOS11 always return None
无论在设备密码和 touchId 设置中配置了什么设置,LAContext 总是 returns none。这只是向我发出警告而不是例外。
它仅适用于 XCode 9.1 Beta 中的 iOS11.1 beta,如建议的那样:(
这里遇到了同样的问题,用下面的代码修复了它。但它只适用于 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
}
}
我刚刚找到问题了!您必须调用 canEvaluatePolicy
才能正确设置 biometryType
。
示例:
func isFaceIdSupported() -> Bool {
if #available(iOS 11.0, *){
if context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: nil) {
return context.biometryType == LABiometryType.typeFaceID
}
}
return false
}
根据 Apple docs 的 biometryType:
"This property is only set when canEvaluatePolicy(_:error:) succeeds for a biometric policy. The default value is none."
如果您使用来自@Ermish 的代码,如果设备上没有已注册的面孔,isFaceIdSupported() 将 return 为 false。
根据我在 iOS SDK 11.1 上的最新测试显示,只需调用 laContext.canEvaluatePolicy 函数而不关心结果,然后检查 laContext.biometryType.
的内容
如果没有已注册的人脸,canEvaluatePolicy 将失败,但设备支持 Face ID。
在 Xamarin.iOS 中,您需要评估之前的政策:
NSError error;
bool success = context.CanEvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, out error);
if (context.BiometryType == LABiometryType.TouchId)
{
//Do Something
}
无论在设备密码和 touchId 设置中配置了什么设置,LAContext 总是 returns none。这只是向我发出警告而不是例外。
它仅适用于 XCode 9.1 Beta 中的 iOS11.1 beta,如建议的那样:(
这里遇到了同样的问题,用下面的代码修复了它。但它只适用于 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
}
}
我刚刚找到问题了!您必须调用 canEvaluatePolicy
才能正确设置 biometryType
。
示例:
func isFaceIdSupported() -> Bool {
if #available(iOS 11.0, *){
if context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: nil) {
return context.biometryType == LABiometryType.typeFaceID
}
}
return false
}
根据 Apple docs 的 biometryType:
"This property is only set when canEvaluatePolicy(_:error:) succeeds for a biometric policy. The default value is none."
如果您使用来自@Ermish 的代码,如果设备上没有已注册的面孔,isFaceIdSupported() 将 return 为 false。 根据我在 iOS SDK 11.1 上的最新测试显示,只需调用 laContext.canEvaluatePolicy 函数而不关心结果,然后检查 laContext.biometryType.
的内容如果没有已注册的人脸,canEvaluatePolicy 将失败,但设备支持 Face ID。
在 Xamarin.iOS 中,您需要评估之前的政策:
NSError error;
bool success = context.CanEvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, out error);
if (context.BiometryType == LABiometryType.TouchId)
{
//Do Something
}