Armazenar as credenciais de um usuário

Após os usuários fazerem login, criarem contas ou alterarem senhas, permita que armazenem as credenciais para automatizar a autenticação futura no aplicativo.

Antes de começar

Configure um projeto do Android Studio.

Armazenar credenciais

Crie um objeto Credential que contenha as informações de login de um usuário. Para exemplo, para permitir que os usuários armazenem suas credenciais depois de fazer login com sucesso com as senhas deles:

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();

Ou, por exemplo, depois que os usuários fazer 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 credenciais. Se a chamada para CredentialsClient.save() não for feita imediatamente bem-sucedido, as credenciais podem ser novas. Nesse caso, o usuário deve confirmar a solicitação de salvamento. Resolver a ResolvableApiException com startResolutionForResult() para pedir a confirmação do usuário.

Se o usuário optar por não salvar as credenciais, ele não receberá outra solicitação para salvar as credenciais da conta para o app. Se você ligar CredentialsClient.save() após a desativação, o resultado terá uma Código de status de CANCELED. O usuário pode aceitar mais tarde no Google App Configurações, na seção Smart Lock para senhas. O usuário precisa ativar o salvamento de credenciais para todas as contas será solicitado a salvar as credenciais na próxima vez.

mCredentialsClient.save(credential).addOnCompleteListener(
        new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> 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();
                }
            }
        });</pre>

    @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()

Direcionado para o Android O e mais recentes

Quando você salva credenciais de senha usando o Smart Lock em dispositivos com o Android O ou mais recente, o Smart Lock usa a caixa de diálogo de confirmação do preenchimento automático nativa em vez da própria sempre que possível. (Observe que as credenciais salvas usando o Preenchimento automático com o Google é compartilhado bidirecionalmente com o Smart Lock para senhas.