Pour les scénarios de connexion utilisateur avec authentification uniquement, nous vous recommandons d'utiliser les nouveaux boutons Se connecter avec Google et One Tap pour les applications Android natives et Web .

Intégration de Google Sign-In dans votre application Android

Pour intégrer Google Sign-In dans votre application Android, configurez Google Sign-In et ajoutez un bouton à la présentation de votre application qui démarre le flux de connexion.

Avant que tu commences

Configurer un projet API Google Console et configurer votre projet Android studio .

Configurer Google Sign-in et l'objet GoogleSignInClient

  1. Dans votre signe dans l' activité de onCreate méthode, configurer session Google pour demander les données utilisateur requises par votre application. Par exemple, pour configurer Google Connectez-vous à l'ID utilisateur de demande et des informations de profil de base, créer un GoogleSignInOptions objet avec le DEFAULT_SIGN_IN paramètre. Pour les adresses e - mail des utilisateurs de demande ainsi, créer les GoogleSignInOptions objet avec la requestEmail option.

    // 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 avez besoin de demander des étendues supplémentaires pour accéder à Google API, les spécifier avec requestScopes . Pour la meilleure expérience utilisateur, lors de la connexion, demandez uniquement les étendues requises pour que votre application fonctionne de manière minimale. Demandez des étendues supplémentaires uniquement lorsque vous en avez besoin, afin que vos utilisateurs voient l'écran de consentement dans le contexte d'une action qu'ils ont effectuée. Voir Demande Scopes supplémentaires .

  2. Puis, aussi dans votre signe dans l' activité de onCreate méthode, créer un GoogleSignInClient objet avec les options que vous avez spécifié.

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

Rechercher un utilisateur connecté existant

Dans votre activité onStart méthode, vérifier si un utilisateur a 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 retourne un GoogleSignInAccount objet (plutôt que null ), l'utilisateur a 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 activité principale ou tout ce qui convient à votre application.

Si GoogleSignIn.getLastSignedInAccount retourne null , l'utilisateur n'a pas encore connecté à votre application avec Google. Mettez à jour votre interface utilisateur pour afficher le bouton de connexion Google.

Ajoutez le bouton Google Sign-in à votre application

  1. Le bouton de connexion Google standard Ajouter le SignInButton dans 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 la page de connexion par défaut bouton graphique au lieu de fournir votre propre actifs bouton de connexion, vous pouvez personnaliser la taille du bouton avec la setSize méthode.

    // 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 onCreate méthode), inscrivez -vous sur le bouton de OnClickListener pour vous connecter à l'utilisateur lorsque vous cliquez 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 l'activité de onClick méthode, poignée de connexion robinets bouton en créant un signe dans l' intention de la getSignInIntent méthode et commencer l'intention avec 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 avec lequel se connecter. Si vous avez demandé des étendues au - delà de profile , email - openid email , et openid , l'utilisateur est également invité à accorder l' accès aux ressources demandées.

  2. Après les signes d' un utilisateur, vous pouvez obtenir un GoogleSignInAccount objet pour l'utilisateur de l'activité onActivityResult méthode.

    @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);
        }
    }

    Le GoogleSignInAccount objet contient des informations sur l'utilisateur connecté, comme le nom de l'utilisateur.

    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 , ID Google de l'utilisateur (pour une utilisation côté client) avec getId , et un ID de jeton pour l'utilisateur avec getIdToken . Si vous devez passer le moment utilisateur connecté à un serveur principal, envoyer l'ID de jeton à votre serveur principal et de valider le jeton sur le serveur.