无论在Device的密码和touchId设置中配置了什么设置,LAContext始终都不返回任何设置。它只是给我一个警告而不是例外。
它仅适用于iOS11.1测试版中的XCode 9.1 Beta:(
答案 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
}