Pour intégrer Google Sign-In à votre application Android, configurez Google Sign-In et ajoutez un bouton à la mise en page de votre application qui lance le flux de connexion.
Avant de commencer
Configurez un projet de console Google APIs et votre projet Android Studio.
Configurer Google Sign-In et l'objet GoogleSignInClient
Dans votre méthode
onCreate
d'activité de connexion, configurez Google Sign-In pour demander les données utilisateur requises par votre application. Par exemple, pour configurer Google Sign-In de manière à demander les informations d'identification et de profil des utilisateurs, créez un objetGoogleSignInOptions
avec le paramètreDEFAULT_SIGN_IN
. Pour demander également les adresses e-mail des utilisateurs, créez l'objetGoogleSignInOptions
avec l'optionrequestEmail
.// Configure sign-in to request the user's ID, email address, and basic // profile. ID and basic profile are included in DEFAULT_SIGN_IN. GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestEmail() .build();
Si vous devez demander des niveaux d'accès supplémentaires pour accéder aux API Google, spécifiez-les avec
requestScopes
. Pour une expérience utilisateur optimale, demandez uniquement les champs d'application nécessaires à votre application pour fonctionner au moment de la connexion. Vous ne devez demander des niveaux d'accès supplémentaires que lorsque vous en avez besoin, afin que vos utilisateurs puissent voir l'écran de consentement dans le contexte d'une action qu'ils ont effectuée. Consultez la section Demander des niveaux d'accès supplémentaires.Ensuite, aussi dans la méthode
onCreate
de votre activité de connexion, créez un objetGoogleSignInClient
avec les options que vous avez spécifiées.// Build a GoogleSignInClient with the options specified by gso. mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
Rechercher un utilisateur connecté existant
Dans la méthode onStart
de votre activité, vérifiez si un utilisateur s'est déjà connecté à votre application avec Google.
// Check for existing Google Sign In account, if the user is already signed in // the GoogleSignInAccount will be non-null. GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this); updateUI(account);
Si GoogleSignIn.getLastSignedInAccount
renvoie un objet GoogleSignInAccount
(plutôt que null
), cela signifie que l'utilisateur s'est déjà connecté à votre application avec Google.
Mettez à jour votre interface utilisateur en conséquence, par exemple en masquant le bouton de connexion, en lançant votre activité principale ou tout autre élément approprié pour votre application.
Si GoogleSignIn.getLastSignedInAccount
renvoie null
, cela signifie que l'utilisateur ne s'est pas encore connecté à votre application avec Google. Mettez à jour votre interface utilisateur pour afficher le bouton Google Sign-In.
Ajouter le bouton Google Sign-In à votre appli
Ajoutez la
SignInButton
à la mise en page de votre application:<com.google.android.gms.common.SignInButton android:id="@+id/sign_in_button" android:layout_width="wrap_content" android:layout_height="wrap_content" />
Facultatif: Si vous utilisez l'image du bouton de connexion par défaut au lieu de fournir vos propres éléments de bouton de connexion, vous pouvez personnaliser la taille du bouton à l'aide de la méthode
setSize
.// Set the dimensions of the sign-in button. SignInButton signInButton = findViewById(R.id.sign_in_button); signInButton.setSize(SignInButton.SIZE_STANDARD);
Dans l'activité Android (par exemple, dans la méthode
onCreate
), enregistrez le boutonOnClickListener
pour vous connecter lorsque l'utilisateur clique:findViewById(R.id.sign_in_button).setOnClickListener(this);
Démarrer le processus de connexion
Dans la méthode
onClick
de l'activité, gérez les appuis sur le bouton de connexion en créant un intent de connexion avec la méthodegetSignInIntent
et en démarrant l'intent avecstartActivityForResult
.@Override public void onClick(View v) { switch (v.getId()) { case R.id.sign_in_button: signIn(); break; // ... } }
private void signIn() { Intent signInIntent = mGoogleSignInClient.getSignInIntent(); startActivityForResult(signInIntent, RC_SIGN_IN); }
L'utilisateur est invité à sélectionner un compte Google à se connecter. Si vous avez demandé des niveaux d'accès supérieurs à
profile
,email
etopenid
, l'utilisateur est également invité à accorder l'accès aux ressources demandées.Une fois l'utilisateur connecté, vous pouvez obtenir un objet
GoogleSignInAccount
pour l'utilisateur dans la méthodeonActivityResult
de l'activité.@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // Result returned from launching the Intent from GoogleSignInClient.getSignInIntent(...); if (requestCode == RC_SIGN_IN) { // The Task returned from this call is always completed, no need to attach // a listener. Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data); handleSignInResult(task); } }
L'objet
GoogleSignInAccount
contient des informations sur l'utilisateur connecté, telles que son nom.private void handleSignInResult(Task<GoogleSignInAccount> completedTask) { try { GoogleSignInAccount account = completedTask.getResult(ApiException.class); // Signed in successfully, show authenticated UI. updateUI(account); } catch (ApiException e) { // The ApiException status code indicates the detailed failure reason. // Please refer to the GoogleSignInStatusCodes class reference for more information. Log.w(TAG, "signInResult:failed code=" + e.getStatusCode()); updateUI(null); } }
Vous pouvez également obtenir l'adresse e-mail de l'utilisateur avec
getEmail
, l'ID Google de l'utilisateur (pour une utilisation côté client) avecgetId
et un jeton d'ID pour l'utilisateur avecgetIdToken
. Si vous devez transmettre l'utilisateur actuellement connecté à un serveur backend, envoyez le jeton d'ID à votre serveur backend et validez le jeton sur le serveur.