Skip to content

Creación de un sistema de login para Android usando TIdThreadComponent en Delphi

En el desarrollo de aplicaciones móviles con Delphi, especialmente para plataformas como Android, mantener la interfaz de usuario fluida y responsiva es crucial.

El componente TIdThreadComponent, parte de la suite Indy, permite ejecutar procesos en segundo plano, como la verificación de credenciales de usuario, sin interrumpir la interacción del usuario con la aplicación.

Configuración del Ambiente

Antes de empezar, asegúrate de que el entorno de desarrollo Delphi está configurado para soportar el desarrollo de Android y que Indy está instalado y configurado correctamente.

Comencemos a codificar

Configuración de TIdThreadComponent

Primero, necesitamos colocar el componente TIdThreadComponent en el formulario y configurarlo adecuadamente.

procedure TForm1.FormCreate(Sender: TObject);
begin
  IdThreadComponent1.StopMode := smTerminate;
  IdThreadComponent1.Priority := tpNormal;
end;

Implementación de la lógica de login

La lógica de login verificará las credenciales de usuario en un hilo separado.

Esto se hace para no bloquear la UI mientras se realiza la verificación, que podría incluir una llamada a una base de datos o un servicio web.

procedure TForm1.IdThreadComponent1Run(Sender: TIdThreadComponent);
var
  Username, Password: string;
begin
  // Asumiendo que Username y Password son recogidos de la UI
  Username := FUsername;
  Password := FPassword;

  // Simulando una verificación de login
  if (Username = 'user') and (Password = 'pass') then
    TThread.Synchronize(nil,
      procedure
      begin
        ShowMessage('Login exitoso');
      end)
  else
    TThread.Synchronize(nil,
      procedure
      begin
        ShowMessage('Credenciales incorrectas');
      end);
end;

Invocando el proceso de login

Para iniciar el proceso de login desde la interfaz de usuario, por ejemplo, cuando el usuario presiona un botón de login.

procedure TForm1.LoginButtonClick(Sender: TObject);
begin
  FUsername := EditUsername.Text;
  FPassword := EditPassword.Text;
  IdThreadComponent1.Start;  // Inicia el thread
end;

Consejos de Seguridad

  • Seguridad de datos: Asegúrate de utilizar conexiones seguras (como HTTPS) al enviar credenciales.
  • Manejo de errores: Implementa un manejo robusto de errores en la lógica de login para capturar y responder a fallos de conexión o errores de autenticación.
  • Envía los passwords encriptados: puedes utilizar el algorito de encriptacion MD5 que te muestro a continuación para enviar los passwords seguros

Algoritmo de encriptación MD5

function MD5Encrypt(const Value: string): string;
  function BytesToHex(const Bytes: TIdBytes): string;
  const
    HexDigits: array [0 .. 15] of Char = '0123456789abcdef';
  var
    I: Integer;
  begin
    Result := '';
    for I := 0 to Length(Bytes) - 1 do
      Result := Result + HexDigits[Bytes[I] shr 4] + HexDigits[Bytes[I] and $0F];
  end;
var
  MD5: TIdHashMessageDigest5;
  Hash: TIdBytes;
begin
  MD5 := TIdHashMessageDigest5.Create;
  try
    Hash := MD5.HashBytes(ToBytes(Value, IndyTextEncoding_UTF8));
    Result := BytesToHex(Hash);
  finally
    MD5.Free;
  end;
end;

El uso de TIdThreadComponent para manejar operaciones de login en aplicaciones Android permite a los desarrolladores crear experiencias de usuario suaves y efectivas.

Este enfoque asegura que la interfaz de usuario permanezca responsiva, mejorando la percepción del usuario sobre la aplicación.