Primeros pasos
Copia un prompt de configuración con los pasos de instalación y la guía completa en markdown para este plugin.
Set up this Capacitor plugin in the project.
Use the package manager already used by the project.
Install these package(s): `@capgo/capacitor-native-biometric`
Run the required Capacitor sync/update step after installation.
Read this markdown guide for the full setup steps: https://raw.githubusercontent.com/Cap-go/website/refs/heads/main/apps/docs/src/content/docs/docs/plugins/native-biometric/getting-started.mdx
Use that guide for platform-specific steps, native file edits, permissions, config changes, imports, and usage setup.
If that guide references other docs pages, read them too.
Instalar
Sección titulada “Instalación”Puedes usar nuestro setup asistido por IA para instalar el plugin. Añade las skills de Capgo a tu herramienta de IA con el siguiente comando:
npx skills add https://github.com/Cap-go/capgo-skills --skill capacitor-pluginsLuego usa el siguiente prompt:
Use the `capacitor-plugins` skill from `Cap-go/capgo-skills` to install the `@capgo/capacitor-native-biometric` plugin in my project.Si prefieres la configuración manual, instala el plugin ejecutando estos comandos y sigue las instrucciones de cada plataforma:
bun add @capgo/capacitor-native-biometricbunx cap syncImportar
Sección titulada “Importar”import { NativeBiometric } from '@capgo/capacitor-native-biometric';Inicio rápido: protege el login con biometría
Sección titulada “Inicio rápido: protege un login con biometría”import { NativeBiometric } from '@capgo/capacitor-native-biometric';
async function biometricLogin() { const { isAvailable } = await NativeBiometric.isAvailable(); if (!isAvailable) { return fallbackToPasscode(); }
try { const { username, password } = await NativeBiometric.getSecureCredentials({ server: 'https://api.example.com', }); await signIn(username, password); } catch { return fallbackToPasscode(); }}Guarda primero los secretos con setCredentials y accessControl cuando necesites protección biométrica al leer.
Ejemplo: desbloquear con verifyIdentity
Sección titulada “Ejemplo: desbloquear con verifyIdentity”getSecureCredentials() ya lanza el prompt cuando las credenciales usan biometría accessControl. Usa verifyIdentity() para otras acciones restringidas, y redirige la cancelación o el bloqueo a tu flujo de passcode.
try { await NativeBiometric.verifyIdentity({ reason: 'Unlock your account', title: 'Biometric login', });} catch { return fallbackToPasscode();}Ejemplo: logout limpia la entrada del vault
Sección titulada “Ejemplo: logout limpia la entrada del vault”await NativeBiometric.deleteCredentials({ server: 'https://api.example.com' });Ejemplo: reaccionar a cambios en el registro biométrico
Sección titulada “Ejemplo: reaccionar cuando cambia el registro biométrico”await NativeBiometric.addListener('biometryChange', async () => { const { isAvailable } = await NativeBiometric.isAvailable(); if (!isAvailable) showPasscodeUi();});Errores comunes
Sección titulada “Errores comunes”getSecureCredentialsrequiere previamenteaccessControl: usa flags de acceso biométrico al guardar, o usagetCredentialssin un prompt adicional.- Bloqueo de usuario: gestiona
BiometricAuthError.USER_LOCKOUTyBiometricAuthError.USER_TEMPORARY_LOCKOUTde losverifyIdentitycon una UI de cooldown. - Simulador: registra una huella o rostro en el simulador antes de testear.
Resumen de API
Sección titulada “Resumen de API”isAvailable
Sección titulada “isAvailable”Comprueba si el hardware de autenticación biométrica está disponible.
import { NativeBiometric } from '@capgo/capacitor-native-biometric';
const result = await NativeBiometric.isAvailable();console.log(result);verifyIdentity
Sección titulada “verifyIdentity”Solicita al usuario que se autentique con biometría.
import { NativeBiometric } from '@capgo/capacitor-native-biometric';
await NativeBiometric.verifyIdentity();getCredentials
Sección titulada “getCredentials”Obtiene las credenciales almacenadas para un servidor específico.
import { NativeBiometric } from '@capgo/capacitor-native-biometric';
const result = await NativeBiometric.getCredentials({ server: 'example.com' });// The result holds sensitive values: use it without logging it.setCredentials
Sección titulada “setCredentials”Almacena las credenciales proporcionadas para un servidor específico.
import { NativeBiometric } from '@capgo/capacitor-native-biometric';
await NativeBiometric.setCredentials({ username: 'username', password: 'password', server: 'example.com',});deleteCredentials
Sección titulada “deleteCredentials”Elimina las credenciales almacenadas para un servidor específico.
import { NativeBiometric } from '@capgo/capacitor-native-biometric';
await NativeBiometric.deleteCredentials({ server: 'example.com' });getSecureCredentials
Sección titulada “getSecureCredentials”Obtiene las credenciales almacenadas para un servidor dado; requiere autenticación biométrica. Las credenciales deben haberse guardado con accessControl establecido en BIOMETRY_CURRENT_SET o BIOMETRY_ANY.
En iOS, el sistema muestra automáticamente el prompt biométrico al acceder al elemento protegido del Keychain. En Android, se muestra el BiometricPrompt con un CryptoObject vinculado a la clave de descifrado de la credencial.
import { NativeBiometric } from '@capgo/capacitor-native-biometric';
const result = await NativeBiometric.getSecureCredentials({ server: 'example.com' });// The result holds sensitive values: use it without logging it.isCredentialsSaved
Sección titulada “isCredentialsSaved”Comprueba si ya existen credenciales guardadas para un servidor específico.
import { NativeBiometric } from '@capgo/capacitor-native-biometric';
const result = await NativeBiometric.isCredentialsSaved({ server: 'example.com' });console.log(result);Referencia de tipos
Sección titulada “Referencia de tipos”IsAvailableOptions
Sección titulada “IsAvailableOptions”export interface IsAvailableOptions { /** * Only for iOS. * Specifies if should fallback to passcode authentication if biometric authentication is not available. * On Android, this parameter is ignored due to BiometricPrompt API constraints: * DEVICE_CREDENTIAL authenticator and negative button (cancel) are mutually exclusive. */ useFallback: boolean;}AvailableResult
Sección titulada “AvailableResult”Resultado del método isAvailable() que indica si la autenticación biométrica está disponible.
export interface AvailableResult { /** * Whether authentication is available (biometric or fallback if useFallback is true) */ isAvailable: boolean; /** * The strength of available authentication method (STRONG, WEAK, or NONE) */ authenticationStrength: AuthenticationStrength; /** * The primary biometry type available on the device. * On Android devices with multiple biometry types, this returns MULTIPLE. * Use this for display purposes only - always use isAvailable for logic decisions. */ biometryType: BiometryType; /** * Whether the device has a secure lock screen (PIN, pattern, or password). * This is independent of biometric enrollment. */ deviceIsSecure: boolean; /** * Whether strong biometry (Face ID, Touch ID, or fingerprint on devices that consider it strong) * is specifically available, separate from weak biometry or device credentials. */ strongBiometryIsAvailable: boolean; /** * Error code from BiometricAuthError enum. Only present when isAvailable is false. * Indicates why biometric authentication is not available. * @see BiometricAuthError */ errorCode?: BiometricAuthError;}BiometryChangeListener
Sección titulada “BiometryChangeListener”Tipo de callback para el listener de cambios biométricos.
export type BiometryChangeListener = (result: AvailableResult) => void;BiometricOptions
Sección titulada “BiometricOptions”export interface BiometricOptions { reason?: string; title?: string; subtitle?: string; description?: string; negativeButtonText?: string; /** * Only for iOS. * Specifies if should fallback to passcode authentication if biometric authentication fails. * On Android, this parameter is ignored due to BiometricPrompt API constraints: * DEVICE_CREDENTIAL authenticator and negative button (cancel) are mutually exclusive. */ useFallback?: boolean; /** * Only for iOS. * Set the text for the fallback button in the authentication dialog. * If this property is not specified, the default text is set by the system. */ fallbackTitle?: string; /** * Only for Android. * Set a maximum number of attempts for biometric authentication. The maximum allowed by android is 5. * @default 1 */ maxAttempts?: number; /** * Only for Android. * Specify which biometry types are allowed for authentication. * If not specified, all available types will be allowed. * @example [BiometryType.FINGERPRINT, BiometryType.FACE_AUTHENTICATION] */ allowedBiometryTypes?: BiometryType[];}GetCredentialOptions
Sección titulada “GetCredentialOptions”export interface GetCredentialOptions { server: string;}Credentials
Sección titulada “Credentials”export interface Credentials { username: string; password: string;}SetCredentialOptions
Sección titulada “SetCredentialOptions”export interface SetCredentialOptions { username: string; password: string; server: string; /** * Access control level for the stored credentials. * When set to BIOMETRY_CURRENT_SET or BIOMETRY_ANY, the credentials are * hardware-protected and require biometric authentication to access. * * On iOS, this adds SecAccessControl to the Keychain item. * On Android, this creates a biometric-protected Keystore key and requires * BiometricPrompt authentication for both storing and retrieving credentials. * * @default AccessControl.NONE * @since 8.4.0 */ accessControl?: AccessControl;}DeleteCredentialOptions
Sección titulada “DeleteCredentialOptions”export interface DeleteCredentialOptions { server: string;}GetSecureCredentialsOptions
Sección titulada “GetSecureCredentialsOptions”export interface GetSecureCredentialsOptions { server: string; /** * Reason for requesting biometric authentication. * Displayed in the biometric prompt on both iOS and Android. */ reason?: string; /** * Title for the biometric prompt. * Only for Android. */ title?: string; /** * Subtitle for the biometric prompt. * Only for Android. */ subtitle?: string; /** * Description for the biometric prompt. * Only for Android. */ description?: string; /** * Text for the negative/cancel button. * Only for Android. */ negativeButtonText?: string;}IsCredentialsSavedOptions
Sección titulada “IsCredentialsSavedOptions”export interface IsCredentialsSavedOptions { server: string;}IsCredentialsSavedResult
Sección titulada “IsCredentialsSavedResult”export interface IsCredentialsSavedResult { isSaved: boolean;}AuthenticationStrength
Sección titulada “AuthenticationStrength”export enum AuthenticationStrength { /** * No authentication available, even if PIN is available but useFallback = false */ NONE = 0, /** * Strong authentication: Face ID on iOS, fingerprints on devices that consider fingerprints strong (Android). * Note: PIN/pattern/password is NEVER considered STRONG, even when useFallback = true. */ STRONG = 1, /** * Weak authentication: Face authentication on Android devices that consider face weak, * or PIN/pattern/password if useFallback = true (PIN is always WEAK, never STRONG). */ WEAK = 2,}Fuente de verdad
Sección titulada “Fuente de verdad”Esta página se genera a partir del plugin src/definitions.ts. Vuelve a ejecutar el sync cuando el API público cambie en upstream.
Continúa desde Getting Started
Sección titulada “Continúa desde Primeros pasos”Si estás usando Primeros pasos para planificar los flujos de autenticación y de cuenta, conéctalo con Uso de @capgo/capacitor-native-biometric para la capacidad nativa en Uso de @capgo/capacitor-native-biometric, @capgo/capacitor-social-login para los detalles de implementación en @capgo/capacitor-social-login, @capgo/capacitor-passkey para el detalle de implementación en @capgo/capacitor-passkey, @capgo/capacitor-native-biometric para el detalle de implementación en @capgo/capacitor-native-biometric, y Autenticación de dos factores para el detalle de implementación en la autenticación de dos factores.