Armazenar as credenciais de um usuário

Depois que os usuários fizerem login, criar contas ou alterar senhas, permita que eles armazenem as credenciais para automatizar a autenticação futura no app.

Antes de começar

Configurar um projeto do Android Studio.

Armazenar credenciais

Criar um objeto Credential contendo as informações de login do usuário. Por exemplo, para permitir que os usuários armazenem as próprias credenciais depois de fazer login com as senhas:

Credential credential = new Credential.Builder(email)
        .setPassword(password)  // Important: only store passwords in this field.
                                // Android autofill uses this value to complete
                                // sign-in forms, so repurposing this field will
                                // likely cause errors.
        .build();

Por exemplo, depois que os usuários fizerem login com a Conta do Google:

GoogleSignInAccount gsa = signInTask.getResult();
Credential credential = new Credential.Builder(gsa.getEmail())
        .setAccountType(IdentityProviders.GOOGLE)
        .setName(gsa.getDisplayName())
        .setProfilePictureUri(gsa.getPhotoUrl())
        .build();

Caixa de diálogo "Salvar" do Smart Lock Em seguida, chame CredentialsClient.save() para salvar as credenciais dos usuários. Se a chamada para CredentialsClient.save() não for bem-sucedida imediatamente, as credenciais poderão ser novas. Nesse caso, o usuário precisará confirmar a solicitação de salvamento. Resolva o ResolvableApiException com startResolutionForResult() para solicitar a confirmação do usuário.

Se o usuário optar por não salvar as credenciais, o usuário não receberá uma nova solicitação para salvar as credenciais da conta do app. Se você chamar CredentialsClient.save() depois que um usuário desativar essa opção, o resultado terá um código de status CANCELED. O usuário pode ativar mais tarde no app Configurações do Google, na seção Smart Lock para senhas. É necessário que o usuário ative o salvamento de credenciais para todas as contas para receber a solicitação de salvar credenciais na próxima vez.

mCredentialsClient.save(credential).addOnCompleteListener(
        new OnCompleteListener() {
            @Override
            public void onComplete(@NonNull Task task) {
                if (task.isSuccessful()) {
                    Log.d(TAG, "SAVE: OK");
                    Toast.makeText(activity, "Credentials saved", Toast.LENGTH_SHORT).show();
                    return;
                }

                Exception e = task.getException();
                if (e instanceof ResolvableApiException) {
                    // Try to resolve the save request. This will prompt the user if
                    // the credential is new.
                    ResolvableApiException rae = (ResolvableApiException) e;
                    try {
                        rae.startResolutionForResult(this, RC_SAVE);
                    } catch (IntentSender.SendIntentException exception) {
                        // Could not resolve the request
                        Log.e(TAG, "Failed to send resolution.", exception);
                        Toast.makeText(activity, "Save failed", Toast.LENGTH_SHORT).show();
                    }
                } else {
                    // Request has no resolution
                    Toast.makeText(activity, "Save failed", Toast.LENGTH_SHORT).show();
                }
            }
        });
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    // ...

    if (requestCode == RC_SAVE) {
        if (resultCode == RESULT_OK) {
            Log.d(TAG, "SAVE: OK");
            Toast.makeText(this, "Credentials saved", Toast.LENGTH_SHORT).show();
        } else {
            Log.e(TAG, "SAVE: Canceled by user");
        }
    }

    // ...

}

Depois de armazenar as credenciais, recupere-as chamando CredentialsClient.request().

Segmenta o Android O e versões mais recentes

Quando você salva as credenciais de senha usando o Smart Lock em dispositivos com o Android O ou mais recentes, o Smart Lock usa a caixa de diálogo de confirmação do preenchimento automático nativa na própria caixa de diálogo sempre que possível. Observação: as credenciais salvas usando o preenchimento automático do Google são compartilhadas bidirecionalmente com o Smart Lock para senhas.