无论在 Device 的 passcode 和 touchId settings 中配置了什么设置,LAContext 总是返回 none。它只是给我一个警告,而不是例外。
它仅在 iOS11.1 beta 中的 XCode 9.1 Beta 中工作,如建议:(
无论在 Device 的 passcode 和 touchId settings 中配置了什么设置,LAContext 总是返回 none。它只是给我一个警告,而不是例外。
它仅在 iOS11.1 beta 中的 XCode 9.1 Beta 中工作,如建议:(
我才发现问题!您必须要求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 for biometryType:
“此属性仅在 canEvaluatePolicy(_:error:) 生物识别策略成功时设置。默认值为无。”
在这里遇到同样的问题,用下面的代码修复它。但它仅适用于 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
}
}
如果您使用来自@Ermish 的代码,如果设备上没有注册的面孔,isFaceIdSupported() 将返回 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
}