Quels que soient les paramètres configurés dans les paramètres de code d'accès et de TouchId de l'appareil, LAContext n'en renvoie toujours aucun. Il me lance juste un avertissement et non l'exception.
Cela ne fonctionne que dans XCode 9.1 Beta dans iOS11.1 beta comme suggéré :(
Je viens de comprendre le problème! Vous devez appeler canEvaluatePolicy
pour que biometryType
soit correctement défini.
Exemple:
func isFaceIdSupported() -> Bool {
if #available(iOS 11.0, *){
if context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: nil) {
return context.biometryType == LABiometryType.typeFaceID
}
}
return false
}
Selon le Apple docs pour biometryType:
"Cette propriété n'est définie que lorsque canEvaluatePolicy (_: error :) réussit pour une stratégie biométrique. La valeur par défaut est aucune."
Vous avez le même problème ici, corrigé avec le code suivant. Mais cela ne fonctionne qu'avec la version Xcode 9.1 Beta (et iOS 11.1 beta dans le simulateur).
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
}
}
Si vous utilisez le code de @Ermish, isFaceIdSupported () renverra false s'il n'y a aucun visage inscrit sur l'appareil. Comme le montrent mes derniers tests sur iOS SDK 11.1, il suffit d'appeler la fonction laContext.canEvaluatePolicy et de ne pas se soucier du résultat, puis de vérifier le contenu de laContext.biometryType.
S'il n'y a pas de visages inscrits, canEvaluatePolicy échouera, mais l'appareil prend en charge Face ID.
Dans Xamarin.iOS, vous devez évaluer la stratégie avant:
NSError error;
bool success = context.CanEvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, out error);
if (context.BiometryType == LABiometryType.TouchId)
{
//Do Something
}