Cómo integrar Credential Manager con la función Autocompletar

A partir de Android 15 Beta 2, junto con androidx.credentials:1.5.0-alpha01, los desarrolladores pueden vincular vistas específicas, como campos de nombre de usuario o contraseña, con solicitudes de Credential Manager. Cuando el usuario enfoca una de estas vistas, se envía la solicitud correspondiente a Credential Manager. Las credenciales resultantes se agregan en todos los proveedores y se muestran en las IUs de autocompletado, como sugerencias intercaladas del teclado o sugerencias de menú desplegable. Esta función se puede usar como alternativa cuando los usuarios descartan accidentalmente el selector de cuentas de Credential Manager y, luego, presionan los campos pertinentes.

La biblioteca Jetpack androidx.credentials es el extremo preferido que los desarrolladores deben usar para esta función.

Ilustración que muestra las credenciales en los resultados de autocompletado
Figura 1: Resultados de autocompletado con credenciales que usan contraseña, llave de acceso y Acceder con Google.

Implementación

Para usar Credential Manager y mostrar credenciales en los resultados de autocompletado, usa la implementación estándar para compilar un GetCredentialRequest y, luego, configúralo en las vistas pertinentes. El manejo de respuestas es el mismo, ya sea que la respuesta provenga de la llamada a la API getCredential o de PendingGetCredentialRequest, como se muestra en el siguiente ejemplo.

Primero, construye un GetCredentialRequest:

// Retrieves the user's saved password for your app.
val getPasswordOption = GetPasswordOption()

// Get a passkey from the user's public key credential provider.
val getPublicKeyCredentialOption = GetPublicKeyCredentialOption(
    requestJson = requestJson
)

val getCredRequest = GetCredentialRequest(
    listOf(getPasswordOption, getPublicKeyCredentialOption)
)

Luego, llama a la API getCredential. Se mostrará el selector de Credential Manager.

coroutineScope {
    try {
        val result = credentialManager.getCredential(
            context = activityContext, // Use an activity-based context.
            request = getCredRequest
        )
        handleSignIn(result)
    } catch (e: GetCredentialException) {
        handleFailure(e)
    }
}

Por último, habilita la experiencia de autocompletado. Configura el getCredRequest en las vistas pertinentes (como username, password) para habilitar los resultados de credenciales en el autocompletado cuando el usuario interactúa con estas vistas.

usernameEditText.pendingGetCredentialRequest = PendingGetCredentialRequest(
    getCredRequest
) { response ->
    handleSignIn(response)
}

passwordEditText.pendingGetCredentialRequest = PendingGetCredentialRequest(
    getCredRequest
) { response ->
    handleSignIn(response)
}