Integrar o Gerenciador de credenciais ao preenchimento automático

A partir do Android 15 Beta 2, em conjunto com androidx.credentials:1.5.0-alpha01, os desenvolvedores podem vincular visualizações específicas, como campos de nome de usuário ou senha, a solicitações do Gerenciador de credenciais. Quando o usuário se concentra em uma dessas visualizações, a solicitação correspondente é enviada ao Credential Manager. As credenciais resultantes são agregadas entre os provedores e exibidas nas interfaces de preenchimento automático, como sugestões inline do teclado ou sugestões do menu suspenso. Esse recurso pode ser usado como substituto quando os usuários dispensam acidentalmente o seletor de contas do Gerenciador de credenciais e tocam nos campos relevantes.

A biblioteca Jetpack androidx.credentials é o endpoint preferencial para desenvolvedores usarem com esse recurso.

Ilustração mostrando credenciais nos resultados do preenchimento automático
Figura 1:resultados de preenchimento automático com credenciais usando senha, chave de acesso e Fazer login com o Google.

Implementação

Se quiser usar o Gerenciador de credenciais para mostrar credenciais nos resultados do preenchimento automático, use a implementação padrão para criar uma GetCredentialRequest e a definir para as visualizações relevantes. O processamento da resposta é o mesmo, seja da chamada de API getCredential ou da PendingGetCredentialRequest, conforme mostrado no exemplo abaixo.

Primeiro, crie um GetCredentialRequest:

Kotlin

// 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)
)

Java

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

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

GetCredentialRequest getCredRequest = new GetCredentialRequest(
    Arrays.asList(getPasswordOption, getPublicKeyCredentialOption)
);

Em seguida, chame a API getCredential. Isso mostra o seletor do Gerenciador de credenciais.

Kotlin

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

Java

coroutineScope.launch(new CoroutineScopeRunnable() {
    @Override
    public void run(@NonNull CoroutineScope scope) {
        try {
            GetCredentialResponse result = credentialManager.getCredential(
                activityContext, // Use an activity-based context.
                getCredRequest
            );
            handleSignIn(result);
        } catch (GetCredentialException e) {
            handleFailure(e);
        }
    }
});

Por fim, ative a experiência de preenchimento automático. Defina o getCredRequest para visualizações relevantes (como username, password) para ativar os resultados de preenchimento automático de credenciais quando o usuário interagir com essas visualizações.

Kotlin

import androidx.credentials.PendingGetCredentialRequest

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

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

Java

import androidx.credentials.CredentialManagerViewHandler;
import androidx.credentials.PendingGetCredentialRequest;

CredentialManagerViewHandler.setPendingGetCredentialRequest(
               usernameEditText, new PendingGetCredentialRequest(
                       getCredRequest, result -> {
                           handleSignIn(result);
                           return null;
                       }
               )

CredentialManagerViewHandler.setPendingGetCredentialRequest(
               passwordEditText, new PendingGetCredentialRequest(
                       getCredRequest, result -> {
                           handleSignIn(result);
                           return null;
                       }
               )