Vai al contenuto

Google Login su Android

GitHub

In questa guida imparerai a configurare Google Login con Capgo Social Login per Android. Presumo che tu abbia già letto la guida alla configurazione generale.

In questa parte imparerai a configurare Google login su Android.

  1. Crea un client ID Android.

    1. Clicca sulla barra di ricerca

      Barra di ricerca di Google Console
    2. Cerca credentials and click on the APIs and Services quello (numero 2 nello screenshot)

      Risultati della ricerca con l'opzione credenziali e APIs & Services evidenziati
    3. Clicca sul create credentials

      Pulsante Create credentials in Google Console
    4. Seleziona OAuth client ID

      Opzione OAuth client ID nel menu di creazione credenziali
    5. Seleziona il Android tipo di applicazione

      Selezione del tipo di applicazione con l'opzione Android evidenziata
    6. Apri Android Studio

    7. In fondo al navigatore, trova il Gradle Scripts

      sezione Gradle Scripts nel navigator del progetto Android Studio
    8. Trova build.gradle per il modulo app

      file build.gradle (Module: app) nella sezione Gradle Scripts
    9. Copia il android.defaultConfig.applicationId. Questo sarà il tuo package name nella console di Google

      File build.gradle con la configurazione applicationId
    10. Ora, apri il terminale. Assicurati di essere nella android cartella della tua app ed esegui ./gradlew signInReport

    Terminale con il comando gradlew signInReport
    1. Scorri fino all'inizio del comando. Dovresti vedere quanto segue. Copia il SHA1.
    Output del terminale con l'impronta digitale del certificato SHA1
    1. Ora, torna sulla Google Console. Inserisci il tuo applicationId come Package Name e il tuo SHA1 nel campo del certificato e clicca create
    Modulo di creazione client Android con package name e SHA1 compilati
  2. Crea un web client (necessario per Android)

    1. Vai su Create credentials pagina nella Google Console

    2. Imposta il tipo di applicazione su Web

      Selezione del tipo di applicazione con opzione Web evidenziata
    3. Clicca su Create

      Modulo di creazione client Web con pulsante Create in basso
    4. Copia il client ID, che userai come webClientId nel tuo code JS/TS

      Dettagli Client ID con Web client ID da copiare
  3. Modifica il tuo MainActivity

    1. Apri la tua app in Android Studio. Puoi eseguire cap open android

    2. Trova MainActivity.java

      1. Apri la app cartella

        Cartella App nel navigatore del progetto Android Studio
      2. Trova java

        la cartella Java nella struttura del progetto Android Studio
      3. Trova il tuo MainActivity.java e cliccaci sopra

        file MainActivity.java nella struttura dei package
    3. Modifica MainActivity.java. Aggiungi il seguente code

      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. Salva il file

  4. Usa Google Login nella tua applicazione

    1. Per prima cosa, importa SocialLogin

      import { SocialLogin } from '@capgo/capacitor-social-login';
    2. Chiama initialize. Deve essere chiamato una sola volta.

      // 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. Esegui SocialLogin.login. Crea un pulsante ed esegui il seguente code al click.

      const res = await SocialLogin.login({
      provider: 'google',
      options: {}
      })
      // handle the response
      console.log(JSON.stringify(res))
  5. Configura l'emulatore per i test

    1. Vai su Device manager e clicca sul tasto più

      Device Manager in Android Studio con il tasto più evidenziato
    2. Crea un dispositivo virtuale

      Pulsante Create Virtual Device in Virtual Device Configuration
    3. Seleziona un dispositivo con Play Store icona

      Selezione hardware con dispositivi che supportano il Play Store

      Come puoi vedere, pixel 8 supporta i Play Store services

    4. Clicca su next

      Pulsante Avanti nella wizard di creazione
    5. Assicurati che l'immagine OS sia di tipo Google Play. DEVE ESSERE sia di tipo Google Play

      Selezione immagine di sistema con immagini Google Play
    6. Clicca su Avanti

      Pulsante Avanti nella selezione immagine di sistema
    7. Conferma il dispositivo. Puoi dare al tuo emulatore il nome che preferisci

      Schermata di verifica configurazione con pulsante Fine
    8. Entra in Device Manager e avvia il tuo simulatore

      Device Manager con dispositivo virtuale e tasto play
    9. Dopo l'avvio del simulatore, entra nelle impostazioni

      Emulatore Android con l'app Impostazioni aperta
    10. Vai in Google Play

    Schermata Impostazioni con l'opzione Google Play
    1. Clicca su Update e attendi circa 60 secondi
    Schermata aggiornamento Google Play con tasto Update
  6. Testa la tua applicazione

    Se hai fatto tutto correttamente, vedrai il flusso di login di Google funzionare correttamente:

    Demo del login Google su Android con processo di sign-in e autenticazione riuscita

In caso di problemi, confronta prima la configurazione della tua app con i valori su Google Cloud Console. I fallimenti di Google Sign-In su Android sono solitamente causati da discrepanze nel package name, nello SHA-1 o nel client ID.

Su Android questo plugin utilizza Google Credential Manager (androidx.credentials e Sign in with Google), non il vecchio GoogleSignInClient API. Errori Logcat come GetCredentialCustomException: [28444] Developer console is not set up correctly provengono da quello stack.

Filtra Logcat con GoogleProvider o CapgoSocialLogin dopo un login fallito. Il plugin logga il package name, lo SHA-1 di firma e un webClientId mascherato, così puoi confrontarli con Google Cloud Console.

Ti servono due tipi di client ID OAuth 2.0 nello stesso progetto Google Cloud:

Tipo di clientUtilizzoDestinazione
Applicazione webAudience del token ID del serverwebClientId le SocialLogin.initialize()
Android, uno per chiave di firmaVerifica che l'APK possa chiamare GoogleSolo Google Cloud Console. Non passare questo ID a webClientId

Un errore comune è usare l'Android client ID come webClientId. Credential Manager richiede il Web client ID. L'Android client necessita solo del nome del package e dello SHA-1 registrati nella console.

Crea un client OAuth Android per ogni certificato che firma i build che testi:

  • Debug: da ./gradlew signingReport per la variante debug.
  • Release: dall'APK o AAB che installi effettivamente.
  • Play App Signing: da Play Console > App integrity > App signing key certificate. È necessario per i build del Play Store, anche se lo SHA-1 della tua upload key è già registrato.

L'oggetto applicationId le android/app/build.gradle deve corrispondere esattamente al package name dell'Android OAuth client, inclusi eventuali .debug suffissi.

Se la schermata di consenso OAuth è in modalità Testing, aggiungi ogni account Google che usi sotto Audience > Test users. Non è necessario pubblicare l'app in Production per email e profile scope. Digital Asset Links ("assetlinks.json) non sono richiesti per il Sign in with Google tramite Credential Manager.

Le modifiche a Google Cloud possono impiegare fino a qualche ora a propagarsi.

Errore 28444: la Developer console non è configurata correttamente

Sezione intitolata “Errore 28444: la Developer console non è configurata correttamente”

Questo significa quasi sempre che Google ha rifiutato la combinazione tra il certificato di firma dell'APK installato, il package name e webClientId. Segui questa checklist:

  1. Verifica che webClientId sia il client ID dell'applicazione Web e termini con .apps.googleusercontent.com.
  2. Avvia l'app, riproduci l'errore e leggi i log su Logcat per GoogleProvider, signingSha1=, e package=.
  3. In Google Cloud Console > Credenziali, apri il client OAuth di Android e verifica il nome del package e lo SHA-1 esatti.
  4. Se stai testando una release build, registra lo SHA-1 di quella build, non solo quello del debug keystore.
  5. Se l'app è distribuita tramite Play Store, registra anche lo SHA-1 di Play App Signing.
  6. Assicurati che i client Web e Android si trovino nello stesso progetto Google Cloud.
  7. Se la schermata di consenso è in modalità Testing, conferma che l'account Google sia un utente di test.
  8. Attendi e riprova dopo aver modificato la console.

USER_CANCELLED dopo aver scelto un account in una debug build errata, potrebbe trattarsi ancora di un mismatch di SHA-1 o client ID. Correggi prima la configurazione della console sopra.

Build di debug o locali:

Finestra del terminale
cd android && ./gradlew signingReport

APK release firmata:

Finestra del terminale
keytool -printcert -jarfile android/app/release/app-release.apk

Aggiungi quello SHA-1 a un client OAuth di Android con il relativo package name, reinstalla lo stesso APK firmato e riprova:

Finestra del terminale
adb install android/app/release/app-release.apk

I token sono annidati sotto result:

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

Per Firebase Auth, crea le credenziali con idToken e usa il Web client ID come webClientId le initialize.

Se non riesci a ottenere il certificato SHA-1 di sviluppo, prova un keystore personalizzato. Questo commento su spiega come aggiungere un keystore al progetto.

Se stai usando Google Login su Android per pianificare i flussi di autenticazione e account, collegalo con Utilizzo di @capgo/capacitor-social-login per la funzionalità nativa in Utilizzo di @capgo/capacitor-social-login, @capgo/capacitor-social-login per i dettagli di implementazione in @capgo/capacitor-social-login, @capgo/capacitor-passkey per i dettagli di implementazione in @capgo/capacitor-passkey, @capgo/capacitor-native-biometric per i dettagli di implementazione in @capgo/capacitor-native-biometric, e Autenticazione a due fattori per i dettagli sull'implementazione dell'autenticazione a due fattori.