Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Touch ID vs Face ID code

I wanted to ask a question about biometric authentication. In my app I entered authentication with Touch ID. Now voelvo implement the method with Face ID.

I inserted the line Privacy - Face ID Usage Description into my .plist file

Now I have noticed that my Face ID works correctly without making any changes to the TouchID code.

My question is :

** The Touch ID implementation code identical to that of the Face ID? Can I leave the Touch ID implementation code without making any changes or do I have to add a few lines of code for Face ID?**

I show you how I implemented my 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;
                }
            }
        }];
    }
}
like image 304
kAiN Avatar asked Feb 15 '18 14:02

kAiN


People also ask

Which is Better Face ID or Touch ID?

While it's not likely to have as catastrophic consequences as many fear, with most accidental unlockings likely to happen between family members, rather than a criminal managing to gain access, the reality is that facial recognition is less reliable than fingerprints for getting access to phones and devices.

Which is better Touch ID or passcode?

On the whole, a good, strong password is more secure than fingerprint recognition software. Fingerprints cannot be altered if they are compromised, nor can they be altered between different accounts or devices.

Why was Touch ID discontinued?

Because, the Cupertino, USA giant has deselected the in-display fingerprint sensor, as is already widely used Android smartphones and may continue to use Face ID for the upcoming flagship model.

Can you use the code instead of Face ID?

Users can use their passcode or password anytime instead of Face ID or Touch ID, but there are situations where biometrics aren't permitted. The following security-sensitive operations always require entry of a passcode or password: Updating the software. Erasing the device.


Video Answer


1 Answers

You don't have to update your code to be Face ID ready if your app already supports Touch ID. (as seen here) enter image description here iOS takes care of all the work under the hood.

What you can do however, is to change your strings containing "Touch ID" to "Face ID" if the app is running on a Face ID capable device.

Edit: As noted by MikeMertsock, the LAContext class has a biometryType property to determine whether the device uses Touch ID or Face ID.

like image 119
Quentin Hayot Avatar answered Nov 11 '22 03:11

Quentin Hayot