Fournir des indications de connexion à un utilisateur

Les requêtes de récupération des identifiants utilisateur peuvent échouer si l'utilisateur ne les a pas encore enregistrés ou s'il ne s'est pas encore inscrit à votre application. Dans ce cas, utilisez l'API Credentials pour récupérer des indications de connexion, telles que le nom et l'adresse e-mail de l'utilisateur. Utilisez ces conseils pour préremplir les formulaires de connexion et d'inscription de votre application, et accélérer le processus d'intégration.

Sur Android 6.0 (Marshmallow) ou version ultérieure, votre application n'a pas besoin de demander d'autorisations d'appareil ou d'exécution pour récupérer les indications de connexion avec l'API Credentials.

Avant de commencer

Configurez un projet Android Studio.

Récupérer les suggestions de connexion

Pour récupérer les suggestions de connexion, commencez par configurer la boîte de dialogue du sélecteur d'indices en créant un objet HintRequest. Transmettez ensuite l'objet HintRequest à CredentialsClient.getHintPickerIntent() pour qu'un intent invite l'utilisateur à choisir une adresse e-mail. Enfin, démarrez l'intent avec 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);
}

Sélecteur d'indices pour la connexion Smart Lock

L'utilisateur est invité à choisir une adresse e-mail à utiliser.

Ensuite, dans la méthode onActivityResult() de l'activité, récupérez les indices du paquet Credential.EXTRA_KEY, vérifiez si l'utilisateur se trouve dans votre base de données utilisateur et démarrez l'activité appropriée à l'aide de l'indice d'identification.

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

    ...

}

Préremplir le formulaire de connexion

Si l'utilisateur se trouve dans votre base de données utilisateur et que vous avez démarré l'activité de connexion de votre application, vous pouvez (éventuellement) vérifier si l'objet Credential contient un jeton d'ID. Si tel est le cas, vous pouvez connecter l'utilisateur à l'aide du jeton d'ID sans lui demander de saisir un mot de passe.

Si l'objet Credential ne contient pas de jeton d'ID (ou si vous ne souhaitez pas utiliser de jeton d'ID), remplissez à l'avance les champs de connexion avec les indications que vous avez ajoutées à l'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());

        ...
    }

    ...
}

Préremplir le formulaire d'inscription

Si l'utilisateur ne figure pas dans votre base de données des utilisateurs et que vous avez démarré l'activité d'inscription de votre application, remplissez à l'avance les champs d'inscription avec les indications de connexion que vous avez ajoutées à l'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.

        ...
    }

    ...
}

Vous pouvez également vérifier si l'objet Credential contient un jeton d'ID avec une adresse e-mail validée. Si tel est le cas, vous pouvez ignorer l'étape de validation de l'adresse e-mail de votre application, car l'adresse e-mail a déjà été validée par Google.