Zum Inhalt springen

Google Login unter Android

GitHub

In diesem Guide erfährst du, wie du Google Login mit Capgo Social Login für Android einrichtest. Ich setze voraus, dass du bereits den Allgemeine Setup-Anleitung.

In diesem Teil lernst du, wie du Google Login unter Android einrichtest.

  1. Android Client ID erstellen.

    1. Klicke in die Suchleiste

      Suchleiste der Google Console
    2. Suche nach credentials und klicke auf APIs and Services eins (Nummer 2 im Screenshot)

      Suchergebnisse mit markierter Option „Credentials“ unter APIs und Dienste
    3. Klicke auf die create credentials

      Button „Credentials erstellen“ in der Google Console
    4. Wähle OAuth client ID

      Option „OAuth client ID“ im Menü zur Credential-Erstellung
    5. Wähle die Android Anwendungstyp

      Auswahl des App-Typs mit hervorgehobener Android-Option
    6. Android Studio öffnen

    7. Ganz unten im Navigator findest du den Gradle Scripts

      Gradle Scripts-Bereich im Projekt-Navigator von Android Studio
    8. Finde build.gradle für das Modul app

      die Datei build.gradle (Module: app) im Bereich Gradle Scripts
    9. Kopiere den android.defaultConfig.applicationId. Das wird deine package name in der Google Console

      build.gradle-Datei mit der applicationId-Konfiguration
    10. Öffne nun das Terminal. Stelle sicher, dass du dich im android Ordner deiner App und führe aus ./gradlew signInReport

    Terminal mit dem Befehl gradlew signInReport
    1. Scrolle in der Ausgabe dieses Befehls nach oben. Du solltest Folgendes sehen. Kopiere die SHA1.
    Terminal-Ausgabe mit SHA1-Zertifikats-Fingerprint
    1. Gehe nun zurück zur Google Console. Gib deinen applicationId als Package Name und deinen SHA1 in das Zertifikatsfeld ein und klicke auf create
    Android-Client-Formular mit ausgefülltem Package-Namen und SHA1
  2. Erstelle einen Web-Client (erforderlich für Android)

    1. Besuchen Sie die Create credentials Seite in der Google Console

    2. Anwendungstyp setzen auf Web

      Auswahl des Anwendungstyps mit markierter Web-Option
    3. Klicken Create

      Formular zur Web-Client-Erstellung mit Create-Button unten
    4. Kopiere die Client ID; du wirst sie als webClientId in deinem JS/TS code verwenden

      Details zur Client ID mit der zu kopierenden Web-Client-ID
  3. Ändere dein MainActivity

    1. Bitte öffne deine App in Android Studio. Du kannst cap open android

    2. Finde MainActivity.java

      1. Öffne die app Ordner

        App-Ordner im Android Studio Projekt-Navigator
      2. Finde java

        Java-Ordner in der Android Studio Projektstruktur
      3. Suche deinen MainActivity.java und klicke darauf

        MainActivity.java Datei in der Package-Struktur
    3. Ändere MainActivity.java. Bitte füge die folgende code hinzu

      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. Datei speichern

  4. Google Login in deiner App nutzen

    1. Importiere zuerst SocialLogin

      import { SocialLogin } from '@capgo/capacitor-social-login';
    2. Rufe initialize auf. Dies sollte nur einmal geschehen.

      // 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. Rufe SocialLogin.login. Erstelle einen Button und führe beim Klick folgendes code aus.

      const res = await SocialLogin.login({
      provider: 'google',
      options: {}
      })
      // handle the response
      console.log(JSON.stringify(res))
  5. Emulator zum Testen konfigurieren

    1. Gehe zu Device manager und klicke auf den Plus-Button

      Device Manager in Android Studio mit hervorgehobenem Plus-Button
    2. Virtuelles Gerät erstellen

      Button „Create Virtual Device“ in der Virtual Device Configuration
    3. Wähle ein beliebiges Gerät mit einem Play Store Icon

      Hardware-Auswahl zeigt Geräte mit Play-Store-Support

      Wie du siehst, unterstützt pixel 8 unterstützt Play Store Services

    4. Klicken next

      Weiter-Button im Erstellungs-Assistenten
    5. Stelle sicher, dass das OS-Image vom Typ Google Play. ES MUSS vom Typ ist Google Play

      System-Image-Auswahl mit Google Play Images
    6. Weiter klicken

      Weiter-Button in der Image-Auswahl
    7. Bestätige dein Device. Du kannst den Emulator frei benennen

      Bildschirm zur Überprüfung der Gerätekonfiguration mit „Fertig“-Button
    8. Gehe zu Device Manager und starte deinen Simulator

      Device Manager mit aufgelistetem virtuellen Gerät und Play-Button
    9. Gehe nach dem Booten des Simulators in seine Einstellungen

      Android-Emulator mit geöffneter Einstellungen-App
    10. Gehe zu Google Play

    Einstellungsbildschirm mit der Option Google Play
    1. Klicken Update und warte etwa 60 Sekunden
    Google Play Update-Screen mit Update-Button
  6. Teste deine App

    Wenn du alles richtig gemacht hast, solltest du sehen, dass der Google-Login-Flow einwandfrei funktioniert:

    Demo des Google-Login-Flows auf Android mit Sign-in-Prozess und erfolgreicher Authentifizierung

Falls Probleme auftreten, vergleiche zuerst deine App-Konfiguration mit den Werten in der Google Cloud Console. Fehler beim Android Google Sign-In liegen meist an einer Diskrepanz bei Package Name, SHA-1 oder Client ID.

Unter Android nutzt dieses Plugin den Google Credential Manager (androidx.credentials und Sign in with Google), nicht das veraltete GoogleSignInClient API. Logcat-Fehler wie GetCredentialCustomException: [28444] Developer console is not set up correctly stammen aus diesem Stack.

Logcat filtern mit GoogleProvider oder CapgoSocialLogin nach einem fehlgeschlagenen Login. Das Plugin loggt deinen Package Name, den Signing-SHA-1 und eine maskierte webClientId damit du sie mit der Google Cloud Console vergleichen kannst.

Du benötigst zwei Arten von OAuth 2.0 Client IDs im selben Google Cloud Projekt:

Client-TypVerwendungVerwendung
WebanwendungServer / ID Token AudiencewebClientId in SocialLogin.initialize()
Android, jeweils eine pro Signing KeyBestätigt, dass deine APK Google-Anfragen stellen darfNur Google Cloud Console. Gib diese ID niemals an webClientId

Ein häufiger Fehler ist die Verwendung der Android-Client-ID als webClientId. Der Credential Manager benötigt dort die Web-Client-ID. Der Android-Client benötigt lediglich den korrekten Package-Namen und die in der Console registrierte SHA-1.

Erstelle für jedes Zertifikat, mit dem du deine Test-Builds signierst, einen Android-OAuth-Client:

  • Debug: von ./gradlew signingReport für die Debug-Variante.
  • Release: von der APK oder AAB, die du tatsächlich installierst.
  • Play App Signing: aus der Play Console > App-Integrität > App-Signaturschlüssel-Zertifikat. Das ist für Play-Store-Builds erforderlich, selbst wenn die SHA-1 deines Upload-Keys bereits registriert ist.

Der applicationId in android/app/build.gradle muss exakt mit dem Package-Namen des Android-OAuth-Clients übereinstimmen, inklusive eventuellem .debug Suffix.

Wenn der OAuth Consent Screen im Testmodus ist, füge jedes Google-Konto, mit dem du testest, unter Audience > Test users hinzu. Die App in Production zu veröffentlichen ist nicht erforderlich für email und profile Scopes. Digital Asset Links (assetlinks.json) sind für Sign in with Google über den Credential Manager nicht erforderlich.

Änderungen in Google Cloud brauchen bis zu ein paar Stunden, bis sie wirksam werden.

Fehler 28444: Developer Console nicht korrekt eingerichtet

Abschnitt mit dem Titel „Error 28444: Developer console is not set up correctly“

Das bedeutet fast immer, dass Google die Kombination aus installiertem APK-Signing-Zertifikat, Paketnamen und webClientId abgelehnt hat. Gehe diese Checkliste durch:

  1. Bestätigen webClientId ist die Web-App-Client-ID und endet mit .apps.googleusercontent.com.
  2. Starte die App, reproduziere den Fehler und sieh im Logcat nach GoogleProvider, signingSha1=, und package=.
  3. Unter Google Cloud Console > Anmeldedaten, öffne deinen Android OAuth-Client und überprüfe den exakten Package-Namen sowie die SHA-1.
  4. Falls du einen Release-Build testest, registriere die SHA-1 dieses Builds und nicht nur den Debug-Keystore.
  5. Wird die App über den Play Store verteilt, registriere zusätzlich die Play App Signing SHA-1.
  6. Stelle sicher, dass Web- und Android-Clients im selben Google Cloud-Projekt liegen.
  7. Wenn der Consent Screen auf „Testing“ steht, stelle sicher, dass das Google-Konto als Testnutzer hinterlegt ist.
  8. Wait and retry after console changes.

USER_CANCELLED nach der Kontenauswahl bei einem falsch konfigurierten Debug-Build kann es immer noch ein SHA-1- oder Client-ID-Mismatch sein. Korrigiere zuerst das Console-Setup oben.

SHA-1 aus dem installierten Build extrahieren

Abschnitt „SHA-1 aus dem installierten Build extrahieren“

Debug- oder lokale Builds:

Terminalfenster
cd android && ./gradlew signingReport

Signierte Release-APK:

Terminalfenster
keytool -printcert -jarfile android/app/release/app-release.apk

Füge diesen SHA-1 zu einem Android OAuth-Client mit dem passenden Package-Namen hinzu, installiere die signierte APK erneut und teste es noch einmal:

Terminalfenster
adb install android/app/release/app-release.apk

Tokens sind verschachtelt unter result:

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

Erstelle für Firebase Auth die Credentials dort idToken und verwende die Web Client ID als webClientId in initialize.

Falls du das Development SHA-1 Zertifikat nicht erhältst, versuche es mit einem Custom Keystore. Dieser Issue-Kommentar erklärt, wie du einen Keystore zu deinem Projekt hinzufügst.

Wenn du es nutzt Google Login unter Android Um Authentifizierungs- und Account-Flows zu planen, verbinde es mit @capgo/capacitor-social-login verwenden für die native Funktion bei der Verwendung von @capgo/capacitor-social-login, @capgo/capacitor-social-login für die Implementierungsdetails in @capgo/capacitor-social-login, @capgo/capacitor-passkey für die Implementierungsdetails in @capgo/capacitor-passkey, @capgo/capacitor-native-biometric für die Implementierungsdetails in @capgo/capacitor-native-biometric, und Zwei-Faktor-Authentifizierung für die Implementierungsdetails zur Zwei-Faktor-Authentifizierung.