Si bien Credential Manager admite el acceso basado en contraseñas, te recomendamos que priorices los métodos de autenticación modernos y más seguros, como las llaves de acceso y Acceder con Google. Estos métodos ofrecen una seguridad y una experiencia del usuario significativamente mejores. Sin embargo, si tu aplicación debe admitir contraseñas, usa esta guía como referencia para implementar contraseñas con el Administrador de credenciales.
Credential Manager proporciona una API unificada para que tu app guarde y recupere las credenciales del usuario, incluidos los nombres de usuario y las contraseñas. Esto simplifica el proceso de acceso para los usuarios y les permite utilizar proveedores de credenciales sin problemas.
Requisitos previos
La implementación de contraseñas de Credential Manager funciona en dispositivos con Android 4.4 (nivel de API 19) y versiones posteriores.
Descripción general
En esta guía, se explican los cambios necesarios en tu app para crear, guardar y acceder con una contraseña.
- Agrega dependencias a tu app: Agrega las bibliotecas necesarias del Administrador de credenciales.
- Crea una instancia de Credential Manager: Crea una instancia de Credential Manager.
- Guardar la contraseña del usuario: Almacena las credenciales del usuario de forma segura.
- Acceder con una contraseña: Recupera y usa las credenciales almacenadas para acceder.
- Identifica los campos que deberían usar Autocompletar: Usa Autocompletar para brindar una mejor experiencia del usuario.
- Agregar compatibilidad con Vínculos de recursos digitales: Agrega compatibilidad para compartir contraseñas entre apps y sitios web vinculados.
Agrega dependencias a tu app
Agrega las siguientes dependencias al archivo build.gradle del módulo de tu app:
Kotlin
dependencies { implementation("androidx.credentials:credentials:1.7.0-alpha02") }
Groovy
dependencies { implementation "androidx.credentials:credentials:1.7.0-alpha02" }
Crea una instancia del Credential Manager
Usa el contexto de tu app o actividad para crear un objeto CredentialManager.
// Use your app or activity context to instantiate a client instance of
// CredentialManager.
private val credentialManager = CredentialManager.create(context)
Guarda la contraseña del usuario
Cuando un usuario se registre o actualice su contraseña correctamente en tu app, guarda estas credenciales en su administrador de contraseñas.
Construye una solicitud de contraseña: El objeto
CreatePasswordRequestcontiene el nombre de usuario y la contraseña que se guardarán. Llama acredentialManager.createCredential()para iniciar el proceso de guardado.Controla la respuesta: Procesa el objeto
CreatePasswordResponsey controla los errores (por ejemplo, si el usuario cancela la solicitud).
suspend fun registerPassword(username: String, password: String) {
// Initialize a CreatePasswordRequest object.
val createPasswordRequest =
CreatePasswordRequest(id = username, password = password)
// Create credential and handle result.
coroutineScope {
try {
val result =
credentialManager.createCredential(
// Use an activity based context to avoid undefined
// system UI launching behavior.
activityContext,
createPasswordRequest
)
// Handle register password result
} catch (e: CreateCredentialException) {
handleFailure(e)
}
}
}
Cómo acceder con una contraseña
Para recuperar las credenciales guardadas, compila un GetCredentialRequest con un GetPasswordOption y llama a getCredential(). Para filtrar las contraseñas que se recuperan según los IDs de usuario especificados, usa el campo opcional allowedUserIds.
val getPasswordOption = GetPasswordOption()
val credentialRequest = GetCredentialRequest.Builder()
.addCredentialOption(getPasswordOption)
.build()
Identifica los campos que deberían usar el autocompletado
El atributo android:isCredential ayuda a los proveedores de credenciales a identificar los campos destinados al autocompletar, lo que genera una experiencia del usuario más fluida. Este atributo complementa el autofillHints existente.
Estos son algunos de los beneficios de indicar que ciertos campos están destinados al autocompletar:
- Mayor precisión del autocompletado: Ayuda a los administradores de contraseñas y al sistema Android a identificar mejor los campos destinados a las credenciales.
- Experiencia del usuario mejorada: Puede generar sugerencias de autocompletar más fluidas y confiables.
Incluye el atributo isCredential en los campos de nombre de usuario y contraseña, como se muestra en el siguiente ejemplo:
<EditText
android:id="@+id/username_edittext"
android:autofillHints="username"
android:isCredential="true" />
<EditText
android:id="@+id/password_edittext"
android:inputType="textPassword"
android:autofillHints="password"
android:isCredential="true" />
Como alternativa, agrega el atributo de forma programática, como se muestra en el siguiente fragmento:
if (android.os.Build.VERSION.SDK_INT >=
android.os.Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { // Android 14
usernameEditText.isCredential = true
passwordEditText.isCredential = true
}
Agrega compatibilidad con Vínculos de recursos digitales
Para garantizar la compatibilidad con los administradores de contraseñas, debes configurar vínculos de recursos digitales entre tu app y tu sitio web. Esto permite que las credenciales se compartan de forma segura en ambas plataformas.