Les requêtes de récupération des identifiants utilisateur peuvent échouer lorsqu'un utilisateur n'a pas encore enregistré d'identifiants ou lorsqu'il ne s'est pas encore inscrit à votre application. Dans ce cas, utilisez l'API Credentials pour récupérer les conseils de connexion, tels 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 ainsi le processus d'inscription de celle-ci.
Sur Android 6.0 (Marshmallow) et versions ultérieures, votre application n'a pas besoin de demander des autorisations pour l'appareil ou l'environnement d'exécution pour récupérer des conseils de connexion à l'aide de l'API Credentials.
Avant de commencer
Configurez un projet Android Studio.
Récupérer les conseils de connexion
Pour récupérer les conseils de connexion, commencez par configurer la boîte de dialogue du sélecteur d'indications en créant un objet HintRequest
. Transmettez ensuite l'objet HintRequest
à CredentialsClient.getHintPickerIntent()
pour obtenir l'intent invitant 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);
}
L'utilisateur est invité à choisir une adresse e-mail.
Ensuite, dans la méthode onActivityResult()
de l'activité, récupérez les conseils du package 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 des 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 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 avec le jeton d'ID, sans qu'il doive saisir de 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 conseils que vous avez ajoutés à 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 conseils 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 jeton d'ID dont l'adresse e-mail a été validée. Dans ce 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.