iOS Touch ID

Touch ID es la funcionalidad de Apple que permite mediante un sensor biométrico capacitivo, leer huellas digitales y compararlas con las almacenadas en el sistema.

 touch id passcode

Su uso está cada vez más demandado ya que permite desbloquear dispositivos y/o aplicaciones iOS simplemente colocando un dedo sobre el sensor que nos identifica como usuarios reconocidos por el dispositivo. Esta funcionalidad añade facilidad a la par que seguridad en el acceso a nuestros datos.

La funcionalidad de Touch ID no solo se puede utilizar para el desbloqueo del dispositivo, ¡también para acceder a nuestras aplicaciones!

Vamos a seguir un funcionamiento similar al del sistema operativo. Antes de poder activar el desbloqueo con Touch ID tendremos que activar el pincode de la app. Además, cuando el usuario quiera desbloquear la app, podrá elegir cómo ¿Touch ID o passcode?. De esta manera, evitamos también posibles bloqueos al usuario.

¿Vemos un ejemplo? ¡¡Manos a la obra!!

Mediante el Framework Local Authentication, Apple nos facilita la comunicación con el sensor. Por ejemplo, permite conocer si la funcionalidad Touch ID está disponible, lo usaremos para conocer si el dispositivo cuenta con este sensor.

- (BOOL)isTouchIDAvailable {

    NSError *error = nil;

    if([[[LAContext alloc] init] canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]){
        return true;
    }

    else{
        DLog(@"touchID not available: %@", error.description);
        return false;
    }
}

¡¡Bien!! Si ya sabemos que Touch ID está disponible, podemos mostrar un alertView para indicarle a usuario que coloque el dedo para leer la huella dactilar y compararla con las huellas almacenadas:

- (void)showTouchIDAuth {

    if (self.isTouchIDAvailable) {

        [[[LAContext alloc] init] evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@“Unlock ownCloud" reply:^(BOOL success, NSError * error){
            
            if(error) {

                NSString *failureReason;

                //depending on error show what exactly has failed
                switch (error.code) {                 

                    // Authentication was not successful, because user failed to provide valid credentials.
                    case LAErrorAuthenticationFailed:

                        failureReason = @"Touch ID authentication failed because user failed to provide valid credentials";
                        break;                      

                    // Authentication was canceled by user (e.g. tapped Cancel button).
                    case LAErrorUserCancel:

                        failureReason = @"Touch ID authentication cancelled";
                        break;
                      
                    // Authentication was canceled, because the user tapped the fallback button (Enter Password)
                    case LAErrorUserFallback:

                       failureReason =  @"Touch ID authentication choose password selected";
                        break;
                       
                    // Authentication was canceled by system (e.g. another application went to foreground).
                    case LAErrorSystemCancel:

                        failureReason =  @"Touch ID authentication was canceled by system";
                        break;

                    // Authentication could not start, because passcode is not set on the device.
                    case LAErrorPasscodeNotSet:

                        failureReason =  @"Touch ID authentication failed because passcode is not set on the device";
                        break;                       

                    // Authentication could not start, because Touch ID is not available on the device.
                    case LAErrorTouchIDNotAvailable:

                        failureReason =  @"Touch ID authentication is not available on the device";
                        break;
                  
                    // Authentication could not start, because Touch ID has no enrolled fingers.
                    case LAErrorTouchIDNotEnrolled:

                        failureReason =  @"Touch ID authentication failed because has no enrolled fingers";
                        break;                        

                    default:

                        failureReason = (error.code == -1000)? @"Touch ID time out":@"Touch ID unknown error";
                        break;
                }

                DLog(@"Authentication failed: %@", failureReason);
                                
            }

            if(success) {

                DLog(@"Successfully Touch ID authenticated");
          
            }
           
            else{

                DLog(@"Touch ID. The finger print doesn't match");

            }

        }];
  
    } else {

        DLog(@"Your device cannot authenticate using TouchID.");

    }
}

¿Cómo quedaría la vista?

touch id owncloud

 

Después de mostrar el alertView, el usuario tiene hasta 3 intentos para desbloquear la app con TouchID. Si falla la lectura o pulsa la opción cancelar, podrá introducir el pincode.

touch id try again

¿Desbloqueas tu app con TouchID? Nosotros lo hemos implementado para la app iOS de ownCloud. Puedes echarle un vistazo y aportar tus ideas en: https://github.com/owncloud/ios

Más información:

Deja un comentario

¿Necesitas una estimación?

Calcula ahora