web-dev-qa-db-fra.com

Touch ID vs code d'identification de visage

Je voulais poser une question sur l'authentification biométrique. Dans mon application, j'ai entré l'authentification avec Touch ID. Maintenant, voelvo implémente la méthode avec Face ID.

J'ai inséré la ligne Confidentialité - Description de l'utilisation de l'identifiant de visage dans mon fichier .plist

Maintenant, j'ai remarqué que mon identifiant de visage fonctionne correctement sans apporter de modification au code TouchID.

Ma question est :

** Le code d’implémentation Touch ID est-il identique à celui de Face ID? Puis-je laisser le code d'implémentation Touch ID sans y apporter de modification ou dois-je ajouter quelques lignes de code pour Face ID? **

Je vous montre comment j'ai implémenté mon Touch ID

#pragma mark - TOUCH ID Login
-(void)useTouchID {
    NSError *error;
    LAContext *context = [[LAContext alloc] init];

    NSString *emailAccount = [KFKeychain loadObjectForKey:USER_EMAIL];
    NSString *reasonString = [NSString stringWithFormat:@"Autentica %@ utilizzando la tua impronta", emailAccount];

    if ([context canEvaluatePolicy:kLAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) {
        [context evaluatePolicy:kLAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason: reasonString reply:^(BOOL success, NSError * _Nullable error) {
            // Se la procedura con il TouchID va a buon fine settiamo il booleano su YES che specifica se l'utente a scelto di utilizzare il TouchID oppure NO.
            // Successivamente invochiamo il metodo loginWithFirebase per procedere con l'autenticazione su firebase

            dispatch_async(dispatch_get_main_queue(), ^{
                [APPDELEGATE showHud];
            });

            if (success) {
                _useBiometricsAuthentication = YES;
                // Attualmente il TouchID non viene supportato da Firebase pertanto dobbiamo autenticarci con l'impronta digitale e successivamente eseguire il login con Firebase.
                [self useFirebaseSignIn];
            }
            // Nel caso in cui si verifichino alcuni errori con l'uso del TouchID andiamo ad implementare ogni singolo errore che l'utente puo' riscontrare
            else {
                _useBiometricsAuthentication = NO;

                switch ([error code]) {
                        // L'autenticazione con Touch ID è fallità
                    case kLAErrorAuthenticationFailed:
                        NSLog(@"Autenticazione Fallita");
                        dispatch_async(dispatch_get_main_queue(), ^{
                            [APPDELEGATE removeHud];
                        });
                        break;
                        // L'user ha spinto annulla sull'alert che compare sulla richiesta di TouchID oppure ha spinto il pulsante Home facendo scomparire l'alert
                    case kLAErrorUserCancel:
                        NSLog(@"User ha respinto il touch ID");
                        dispatch_async(dispatch_get_main_queue(), ^{
                            [APPDELEGATE removeHud];
                        });
                        break;
                        // In questo caso l'user ha piu volte tentato di utilizzare il touchID e ha preferito inserire le proprie credenziali manualmente
                    case kLAErrorUserFallback:
                        NSLog(@"L'user ha scelto di utilizzare il login di firebase");
                        // a questo punto eliminiamo tutti i dati salvati con il login precedente in modo tale da poter salvare nuovamente le credenziali che l'utente ha inserito manualmente
                        [self deleteUserKey];
                        dispatch_async(dispatch_get_main_queue(), ^{
                            [APPDELEGATE removeHud];
                        });
                        break;
                        // L'errore ci comunica che l'utente molto probabilmente non ha mai inserito / salvato le proprie impronte digitali nel suo dispositivo
                    case kLAErrorTouchIDNotEnrolled:
                        NSLog(@" non sono state impostate impronte per utilizzare il touch id");
                        dispatch_async(dispatch_get_main_queue(), ^{
                            [APPDELEGATE showAlertWithTitle:@"ATTENZIONE" message:@"Il TUOCH ID ha bisogno di avere delle impronte digitali impostate per poter funzionare. Vai sulle IMPOSTAZIONI del tuo dispositivo in TOUCH ID e CODICE per inserirle" optionTitle:@"OK" otherOptionTitle:nil optionButtonAction:^{
                                [APPDELEGATE dismissAlert];
                            } canButtonAction:nil];
                            [APPDELEGATE removeHud];
                        });
                        break;
                        // In questo caso ci avverte che per utilizzare il TouchID l'app deve aver salvato almeno una volte le credenziali che l'utente inserisce manualmente, all'interno di un portachiavi come ad esempio la libreria utilizzata in questa app (Keychain)
                    case kLAErrorPasscodeNotSet: {
                        NSLog(@"il touch id ha bisogno di avere dei codici di accesso salvati per essere usato");
                        dispatch_async(dispatch_get_main_queue(), ^{
                            [APPDELEGATE showAlertWithTitle:@"ATTENZIONE" message:@"Sembra che non vi sia nessun account collegato a queste impronte. Perfavore effettua il login classico utilizzando la tua Email e la tua Password del tuo account Unistit e riprova." optionTitle:@"OK" otherOptionTitle:nil optionButtonAction:^{
                                [APPDELEGATE dismissAlert];
                                [self.emailField becomeFirstResponder];
                                [self deleteUserKey];
                            } canButtonAction:nil];
                            [APPDELEGATE removeHud];
                        });
                        break;
                    }
                    default:
                        break;
                }
            }
        }];
    }
}
6
kAiN

Vous n'avez pas besoin de mettre à jour votre code pour que votre identifiant de visage soit prêt si votre application prend déjà en charge le Touch ID. (comme vu ici )  enter image description here iOS s’occupe de tout le travail sous le capot. 

Ce que vous pouvez faire, cependant, est de changer vos chaînes contenant "Touch ID" en "Face ID" si l'application s'exécute sur un appareil compatible Face ID. 

Edit: Comme indiqué par MikeMertsock , la classe LAContext a une propriété biometryType pour déterminer si le périphérique utilise le Touch ID ou le Face ID.

5
Quentin Hayot

Vous recherchez peut-être ceci: biometryType est utilisé pour spécifier/mettre à jour des localisables pour les informations utilisateur uniquement Votre code de travail identifiera automatiquement biometryType et gérera les opérations d'authentification. Vous n'avez pas besoin de le mettre à jour.

Voici un exemple de code permettant de détecter manuellement le type de biométrie pris en charge par le périphérique.

LAContext *laContext = [[LAContext alloc] init];

NSError *error;

if ([laContext canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) {

    if (error != NULL) {
        // handle error
    } else {

        if (@available(iOS 11.0.1, *)) {
            if (laContext.biometryType == LABiometryTypeFaceID) {
                //localizedReason = "Unlock using Face ID"
                NSLog(@"FaceId support");
            } else if (laContext.biometryType == LABiometryTypeTouchID) {
                //localizedReason = "Unlock using Touch ID"
                NSLog(@"TouchId support");
            } else {
                //localizedReason = "Unlock using Application Passcode"
                NSLog(@"No Biometric support");
            }
        } else {
            // Fallback on earlier versions
        }


        [laContext evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"Test Reason" reply:^(BOOL success, NSError * _Nullable error) {

            if (error != NULL) {
                // handle error
            } else if (success) {
                // handle success response
            } else {
                // handle false response
            }
        }];
    }
}
5
Krunal
 func authenticateUser() {
        // Get the local authentication context.
        let context = LAContext()

        // Declare a NSError variable.

        // Set the reason string that will appear on the authentication alert.
        _ = "Authentication is needed to access your notes."

        var policy: LAPolicy?
        // Depending the iOS version we'll need to choose the policy we are able to use
        if #available(iOS 9.0, *) {
            // iOS 9+ users with Biometric and Passcode verification
            policy = .deviceOwnerAuthentication
        } else {
            // iOS 8+ users with Biometric and Custom (Fallback button) verification
            context.localizedFallbackTitle = "Fuu!"
            policy = .deviceOwnerAuthenticationWithBiometrics
        }

        context.evaluatePolicy(policy!, localizedReason: "Please Add your touch Id", reply: { (success, error) in



            DispatchQueue.main.async {
              RKDropdownAlert.title(NSLocalizedString("Success", comment: ""), message: NSLocalizedString("User Touch Id Enrolled Successfully", comment: ""), backgroundColor: BMConstants.KAppBGColor, textColor: BMConstants.KAppWhiteColor)

                guard success else {


                    guard let error = error else {
                        return
                    }


                    switch(error) {
                    case LAError.authenticationFailed:
                        //self.message.text = "There was a problem verifying your identity."
                        break
                    case LAError.userCancel:

                        RKDropdownAlert.title(NSLocalizedString("Error", comment: ""), message: NSLocalizedString("User cancelled", comment: ""), backgroundColor: BMConstants.KAppBGColor, textColor: BMConstants.KAppWhiteColor)

                       // self.message.text = "Authentication was canceled by user."
                        // Fallback button was pressed and an extra login step should be implemented for iOS 8 users.
                    // By the other hand, iOS 9+ users will use the pasccode verification implemented by the own system.
                        break
                    case LAError.userFallback:
                        RKDropdownAlert.title(NSLocalizedString("Error", comment: ""), message: NSLocalizedString("The user tapped the fallback", comment: ""), backgroundColor: BMConstants.KAppBGColor, textColor: BMConstants.KAppWhiteColor)
                        //self.message.text = "The user tapped the fallback button (Fuu!)"
                        break
                    case LAError.systemCancel:
                        RKDropdownAlert.title(NSLocalizedString("Error", comment: ""), message: NSLocalizedString("Authentication was canceled by system", comment: ""), backgroundColor: BMConstants.KAppBGColor, textColor: BMConstants.KAppWhiteColor)
//                        self.message.text = "Authentication was canceled by system."
                        break
                    case LAError.passcodeNotSet:
                        RKDropdownAlert.title(NSLocalizedString("Error", comment: ""), message: NSLocalizedString("Passcode is not set on the device", comment: ""), backgroundColor: BMConstants.KAppBGColor, textColor: BMConstants.KAppWhiteColor)
//                        self.message.text = "Passcode is not set on the device."
                        break
                    case LAError.touchIDNotAvailable:
                        RKDropdownAlert.title(NSLocalizedString("Error", comment: ""), message: NSLocalizedString("Touch ID is not available on the device", comment: ""), backgroundColor: BMConstants.KAppBGColor, textColor: BMConstants.KAppWhiteColor)
//                        self.message.text = "Touch ID is not available on the device."
                        break
                    case LAError.touchIDNotEnrolled:
                        RKDropdownAlert.title(NSLocalizedString("Error", comment: ""), message: NSLocalizedString("TTouch ID has no enrolled fingers", comment: ""), backgroundColor: BMConstants.KAppBGColor, textColor: BMConstants.KAppWhiteColor)
//                        self.message.text = "Touch ID has no enrolled fingers."
                        break
                    // iOS 9+ functions
                    case LAError.touchIDLockout:
                         RKDropdownAlert.title(NSLocalizedString("Error", comment: ""), message: NSLocalizedString("here were too many failed Touch ID attempts and Touch ID is now locked", comment: ""), backgroundColor: BMConstants.KAppBGColor, textColor: BMConstants.KAppWhiteColor)
                        break
                    case LAError.appCancel:
                         RKDropdownAlert.title(NSLocalizedString("Error", comment: ""), message: NSLocalizedString("Authentication was canceled by application", comment: ""), backgroundColor: BMConstants.KAppBGColor, textColor: BMConstants.KAppWhiteColor)
//                        self.message.text = "Authentication was canceled by application."
                        break
                    case LAError.invalidContext:
                         RKDropdownAlert.title(NSLocalizedString("Error", comment: ""), message: NSLocalizedString("LAContext passed to this call has been previously invalidated.", comment: ""), backgroundColor: BMConstants.KAppBGColor, textColor: BMConstants.KAppWhiteColor)
//                        self.message.text = "LAContext passed to this call has been previously invalidated."
                        break
                    default:
                        RKDropdownAlert.title(NSLocalizedString("Error", comment: ""), message: NSLocalizedString("Touch ID may not be configured", comment: ""), backgroundColor: BMConstants.KAppBGColor, textColor: BMConstants.KAppWhiteColor)
//                        self.message.text = "Touch ID may not be configured"

                        break
                    }


                    return
                }

            }
        }



        )



           }
1
Priya