Aller au contenu

Google Login sur Android

GitHub

Dans ce guide, vous apprendrez à configurer Google Login avec Capgo Social Login pour Android. Je pars du principe que vous avez déjà lu le guide de configuration générale.

Utiliser la connexion Google sur Android

Section intitulée « Utiliser Google login sur Android »

Dans cette partie, vous apprendrez à configurer Google login sur Android.

  1. Créer un client ID Android

    1. Cliquez sur la barre de recherche

      Barre de recherche de la Google Console
    2. Recherchez credentials et cliquez sur APIs and Services le premier (numéro 2 sur la capture d'écran)

      Résultats de recherche montrant l'option identifiants avec APIs et Services mis en évidence
    3. Cliquez sur le create credentials

      bouton Créer des identifiants dans la console Google
    4. Sélectionnez OAuth client ID

      l'option ID client OAuth dans le menu de création d'identifiants
    5. Sélectionnez le Android type d'application

      Sélection du type d'application avec l'option Android mise en évidence
    6. Ouvrir Android Studio

    7. Tout en bas du navigateur, trouvez la Gradle Scripts

      Section Gradle Scripts dans le navigateur de projet Android Studio
    8. Trouvez build.gradle pour le module app

      le fichier build.gradle (Module: app) dans la section Gradle Scripts
    9. Copiez le android.defaultConfig.applicationId. Ce sera votre package name dans la console Google

      Fichier build.gradle montrant la configuration applicationId
    10. Ouvrez maintenant le terminal. Assurez-vous d'être dans le android le dossier de votre app et lancez ./gradlew signInReport

    Terminal affichant la commande gradlew signInReport
    1. Remontez en haut de cette commande. Vous devriez voir ceci. Copiez le SHA1.
    Sortie du terminal affichant l'empreinte du certificat SHA1
    1. Maintenant, retournez sur la Google Console. Entrez votre applicationId en tant que Package Name et votre SHA1 dans le champ certificat, puis cliquez sur create
    Formulaire de création de client Android avec le nom du package et le SHA1 remplis
  2. Créez un client web (requis pour Android)

    1. Accéder au Create credentials de la Google Console

    2. Définissez le type d'application sur Web

      Sélection du type d'application avec l'option Web en surbrillance
    3. Cliquez Create

      Formulaire de création du client Web avec le bouton Créer en bas
    4. Copiez l'ID client, vous l'utiliserez comme webClientId dans votre code JS/TS

      Détails de l'ID client affichant l'ID client Web à copier
  3. Modifiez votre MainActivity

    1. Ouvrez votre application dans Android Studio. Vous pouvez exécuter cap open android

    2. Trouvez MainActivity.java

      1. Ouvrez le app dossier

        Dossier App dans le navigateur de projet Android Studio
      2. Trouvez java

        Dossier Java dans la structure du projet Android Studio
      3. Trouvez votre MainActivity.java et cliquez dessus

        fichier MainActivity.java dans la structure du package
    3. Modifiez MainActivity.java. Veuillez ajouter le code suivant

      import ee.forgr.capacitor.social.login.GoogleProvider;
      import ee.forgr.capacitor.social.login.SocialLoginPlugin;
      import ee.forgr.capacitor.social.login.ModifiedMainActivityForSocialLoginPlugin;
      import com.getcapacitor.PluginHandle;
      import com.getcapacitor.Plugin;
      import android.content.Intent;
      import android.util.Log;
      import com.getcapacitor.BridgeActivity;
      // ModifiedMainActivityForSocialLoginPlugin is VERY VERY important !!!!!!
      public class MainActivity extends BridgeActivity implements ModifiedMainActivityForSocialLoginPlugin {
      @Override
      public void onActivityResult(int requestCode, int resultCode, Intent data) {
      super.onActivityResult(requestCode, resultCode, data);
      if (requestCode >= GoogleProvider.REQUEST_AUTHORIZE_GOOGLE_MIN && requestCode < GoogleProvider.REQUEST_AUTHORIZE_GOOGLE_MAX) {
      PluginHandle pluginHandle = getBridge().getPlugin("SocialLogin");
      if (pluginHandle == null) {
      Log.i("Google Activity Result", "SocialLogin login handle is null");
      return;
      }
      Plugin plugin = pluginHandle.getInstance();
      if (!(plugin instanceof SocialLoginPlugin)) {
      Log.i("Google Activity Result", "SocialLogin plugin instance is not SocialLoginPlugin");
      return;
      }
      ((SocialLoginPlugin) plugin).handleGoogleLoginIntent(requestCode, data);
      }
      }
      // This function will never be called, leave it empty
      @Override
      public void IHaveModifiedTheMainActivityForTheUseWithSocialLoginPlugin() {}
      }
    4. Enregistrez le fichier

  4. Utilisez Google Login dans votre application

    1. Tout d'abord, importez SocialLogin

      import { SocialLogin } from '@capgo/capacitor-social-login';
    2. Appelez initialize. Cette méthode ne doit être appelée qu'une seule fois.

      // onMounted is Vue specific
      // webClientId is the client ID you got in the web client creation step not the android client ID.
      onMounted(() => {
      SocialLogin.initialize({
      google: {
      webClientId: '673324426943-avl4v9ubdas7a0u7igf7in03pdj1dkmg.apps.googleusercontent.com',
      }
      })
      })
    3. Appelez SocialLogin.login. Créez un bouton et exécutez le code suivant au clic.

      const res = await SocialLogin.login({
      provider: 'google',
      options: {}
      })
      // handle the response
      console.log(JSON.stringify(res))
  5. Configurez l'émulateur pour les tests

    1. Allez dans Device manager et cliquez sur le bouton plus

      Device Manager dans Android Studio avec le bouton plus mis en évidence
    2. Créez un appareil virtuel

      Bouton Create Virtual Device dans la configuration de l'appareil virtuel
    3. Sélectionnez n'importe quel appareil avec une Play Store icône

      Sélection du matériel montrant les appareils compatibles Play Store

      Comme vous pouvez le voir, pixel 8 prend en charge les Play Store services

    4. Cliquez next

      Bouton suivant de l'assistant de création d'appareil
    5. Assurez-vous que l'image de l'OS est de type Google Play. IL DOIT être de type Google Play

      Sélection de l'image système affichant les images de type Google Play
    6. Click next

      Bouton suivant de l'écran de sélection de l'image système
    7. Confirmez votre appareil. Vous pouvez nommer votre émulateur comme vous le souhaitez

      Écran de vérification de la configuration de l'appareil avec bouton Terminer
    8. Allez dans Device Manager et démarrez votre simulateur

      Gestionnaire d'appareils avec un appareil virtuel listé et un bouton Play
    9. Une fois le simulateur démarré, allez dans ses paramètres

      Émulateur Android affichant l'application Paramètres
    10. Allez dans Google Play

    Écran des paramètres avec l'option Google Play
    1. Cliquez Update et attendez environ 60 secondes
    Écran de mise à jour Google Play avec bouton Update
  6. Testez votre application

    Si vous avez tout fait correctement, vous devriez voir le flux de connexion Google fonctionner correctement :

    Démo du flux de connexion Google sur Android montrant le processus de connexion et l'authentification réussie

Si vous rencontrez des problèmes, comparez d'abord la configuration de votre application avec les valeurs de la Google Cloud Console. Les échecs de Google Sign-In sur Android sont généralement dus à une discordance du nom de package, du SHA-1 ou du client ID.

Sur Android, ce plugin utilise Google Credential Manager (androidx.credentials et Sign in with Google), et non l'ancien GoogleSignInClient API. Les erreurs Logcat telles que GetCredentialCustomException: [28444] Developer console is not set up correctly proviennent de cette pile.

Filtrez Logcat avec GoogleProvider ou CapgoSocialLogin après un échec de connexion. Le plugin enregistre votre nom de package, le SHA-1 de signature et un webClientId masqué afin que vous puissiez les comparer avec la Google Cloud Console.

Vous avez besoin de deux types d'ID client OAuth 2.0 dans le même projet Google Cloud :

Type de clientUtilisé pourOù l'insérer
Application WebServeur / audience du token d'IDwebClientId dans SocialLogin.initialize()
Android, un par clé de signatureProuve que votre APK est autorisé à appeler GoogleConsole Google Cloud uniquement. Ne transmettez pas cet ID à webClientId

Une erreur courante consiste à utiliser l'ID client Android comme webClientIdCredential Manager nécessite l'ID client Web à cet endroit. Le client Android a seulement besoin du nom de package et du SHA-1 corrects, enregistrés dans la console.

Créez un client OAuth Android pour chaque certificat qui signe les builds que vous testez :

  • Debug : à partir de ./gradlew signingReport pour la variante de debug.
  • Release : à partir de l'APK ou de l'AAB que vous installez réellement.
  • Play App Signing : depuis Play Console > Intégrité de l'application > Certificat de clé de signature d'application. Ceci est requis pour les builds du Play Store, même si votre SHA-1 de clé d'upload est déjà enregistré.

Le applicationId dans android/app/build.gradle doit correspondre exactement au nom de package du client OAuth Android, y compris tout .debug suffixe.

Si l'écran de consentement OAuth est en mode Test, ajoutez chaque compte Google utilisé pour vos tests sous Audience > Utilisateurs de test. La publication de l'application en Production n'est pas requise pour email et profile scopes. Digital Asset Links (assetlinks.json) ne sont pas requis pour la connexion avec Google via Credential Manager.

Les modifications sur Google Cloud peuvent mettre quelques heures à se propager.

Erreur 28444 : la console développeur est mal configurée

Section intitulée « Erreur 28444 : la console développeur est mal configurée »

Cela signifie presque toujours que Google a rejeté la combinaison du certificat de signature de l'APK installé, du nom de package et de webClientId. Suivez cette checklist :

  1. Confirmer webClientId est l'ID client de l'application Web et se termine par .apps.googleusercontent.com.
  2. Lancez l'app, reproduisez l'erreur et lisez les logs Logcat pour GoogleProvider, signingSha1=, et package=.
  3. Dans Google Cloud Console > Identifiants, ouvrez votre client OAuth Android et vérifiez le nom de package et le SHA-1 exacts.
  4. Si vous testez un build de release, enregistrez le SHA-1 de ce build, pas seulement celui du keystore de debug.
  5. Si l'application est distribuée via le Play Store, enregistrez également le SHA-1 de la signature d'application Play.
  6. Assurez-vous que les clients Web et Android se trouvent dans le même projet Google Cloud.
  7. Si l'écran de consentement est en mode Testing, confirmez que le compte Google est un utilisateur de test.
  8. Attendez et réessayez après avoir modifié la console.

USER_CANCELLED après avoir choisi un compte, un build de debug mal configuré peut toujours entraîner une erreur de SHA-1 ou de client ID. Corrigez d'abord la configuration de la console ci-dessus.

Builds de debug ou locaux :

Fenêtre de terminal
cd android && ./gradlew signingReport

APK de la release signée :

Fenêtre de terminal
keytool -printcert -jarfile android/app/release/app-release.apk

Ajoutez ce SHA-1 à un client OAuth Android avec le nom de package correspondant, réinstallez le même APK signé, puis testez à nouveau :

Fenêtre de terminal
adb install android/app/release/app-release.apk

Les tokens sont imbriqués sous result:

const login = await SocialLogin.login({ provider: 'google' });
const idToken = login.result?.idToken;

Pour Firebase Auth, créez vos identifiants avec idToken et utilisez l'ID client Web comme webClientId dans initialize.

Si vous ne parvenez pas à obtenir le certificat SHA-1 de développement, essayez un keystore personnalisé. Ce commentaire sur l'issue explique comment ajouter un keystore à votre projet.

Si vous utilisez Google Login sur Android pour planifier les flux d'authentification et de compte, le connecter à Utiliser @capgo/capacitor-social-login pour la capacité native dans Utiliser @capgo/capacitor-social-login @capgo/capacitor-social-login pour les détails d'implémentation dans @capgo/capacitor-social-login @capgo/capacitor-passkey pour les détails d'implémentation dans @capgo/capacitor-passkey @capgo/capacitor-native-biometric pour les détails d'implémentation dans @capgo/capacitor-native-biometric, et Authentification à deux facteurs pour les détails d'implémentation de l'authentification à deux facteurs.