Fournir des indications de connexion à un utilisateur

Les requêtes de récupération des identifiants utilisateur peuvent échouer si un 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 indices 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 des indices de connexion avec l'API Credentials.

Avant de commencer

Configurez un projet Android Studio.

Récupérer les indications de connexion

Pour récupérer les suggestions de connexion, configurez d'abord la boîte de dialogue du sélecteur d'indices en créant un objet HintRequest. Transmettez ensuite l'objet HintRequest à CredentialsClient.getHintPickerIntent() pour obtenir un intent qui 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 de 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 indications 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'identifiants.

@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 à 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 demander à l'utilisateur de saisir un mot de passe.

Si l'objet Credential ne contient pas de jeton d'ID (ou si vous ne souhaitez pas utiliser ce jeton), remplissez 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 utilisateur et que vous avez démarré l'activité d'inscription de votre application, remplissez 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 doté d'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.