Intégrer Google Sign-In à votre application Android

Pour intégrer Google Sign-In à votre application Android, configurez Google Sign-In et Ajoutez à la mise en page de votre application un bouton qui lance 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

  1. Dans la méthode onCreate de votre activité de connexion, configurez Google Sign-In pour demander les données utilisateur requises par votre application. Par exemple, pour configurer Google Sign-In pour demander aux utilisateurs et les informations de base du profil, créez un GoogleSignInOptions avec le paramètre DEFAULT_SIGN_IN. Pour demander l'autorisation adresse e-mail des adresses e-mail, créez l'objet GoogleSignInOptions avec requestEmail.

    // 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, lors de la connexion, ne demandez que les champs d'application nécessaires au fonctionnement minimal de votre application. Demander des champs d'application supplémentaires uniquement lorsque vous en avez besoin, afin que l'écran de consentement s'affiche le contexte d'une action qu'il a effectuée. Consultez la section Demander des champs d'application supplémentaires.

  2. Ensuite, également dans la méthode onCreate de votre activité de connexion, créez un GoogleSignInClient avec les options que vous avez spécifiées.

    // Build a GoogleSignInClient with the options specified by gso.
    mGoogleSignInClient = GoogleSignIn.getClient(this, gso);

Vérifier si un utilisateur connecté existe

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 (et non null), l'utilisateur s'est déjà connecté à votre application avec Google. Mettez à jour votre interface utilisateur en conséquence, c'est-à-dire masquez le bouton de connexion, lancez votre votre activité principale ou tout autre élément approprié pour votre application.

Si GoogleSignIn.getLastSignedInAccount renvoie null, cela signifie que l'utilisateur n'a pas encore connecté à votre application avec Google. Mettre à jour votre interface utilisateur pour afficher Google Sign-In .

Ajouter le bouton Google Sign-In à votre application

  1. Bouton de connexion Google standard Ajoutez le 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" />
    
  2. 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 taille avec l'attribut setSize .

    // Set the dimensions of the sign-in button.
    SignInButton signInButton = findViewById(R.id.sign_in_button);
    signInButton.setSize(SignInButton.SIZE_STANDARD);
  3. Dans l'activité Android (par exemple, dans la méthode onCreate), enregistrez l'OnClickListener de votre bouton pour connecter l'utilisateur lorsqu'il clique dessus :

    findViewById(R.id.sign_in_button).setOnClickListener(this);
    

Démarrer le flux de connexion

  1. Image du sélecteur de compte 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 getSignInIntent en commençant par startActivityForResult.

    @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 démarrage de l'intent invite l'utilisateur à sélectionner un compte Google pour se connecter. . Si vous avez demandé des niveaux d'accès au-delà de profile, email et openid, le l'utilisateur est également invité à accorder l'accès aux ressources demandées.

  2. Une fois l'utilisateur connecté, vous pouvez obtenir un objet GoogleSignInAccount pour l'utilisateur dans la méthode onActivityResult 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é, 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, l'ID Google de l'utilisateur (pour une utilisation côté client) avec getId ; et un jeton d'ID pour l'utilisateur avec getIdToken. Si vous devez transmettre l'utilisateur actuellement connecté à un serveur backend, Envoyer le jeton d'ID à votre serveur backend et valider le jeton sur le serveur.