Implementar autenticación con Face ID en iOS te permite verificar la identidad biométrica del usuario de forma local, mucho más segura que el reconocimiento facial de Android. Esta guía es para desarrolladores iOS que trabajan con SwiftUI y quieren proteger acciones sensibles como pagos, accesos o información financiera.
La idea es simple: un botón azul que, tras un escaneo facial exitoso, cambia a verde y actualiza el estado de la interfaz. Y aquí viene lo interesante, todo el flujo se apoya en el framework LocalAuthentication, que también funciona con Touch ID.
¿Qué framework necesitas para autenticación biométrica en iOS?
El primer paso es importar LocalAuthentication en tu archivo Swift [00:18]. Este framework expone la clase LAContext, que gestiona toda la lógica de autenticación biométrica del dispositivo, ya sea Face ID o Touch ID.
¿Qué es LAContext en iOS? Es el objeto que gestiona el contexto de autenticación biométrica. Lo usas para preguntar al sistema si el dispositivo admite Face ID o Touch ID y para lanzar el prompt de autenticación.
Dentro de tu vista en SwiftUI declaras dos variables con la anotación @State: authenticationStatus, que arranca con el texto No autenticado, e isAuthenticated, un booleano en falso [00:45]. Estas dos variables son las que mantienen sincronizada la interfaz con el resultado del escaneo.
¿Cómo se construye la interfaz del botón Face ID en SwiftUI?
La estructura visual usa un VStack con spacing: 20. Dentro colocas un Text enlazado a authenticationStatus con un font de título y padding para separación [01:20].
Debajo va el botón con su acción interna, que ejecuta una función llamada authenticateUser. El detalle clave está en el modificador background: si isAuthenticated es true, el color se vuelve verde; si no, queda azul [02:05].
- fontWeight en negritas para el texto del botón.
- foregroundColor en blanco para contraste.
- cornerRadius de 10 unidades para esquinas redondeadas.
Con eso ya tienes el botón personalizado. Ahora toca darle vida con la función de autenticación.
¿Cómo implementar la función authenticateUser paso a paso?
La función authenticateUser arranca obteniendo el contexto biométrico y preparando una variable de error de tipo NSError [03:10]. Antes de lanzar el prompt, debes comprobar si el dispositivo realmente admite biometría.
¿Cómo verificar si el dispositivo admite Face ID o Touch ID?
Usas el método canEvaluatePolicy con el parámetro .deviceOwnerAuthenticationWithBiometrics, pasando la variable de error por referencia con el ampersand [03:45]. Si el dispositivo no soporta biometría, actualizas authenticationStatus a No se puede autenticar con Face ID y dejas isAuthenticated en falso.
¿Qué hace canEvaluatePolicy? Es el método de LAContext que verifica si el dispositivo puede ejecutar una política de autenticación específica, como biometría. Devuelve true o false antes de mostrar el prompt al usuario.
¿Qué es el localizedReason en evaluatePolicy?
Cuando el dispositivo sí admite Face ID, declaras una variable reason con un mensaje tipo Autentícate para acceder a funciones seguras [04:30]. Este texto se muestra dentro del prompt nativo de iOS y es el que ven aplicaciones bancarias o cualquier app con datos sensibles.
Luego llamas a evaluatePolicy con tres elementos:
- La política
.deviceOwnerAuthenticationWithBiometrics.
- El parámetro
localizedReason con tu variable reason.
- Un closure que recibe
success y authenticationError.
El sistema operativo detecta automáticamente si el iPhone está configurado con Face ID o Touch ID y muestra el prompt correspondiente.
¿Cómo procesar el resultado de la autenticación de forma asíncrona?
El closure devuelve el resultado fuera del hilo principal, así que necesitas envolver la actualización de la interfaz dentro de DispatchQueue.main.async [05:40]. Esto evita bloqueos visuales y respeta las reglas de SwiftUI sobre actualizaciones de estado.
Dentro del bloque asíncrono manejas dos caminos:
- Si
success es true: authenticationStatus cambia a Autenticado con Face ID e isAuthenticated pasa a true, lo que tiñe el botón de verde.
- Si
success es false: authenticationStatus muestra Autenticación fallida concatenado con authenticationError?.localizedDescription o un mensaje de Error desconocido.
La propiedad localizedDescription te da una descripción legible del fallo, útil para mostrar al usuario o registrar en logs.
¿Por qué Face ID no funciona bien en el simulador de Xcode?
El simulador de iOS incluye opciones para simular coincidencia o no coincidencia facial, pero el comportamiento es inestable [06:50]. Al probar en el simulador, el botón suele responder con No se puede autenticar con Face ID aunque actives las opciones manualmente.
La recomendación es probar en un dispositivo físico. Al ejecutarlo en un iPhone real, el prompt aparece en la parte superior, escanea tu rostro y, al reconocerlo, el botón cambia a verde de inmediato. Esa es la confirmación visual de que tu integración con LocalAuthentication funciona correctamente.
Esta implementación cubre lo esencial para versiones de iOS 18 hacia arriba, pero la misma lógica aplica para Touch ID en dispositivos compatibles. ¿Vas a integrar Face ID en tu próxima app? Cuéntanos qué tipo de acción quieres proteger con biometría.