Fornire suggerimenti di accesso a un utente

Le richieste di recupero delle credenziali utente possono non riuscire se un utente non ha ancora salvato credenziali o quando un utente non si è ancora registrato alla tua app. In queste in situazioni simili, utilizza l'API Credentials per recuperare i suggerimenti di accesso, come il nome e l'indirizzo email dell'utente. Usa questi suggerimenti per precompilare l'accesso alla tua app e moduli di registrazione, velocizzando le procedure di onboarding della tua app.

Su Android 6.0 (Marshmallow) e versioni successive, l'app non deve richiedere eventuali autorizzazioni del dispositivo o di runtime per recuperare i suggerimenti di accesso con API Credentials.

Prima di iniziare

Configura un progetto Android Studio.

Recupera i suggerimenti di accesso

Per recuperare i suggerimenti di accesso, configura innanzitutto la finestra di dialogo del selettore di suggerimenti la creazione di una HintRequest . Quindi, passa l'oggetto HintRequest a CredentialsClient.getHintPickerIntent() per avere l'intenzione di chiedere all'utente di scegliere un indirizzo email. Infine, avvia la 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);
}

Selettore suggerimenti di accesso con Smart Lock

All'utente viene chiesto di scegliere un indirizzo email da utilizzare.

Poi, nel metodo onActivityResult() dell'attività, recupera i suggerimenti dalla lotto Credential.EXTRA_KEY, controlla se l'utente si trova nel database utenti e avviare l'attività appropriata con il suggerimento 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'accesso alla tua app puoi controllare (facoltativamente) se l'oggetto Credential contiene un ID di accesso. 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 utilizzare il token ID), precompila i campi di accesso con i suggerimenti che hai aggiunto l'intento.

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 è nel tuo database utenti e hai avviato la registrazione dell'app attività, precompila i campi di registrazione con i suggerimenti di accesso che hai aggiunto l'intento.

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 verificare se l'oggetto Credential contiene un oggetto token ID con un all'indirizzo email verificato. In tal caso, puoi saltare il passaggio di verifica email dell'app, poiché l'indirizzo email è già stato verificato da Google.