Saltare al contenuto

Google Login su Android

GitHub

In questo guide, imparerai a configurare l'accesso Google con Capgo Social Login per Android. Assumo che tu abbia già letto la guida di configurazione generale.

In questo capitolo, imparerai a configurare il login Google su Android.

  1. Creare un ID client Android.

    1. Clicca sulla barra di ricerca

      Barra di ricerca del Console di Google
    2. Cerca credentials e clicca sulla APIs and Services una (numero 2 nella schermata)

      I risultati della ricerca mostrano l'opzione delle credenziali con le API e i Servizi evidenziati
    3. Clicca sulla create credentials

      Crea pulsante credenziali nel Console di Google
    4. Seleziona OAuth client ID

      Opzione ID client OAuth nella menu creazione credenziali
    5. Seleziona il Android Tipo di applicazione

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

    7. Alla fine della finestra di navigazione, trova la Gradle Scripts

      Sezione Script Gradle nella finestra di navigazione di Android Studio
    8. Trova build.gradle per il modulo app

      file build.gradle (modulo: app) nella sezione Script Gradle
    9. Copia il android.defaultConfig.applicationIdQuesto sarà il tuo package name in il console di Google

      File Build.gradle mostrante la configurazione di applicationId
    10. Ora, apri il terminale. Assicurati di essere nel android del tuo app e esegui ./gradlew signInReport

    Terminale mostrante il comando gradlew signInReport
    1. Scorri verso l'alto di questo comando. Dovresti vedere il seguente. Copia il SHA1.
    Output del terminale mostrante la dicitura SHA1 del certificato
    1. Ora, torna indietro nel Console di Google. Inserisci il tuo applicationId come il Package Name e il tuo SHA1 nella casella del certificato e clicca create
    Creazione della forma del client Android con campo nome pacchetto e campo SHA1 compilati
  2. Creare un client web (questo è richiesto per Android)

    1. Vai alla Create credentials pagina nel Console di Google

    2. Imposta il tipo di applicazione su Web

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

      Forma di creazione del client web con pulsante Crea in fondo
    4. Copia l'ID del client, utilizzerai questo come il webClientId in tuo JS/TS code

      Dettagli dell'ID del client mostrando l'ID del client web da copiare
  3. Modifica il tuo MainActivity

    1. Per favore apri il tuo app in Android Studio. Puoi eseguire cap open android

    2. Cerca MainActivity.java

      1. Apre il app cartella

        La cartella App in navigatore del progetto di Android Studio
      2. Cerca java

        La cartella Java in struttura del progetto di Android Studio
      3. Cerca il tuo MainActivity.java e clicca su di esso

        File MainActivity.java in struttura dei pacchetti
    3. Modifica MainActivity.java. Per favore 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. Utilizza Google Login nel tuo'applicazione

    1. Prima, importa SocialLogin

      import { SocialLogin } from '@capgo/capacitor-social-login';
    2. Chiamare initialize. Questo deve essere chiamato solo una 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. Chiamare SocialLogin.login. Create a button and run the following code on click.

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

    1. Vai in Device manager e clicca sul pulsante plus

      Manager di dispositivi in Android Studio con pulsante plus evidenziato
    2. Creare un dispositivo virtuale

      Pulsante di creazione di dispositivo virtuale in Configurazione di dispositivo virtuale
    3. Scegli qualsiasi dispositivo con un Play Store icono

      Selezione hardware che mostra dispositivi con supporto per Play Store

      Evidentemente, il pixel 8 supporta i Play Store servizi

    4. Clicca next

      Pulsante successivo nel creatore di dispositivi
    5. context":"Pagina/Area: Capgo Builder / prodotto di costruzione cloud nativa. Ruolo: Etichetta di navigazione breve o elemento UI. Chiave di messaggio `native_build_builder_credit_next` (Crediti del costruttore di costruzione nativa)." Google Play. Assicurati che l'immagine del sistema sia del tipo DEVE ESSERE Google Play

      di tipo
    6. Selezione dell'immagine del sistema che mostra immagini di tipo Google Play

      Prossimo pulsante nella schermata di selezione dell'immagine del sistema
    7. Conferma il tuo dispositivo. Puoi chiamare il tuo emulatore come preferisci

      Schermata di verifica della configurazione del dispositivo con pulsante di fine
    8. Entrare in Device Manager E avviare il tuo simulatore

      Manager dei dispositivi con dispositivo virtuale elencato e pulsante di riproduzione
    9. Dopo che il simulatore si è avviato, entra nelle sue impostazioni

      Emulatore Android che mostra l'app di impostazioni
    10. Entrare in Google Play

    Schermata di impostazioni con opzione Google Play
    1. Clicca Update E attendi circa 60 secondi
    Schermo di aggiornamento di Google Play con pulsante Aggiorna
  6. Testa la tua applicazione

    Se hai fatto tutto correttamente, dovresti vedere il flusso di login di Google che funziona correttamente:

    Esempio di flusso di login di Google su Android che mostra il processo di registrazione e l'autenticazione riuscita

Se hai dei problemi, confronta per primo la configurazione della tua app con i valori del Cloud Console di Google. Le fallite di Google Sign-In su Android sono di solito causate da un nome del pacchetto, un SHA-1 o un ID client non corrispondenti.

Sul sistema operativo Android, questo plugin utilizza il Manager delle credenziali di Google (androidx.credentials e Accedi con Google), non il legacy GoogleSignInClient API. Errore di Logcat come GetCredentialCustomException: [28444] Developer console is not set up correctly da quella pila.

Filtra Logcat con GoogleProvider o CapgoSocialLogin o webClientId per poterli confrontare con il Cloud Console di Google.

Avete bisogno di due tipi di ID client OAuth 2.0 nello stesso progetto Cloud di Google:

Tipo di clientUtilizzato perDove va
Applicazione webServer / ID token audiencewebClientId in SocialLogin.initialize()
su Android, uno per chiave di firmaProva che il tuo APK è autorizzato a chiamare Google solo nel Cloud Console di Google. Non passare questo ID a webClientId

Un errore comune è utilizzare l'ID del client Android come webClientId. Il Credential Manager richiede l'ID del client Web lì. Il client Android ha bisogno solo del nome del pacchetto corretto e della chiave SHA-1 registrata nel console.

Creare un client OAuth Android per ogni certificato che firma le build che si testano:

  • Da ./gradlew signingReport per la variante di debug.
  • Da l'APK o AAB che si installa effettivamente.
  • Da Play App Signing: da Play Console > Integrità dell'app > Chiave di firma dell'app. Questo è richiesto per le build di Play Store anche se la chiave SHA-1 di caricamento è già registrata.

Il applicationId in android/app/build.gradle deve corrispondere esattamente al nome del pacchetto Android OAuth client, compresi eventuali .debug suffisso.

Se lo schermo di consenso OAuth è in modalità Testing, aggiungi ogni account Google che testi sotto Audience > Utenti di test. La pubblicazione dell'applicazione in Produzione non è necessaria per email e profile scopi. I collegamenti di asset digitali (assetlinks.json) non sono necessari per l'accesso con Google tramite Gestore delle credenziali.

Le modifiche a Cloudflare possono richiedere fino a poche ore per propagarsi.

Errore 28444: Il console dello sviluppatore non è configurato correttamente

Sezione intitolata “Errore 28444: Il console dello sviluppatore non è configurato correttamente”

Ciò accade quasi sempre quando Google rifiuta la combinazione del certificato di firma APK installato, del nome del pacchetto e webClientId. Esegui questo checklist:

  1. Conferma webClientId è il client ID dell'applicazione Web e si conclude con .apps.googleusercontent.com.
  2. Esegui l'app, riproduci il problema e leggi Logcat per GoogleProvider, signingSha1=, e package=.
  3. In Google Cloud Console > Credenziali, apri il tuo client OAuth Android e verifica il pacchetto esatto e SHA-1.
  4. Se stai testando una versione di rilascio, registra il SHA-1 di quella versione, non solo il keystore di debug.
  5. Se l'app è distribuita attraverso Play Store, registra anche il SHA-1 di firma dell'app di Play.
  6. Assicurati che gli client Web e Android siano presenti nello stesso progetto Google Cloud.
  7. Se lo schermo di consenso è in modalità di testing, conferma che l'account Google sia un utente di testing.
  8. Attendi e riprova dopo le modifiche al console.

USER_CANCELLED Dopo aver scelto un account su un build di debug configurato male, può ancora esserci un mismatch SHA-1 o ID del client. Correggi prima la configurazione del console sopra.

Build di debug o locali:

Fenestra del terminale.
cd android && ./gradlew signingReport

APK di rilascio firmata:

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

Aggiungi quel SHA-1 a un client OAuth Android con lo stesso nome del pacchetto, reinstalla lo stesso APK firmato e prova di nuovo:

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

I token sono nidificati sotto result:

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

Per Firebase Auth, crea le credenziali con questo idToken e utilizza l'ID del client Web come webClientId in initialize.

Se non puoi ottenere il certificato SHA-1 di sviluppo, prova un keystore personalizzato. Questo commento di issue spiega come aggiungere un keystore al tuo progetto.

Se stai utilizzando Google Login su Android per pianificare l'autenticazione e le flussi di account, connettilo con Utilizzando @capgo/capacitor-login-social per la capacità nativa in Utilizzando @capgo/capacitor-login-social @capgo/capacitor-login-social per il dettaglio di implementazione in @capgo/capacitor-login-social @capgo/capacitor-passkey per il dettaglio di implementazione in @capgo/capacitor-passkey @capgo/capacitor-biometric-nativo per il dettaglio di implementazione in @capgo/capacitor-biometric-nativo, e Autenticazione a due fattori per il dettaglio di implementazione in Autenticazione a due fattori.