Saltar al contenido

Comenzar

Terminal window
npm install @capgo/capacitor-autofill-save-password
npx cap sync
  • iOS: Soporte completo (iOS 18.3 y versiones anteriores)
  • Android: Trabajo en progreso

Configura dominios asociados en tu cuenta de Apple Developer y agrégalos a tu archivo App.entitlements:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.developer.associated-domains</key>
<array>
<string>webcredentials:yourdomain.com</string>
<string>webcredentials:www.yourdomain.com</string>
</array>
</dict>
</plist>

Agrega un archivo .well-known/apple-app-site-association a tu sitio web:

{
"webcredentials": {
"apps": [
"TEAMID.com.yourcompany.yourapp"
]
}
}

Agrega a android/app/build.gradle:

apply plugin: 'com.google.gms.google-services'

Agrega a android/app/src/main/res/values/strings.xml:

<resources>
<string name="asset_statements">
[{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "web",
"site": "https://yourdomain.com"
}
}]
</string>
</resources>
import { SavePassword } from '@capgo/capacitor-autofill-save-password';
// Guardar contraseña después de un inicio de sesión exitoso
async function login(username: string, password: string) {
try {
// Realiza tu lógica de inicio de sesión aquí
const loginSuccess = await performLogin(username, password);
if (loginSuccess) {
// Solicitar al usuario guardar la contraseña
await SavePassword.promptDialog({
username: username,
password: password,
url: 'https://yourdomain.com' // Solo iOS
});
console.log('Password saved successfully');
}
} catch (error) {
console.error('Failed to save password:', error);
}
}
// Leer contraseña guardada para autocompletar
async function loadSavedCredentials() {
try {
const credentials = await SavePassword.readPassword();
if (credentials.username && credentials.password) {
console.log('Found saved credentials');
// Pre-llenar formulario de inicio de sesión
return {
username: credentials.username,
password: credentials.password
};
}
} catch (error) {
console.error('Failed to read saved password:', error);
}
return null;
}
promptDialog(options: SavePasswordOptions) => Promise<void>

Guarda credenciales de usuario en el llavero del sistema.

ParámetroTipo
optionsSavePasswordOptions
readPassword() => Promise<SavedCredentials>

Recupera credenciales guardadas del llavero del sistema.

Retorna: Promise<SavedCredentials>

PropiedadTipoDescripción
usernamestringEl nombre de usuario a guardar
passwordstringLa contraseña a guardar
urlstringSolo iOS - URL del dominio asociado (opcional)
PropiedadTipoDescripción
usernamestringEl nombre de usuario guardado
passwordstringLa contraseña guardada

Integración con Flujo de Inicio de Sesión

Section titled “Integración con Flujo de Inicio de Sesión”
import { SavePassword } from '@capgo/capacitor-autofill-save-password';
class AuthService {
async login(username: string, password: string) {
try {
// Autenticarse con tu backend
const response = await fetch('/api/login', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ username, password })
});
if (response.ok) {
// Ofrecer guardar credenciales
await this.offerToSavePassword(username, password);
return true;
}
} catch (error) {
console.error('Login failed:', error);
}
return false;
}
private async offerToSavePassword(username: string, password: string) {
try {
await SavePassword.promptDialog({
username,
password,
url: 'https://yourdomain.com'
});
} catch (error) {
// Usuario rechazó guardar o ocurrió un error
console.log('Password not saved:', error);
}
}
async loadSavedCredentials() {
try {
return await SavePassword.readPassword();
} catch (error) {
console.log('No saved credentials found');
return null;
}
}
}
  • Solo solicita guardar contraseñas después de una autenticación exitosa
  • Maneja casos donde los usuarios rechazan guardar contraseñas con elegancia
  • Implementa manejo de errores adecuado para fallos de acceso al llavero
  • Usa dominios asociados para compartir credenciales sin problemas entre web y app
  • Prueba la funcionalidad de autocompletar en diferentes versiones de iOS
  • Las credenciales se almacenan en el llavero del sistema con indicadores de seguridad apropiados
  • Los dominios asociados aseguran que las credenciales solo sean accesibles para aplicaciones autorizadas
  • Sigue las pautas de seguridad de la plataforma para la gestión de credenciales
  • Considera implementar medidas de seguridad adicionales para aplicaciones sensibles