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