Pour intégrer Google Sign-In à votre application Android, configurez Google Sign-In et ajoutez un bouton à la mise en page de votre application pour lancer le flux de connexion.
Avant de commencer
Configurez un projet dans la console Google APIs et configurez votre projet Android Studio.
Configurer Google Sign-In et l'objet GoogleSignInClient
Dans la méthode
onCreatede votre activité de connexion, configurez Google Sign-In de sorte qu'il demande les données utilisateur requises par votre application. Par exemple, pour configurer Google Sign-In de sorte qu'il demande l'ID et les informations de profil de base des utilisateurs, créez un objetGoogleSignInOptionsavec le paramètreDEFAULT_SIGN_IN. Pour demander également les adresses e-mail des utilisateurs, créez l'objetGoogleSignInOptionsavec 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 champs d'application supplémentaires pour accéder aux API Google, spécifiez-les avec
requestScopes. Pour une expérience utilisateur optimale, ne demandez que les niveaux d'accès nécessaires au fonctionnement minimal de votre application lors de la connexion. Ne demandez des autorisations supplémentaires que lorsque vous en avez besoin, afin que vos utilisateurs voient l'écran d'autorisation dans le contexte d'une action qu'ils ont effectuée. Consultez Demander des autorisations supplémentaires.Ensuite, toujours dans la méthode
onCreatede votre activité de connexion, créez un objetGoogleSignInClientavec les options que vous avez spécifiées.// Build a GoogleSignInClient with the options specified by gso. mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
Vérifier l'existence d'un utilisateur connecté
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), l'utilisateur s'est déjà connecté à votre application avec Google.
Mettez à jour votre UI en conséquence (c'est-à-dire, masquez le bouton de connexion, lancez votre activité principale ou toute autre action appropriée 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 UI pour afficher le bouton de connexion avec Google.
Ajouter le bouton Google Sign-In à votre application
Ajoutez 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 le 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 avec 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 l'OnClickListenerde votre bouton pour connecter l'utilisateur lorsqu'il clique dessus :findViewById(R.id.sign_in_button).setOnClickListener(this);
Démarrer le flux de connexion
Dans la méthode onClickde l'activité, gérez les appuis sur le bouton de connexion en créant un intent de connexion avec la méthodegetSignInIntentet 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); }Le lancement de l'intent invite l'utilisateur à sélectionner un compte Google avec lequel se connecter. Si vous avez demandé d'autres éléments que
profile,emailetopenid, l'utilisateur est également invité à accorder l'accès aux ressources demandées.Une fois l'utilisateur connecté, vous pouvez obtenir un objet
GoogleSignInAccountpour l'utilisateur dans la méthodeonActivityResultde 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
GoogleSignInAccountcontient des informations sur l'utilisateur connecté, comme 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, son ID Google (pour une utilisation côté client) avecgetIdet un jeton d'identification pour l'utilisateur avecgetIdToken. Si vous devez transmettre l'utilisateur actuellement connecté à un serveur backend, envoyez le jeton d'identité à votre serveur backend et validez le jeton sur le serveur.