Le richieste per recuperare le credenziali utente possono non riuscire se un utente non ha ancora salvato le credenziali o se un utente non si è ancora registrato alla tua app. In questi casi, usa l'API Credentials per recuperare i suggerimenti di accesso, ad esempio il nome e l'indirizzo email dell'utente. Utilizza questi suggerimenti per precompilare i moduli di accesso e registrazione della tua app, velocizzando così il processo di inserimento.
Su Android 6.0 (Marshmallow) e versioni successive, l'app non deve richiedere autorizzazioni di runtime o del dispositivo per recuperare i suggerimenti di accesso con l'API Credentials.
Prima di iniziare
Configurare un progetto Android Studio.
Recupera i suggerimenti di accesso
Per recuperare i suggerimenti di accesso, configura prima la finestra di dialogo del selettore di suggerimenti creando un oggetto HintRequest
. Quindi, passa l'oggetto HintRequest
a
CredentialsClient.getHintPickerIntent()
per generare un intent che richieda all'utente di scegliere un indirizzo email. Infine, avvia l'intent con startIntentSenderForResult()
.
HintRequest hintRequest = new HintRequest.Builder()
.setHintPickerConfig(new CredentialPickerConfig.Builder()
.setShowCancelButton(true)
.build())
.setEmailAddressIdentifierSupported(true)
.setAccountTypes(IdentityProviders.GOOGLE)
.build();
PendingIntent intent = mCredentialsClient.getHintPickerIntent(hintRequest);
try {
startIntentSenderForResult(intent.getIntentSender(), RC_HINT, null, 0, 0, 0);
} catch (IntentSender.SendIntentException e) {
Log.e(TAG, "Could not start hint picker Intent", e);
}
All'utente viene richiesto di scegliere un indirizzo email da utilizzare.
Quindi, nel metodo onActivityResult()
dell'attività, recupera i hint dal pacchetto Credential.EXTRA_KEY
, controlla se l'utente si trova nel tuo database utente e avvia l'attività appropriata con il suggerimento per le credenziali.
@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == RC_HINT) { if (resultCode == RESULT_OK) { Credential credential = data.getParcelableExtra(Credential.EXTRA_KEY); Intent intent; // Check for the user ID in your user database. if (userDatabaseContains(credential.getId())) { intent = new Intent(this, SignInActivity.class); } else { intent = new Intent(this, SignUpNewUserActivity.class); } intent.putExtra("com.mycompany.myapp.SIGNIN_HINTS", credential); startActivity(intent); } else { Log.e(TAG, "Hint Read: NOT OK"); Toast.makeText(this, "Hint Read Failed", Toast.LENGTH_SHORT).show(); } } ... }
Precompila il modulo di accesso
Se l'utente si trova nel tuo database utenti e hai avviato l'attività di accesso dell'app, puoi controllare (facoltativamente) se l'oggetto Credential
contiene un token ID. In questo caso, puoi accedere all'utente con il token ID,
senza richiedere all'utente di digitare una password.
Se l'oggetto Credential
non contiene un token ID (o non vuoi utilizzarlo), precompila i campi di accesso con i suggerimenti che hai aggiunto all'intent.
public class SignInActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getIntent();
Credential credential = intent.getParcelableExtra("com.mycompany.myapp.SIGNIN_HINTS");
// Pre-fill ID field
mUsernameView.setText(credential.getId());
...
}
...
}
Precompila il modulo di registrazione
Se l'utente non si trova nel tuo database di utenti e hai avviato l'attività di registrazione dell'app, precompila i campi di registrazione con i suggerimenti di accesso che hai aggiunto all'intent.
public class SignUpNewUserActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getIntent();
Credential credential = intent.getParcelableExtra("com.mycompany.myapp.SIGNIN_HINTS");
// Pre-fill sign-up fields
mUsernameView.setText(credential.getId());
mDisplaynameView.setText(credential.getName()); // Might be null.
...
}
...
}
Facoltativamente, puoi anche controllare se l'oggetto Credential
contiene un token ID con un indirizzo email verificato. In questo caso, puoi saltare il passaggio di verifica email
dell'app, poiché l'indirizzo email è già stato verificato da Google.