# Biometría

> Autenticación biométrica portable con Biometry.isAvailable() y authenticate(...).

Source: https://crossfly.dev/es/docs/data-and-services/device-biometry — CrossFly documentation. Full docs as one file: https://crossfly.dev/llms-full.txt

# Biometría

Autenticación por huella/rostro de forma portable, con **`Biometry`**. El resultado llega **asíncrono**
por callback — despáchalo a la UI con `onUI(...)`.

## Uso
```java
if (!Biometry.isAvailable()) {
   loginPorSenha();               // fallback cuando no hay biometría
   return;
}
Biometry.authenticate(
   "Confirme sua identidade",     // reason (mostrado al usuario)
   "Cancelar",                    // texto del botón cancelar
   false,                         // onlyBiometric: false = permite PIN del sistema como fallback
   (resultado, mensagem) -> Component.onUI(() -> {
      switch (resultado) {
         case SUCCESS:   abrirAreaSegura(); break;
         case FAILURE:   Hint.show("Não reconhecido", 2000); break;
         case CANCELLED: /* el usuario desistió */ break;
         case ERROR:     Hint.show("Erro: " + mensagem, 2000); loginPorSenha(); break;
      }
   })
);
```

## API
| Miembro | Firma |
|---|---|
| `Biometry.isAvailable()` | `static boolean` — ¿hay hardware/biometría registrada? |
| `Biometry.authenticate(...)` | `static void (String reason, String cancel, boolean onlyBiometric, Callback)` |
| `Callback.onResult(...)` | `(AuthResult result, String message)` |
| `AuthResult` | `SUCCESS` · `FAILURE` · `CANCELLED` · `ERROR` |

- **`onlyBiometric = true`** exige biometría (sin recurrir a PIN/contraseña del sistema); `false` permite el
  fallback del SO.

## Seguridad
- **Los datos biométricos nunca salen del dispositivo** — la app recibe solo `SUCCESS`/`FAILURE`/etc.,
  jamás la huella/rostro en sí.
- **Ofrece siempre un fallback de aplicación** (login/contraseña) para `ERROR` y para cuando
  `isAvailable()` sea `false`.

## Errores comunes
- Tratar solo `SUCCESS` e ignorar `CANCELLED`/`ERROR` (el usuario queda atrapado).
- Tocar la UI directamente en el callback — llega **fuera** del paint thread; usa `onUI(...)`.
- No tener un camino alternativo cuando no hay biometría.

## Véase también
- [Sonido y utilidades de dispositivo](/docs/data-and-services/device-sound-and-misc) · [Permisos por plataforma](/docs/platforms)
