Fournir des indications de connexion à un utilisateur

<ph type="x-smartling-placeholder">

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

Sur Android 6.0 (Marshmallow) et versions ultérieures, il n'est pas nécessaire de demander n'importe quelle autorisation de l'appareil ou de l'environnement d'exécution pour récupérer les indices de connexion Credentials.

Avant de commencer

Configurez un projet Android Studio.

Récupérer les indices de connexion

Pour les récupérer, commencez par configurer la boîte de dialogue du sélecteur d'indices en procédant comme suit : créer une HintRequest . Ensuite, transmettez l'objet HintRequest à CredentialsClient.getHintPickerIntent() pour obtenir un intent invitant l'utilisateur à choisir une adresse e-mail. Enfin, démarrez la 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&#39;indices de connexion Smart Lock

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

Ensuite, dans la méthode onActivityResult() de l'activité, récupérez les indices à partir du Credential.EXTRA_KEY parcelle, vérifiez si l'utilisateur figure dans votre base de données utilisateur, et démarrer l'activité appropriée avec 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 figure dans votre base de données d'utilisateurs et que vous avez lancé la procédure de connexion à votre application activité, vous pouvez vérifier si l'objet Credential contient un ID (facultatif). à partir d'un jeton d'accès. Si tel est le cas, vous pouvez connecter l'utilisateur à l'aide du jeton d'ID, sans que l'utilisateur ait à saisir un mot de passe.

Si l'objet Credential ne contient pas de jeton d'ID (ou si vous ne souhaitez pas utiliser le jeton d'ID), préremplissez les champs de connexion avec les indications que vous avez ajoutées au l'intention.

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 d'utilisateurs et que vous avez lancé le processus d'inscription à votre application d'inscription, préremplissez les champs d'inscription avec les indices de connexion que vous avez ajoutés 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 Un jeton d'ID ayant un une adresse e-mail validée. Si c'est le cas, vous pouvez ignorer l'étape de vérification de l'adresse e-mail de votre application, car l'adresse e-mail a déjà été validée par Google.