Archivia le credenziali di un utente

Dopo che gli utenti hanno eseguito l'accesso, creato account o cambiato password, consenti loro di memorizzare le proprie credenziali per automatizzare l'autenticazione futura nella tua app.

Prima di iniziare

Configura un progetto Android Studio.

Archivia credenziali

Crea un oggetto Credential contenente le informazioni di accesso di un utente. Ad esempio, per consentire agli utenti di archiviare le proprie credenziali dopo aver eseguito l'accesso con le password:

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

Oppure, ad esempio, dopo che gli utenti hanno eseguito l'accesso con il proprio Account Google:

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

Finestra di dialogo Salva Smart Lock

Quindi, chiama il numero CredentialsClient.save() per salvare le credenziali degli utenti. Se la chiamata a CredentialsClient.save() non va a buon fine, le credenziali potrebbero essere nuove, nel qual caso l'utente deve confermare la richiesta di salvataggio. Risolvi il problema ResolvableApiException con startResolutionForResult() per richiedere la conferma all'utente.

Se l'utente sceglie di non salvare le credenziali, all'utente non verrà più chiesto di salvare le credenziali dell'account per l'app. Se chiami CredentialsClient.save() dopo che un utente ha disattivato l'opzione, il risultato mostrerà un codice di stato CANCELED. L'utente può attivare la funzionalità in un secondo momento dall'app Impostazioni Google, nella sezione Smart Lock per password. L'utente deve attivare il salvataggio delle credenziali per tutti gli account al quale verrà chiesto di salvare le credenziali la prossima volta.

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");
            }
        }

        // ...

    }

Dopo aver archiviato le credenziali, recuperale chiamando CredentialsClient.request().

Targeting Android O e versioni successive

Quando salvi le credenziali delle password tramite Smart Lock su dispositivi con Android O o versioni successive, Smart Lock utilizza la finestra di dialogo di conferma nativa con compilazione automatica, se possibile, su una propria finestra di dialogo. Tieni presente che le credenziali salvate utilizzando la compilazione automatica Google vengono condivise bidirezionale con Smart Lock per password.