Archivia le credenziali di un utente

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

Prima di iniziare

Configura un progetto Android Studio.

Archivia le credenziali

Crea un oggetto Credential contenente le informazioni di accesso di un utente. Per Ad esempio, per consentire agli utenti di memorizzare le proprie credenziali dopo aver eseguito l'accesso con le relative 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 accedono 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 CredentialsClient.save() per salvare e credenziali. Se la chiamata a CredentialsClient.save() non è immediatamente operazione riuscita, le credenziali potrebbero essere nuove e in questo caso l'utente deve confermare la richiesta di salvataggio. Risolvi il problema ResolvableApiException con startResolutionForResult() per richiedere una conferma all'utente.

Se l'utente sceglie di non salvare le credenziali, non gli verrà più richiesto di salvare le credenziali di qualsiasi account per l'app. Se chiami CredentialsClient.save() dopo che un utente ha eseguito la disattivazione, il relativo risultato avrà un il codice di stato CANCELED. L'utente può eseguire l'attivazione in un secondo momento dall'account Google Impostazioni, nella sezione Smart Lock per password. L'utente deve attivare il salvataggio delle credenziali per tutti gli account a cui 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 memorizzato le credenziali, recuperale chiamando CredentialsClient.request()

Targeting di Android O e versioni successive

Quando salvi le credenziali delle password utilizzando Smart Lock sui dispositivi con Android O o più recente, Smart Lock utilizza la finestra di dialogo di conferma della compilazione automatica nativa sulla sua di dialogo quando possibile. Tieni presente che le credenziali salvate utilizzando la compilazione automatica con Le app Google sono condivise in modo bidirezionale con Smart Lock per password.)