javascript - Expo Google-Sign-In DEVELOPER_ERROR


Jeg utviklet en React Native-app, og jeg bruker Expo Google-Sign-In for min Firebase-autentisering. Jeg får feilen "DEVELOPER_ERROR" når jeg prøver autentisering på min frittstående APK på Android.

Opprinnelig brukte jeg "Expo Google", men det er nå avviklet og påloggingsknappen min gjorde ingenting på min frittstående APK. Med Expo Google-metoden oppdaget jeg at jeg måtte sette androidStandaloneAppClientId. Selv etter det ble påloggingen stående fast på Googles hjemmeside etter autentisering. Jeg prøvde løsningen med å bruke en tilpasset omdirigerings-URI, som i

redirectUrl: $ {AppAuth.OAuthRedirect}:/oauth2redirect/google

men det resulterte i en annen feil: redirect_uri mismatch.

Jeg byttet i stedet til Expo Google-Sign-In-biblioteket, og det gir meg en DEVELOPER_ERROR hver gang jeg prøver å autentisere.

Etter det har jeg prøvd:

  • laster ned google-services.json og bruker den i appen min
  • sette SHA1-fingeravtrykket i google-services.json og i Firebase
  • setter certificateHash inne i android.configuration.certificate hash inne i min app.json til mitt SHA1-fingeravtrykk.
  • sjekke og sørge for at pakkenavnene er satt riktig

Jeg prøvde alt annet jeg kanskje har unnlatt å nevne fra de eksisterende trådene som involverer DEVELOPER_ERROR i Expo Google Sign-In.

Variablene jeg nevner i koden min nedenfor kommer fra følgende:

SHA1 ble generert og brukt til å lage mine legitimasjoner, og er fingeravtrykket som brukes i min OAuth Android-klient-ID.

Klient-IDen jeg refererer til gjennom filene mine, er ID-en til min OAuth Web-klient-ID. Jeg prøvde imidlertid også å bruke Android-versjonen, og det endret ingenting.

"CurrentKey" i api_key er API-nøkkelen fra mitt Firebase-prosjekt.

Dette er en lenke til min Google-legitimasjonsside.

https://i.sstatic.net/MVfO2.jpg

/* Min app.json: */

{
  "expo": {
    "name": "AssistiveNote",
    "privacy": "public",
    "description": "A note app for people who have trouble reading text.",
    "slug": "assistivenote",

    "sdkVersion": "33.0.0",
    "version": "2.0.0",
    "orientation": "portrait",
    "icon": "./screens/images/icon.png",


    "ios": {
      "bundleIdentifier": "com.danyalbabar.assistivenote"
    },

    "android": {
      "versionCode": 2,
      "package": "com.danyalbabar.assistivenote",
      "googleServicesFile": "./google-services.json",
      "permissions": [ " " ],
      "config": {
        "googleSignIn": {
            "certificateHash": "XXXX"
        }
      }
    }

  }
}

Min google-services.json:

  {
  "project_info": {
    "project_number": "XXXX",
    "firebase_url": "https://era-gvision.firebaseio.com",
    "project_id": "era-gvision",
    "storage_bucket": "era-gvision.appspot.com"
  },
  "client": [
    {
      "client_info": {
        "mobilesdk_app_id": "XXXX",
        "android_client_info": {
          "package_name": "com.danyalbabar.assistivenote"
        }
      },
      "oauth_client": [
        {
          "client_id": "XXXX",
          "client_type": 3
        }
      ],
      "api_key": [
        {
          "current_key": "XXXX"
        }
      ],
      "services": {
        "appinvite_service": {
          "other_platform_oauth_client": [
            {
              "client_id": "XXXX",
              "client_type": 3
            }
          ]
        }
      }
    }
  ],
  "configuration_version": "1"
}

Svar #1

eas november 2022-oppdatering (Android)

Hvis du bruker eas og får DEVELOPER_ERROR:

  • kjør eas credentials (følg trinnene for å få din SHA1)
  • Legg til SHA1 i Android-appen din i Firebase-konsollen (https://console.firebase.google.com/project/YOUR_FIREBASE_APP_ID/settings/general/)
  • last ned google-services.json (samme URL som ovenfor) og legg den i prosjektmappen din
  • oppdater din app.json for å inkludere expo.android.googleServicesFile: "./path/to/google-services.json"
  • Også inne i app.json: dobbeltsjekk at expo.android.package samsvarer med pakken fra googleServicesFile
  • Sørg for å initialisere Google-påloggingen uten noen argumenter for Android GoogleSignin.configure()

Hvis det fortsatt ikke fungerer

  • Last ned APK-en din
  • kjør keytool -printcert -jarfile app.apk (vil skrive ut SHA1)
  • Dobbeltsjekk at den trykte SHA1 fra ovenfor samsvarer med SHA1 i Firebase-konsollen din (alternativt kan du se/administrere OAuth API-nøklene dine på https://console.cloud.google.com/apis/credentials?project=YOUR_PROJECT_ID)

Svar #2

Dette er en konfigurasjonsfeil. Sørg for at android/app/google-services.json er korrekt.

Du må kanskje legge til SHA-sertifikatets fingeravtrykk i Firebase-konfigurasjonen din. Finn SHA1-fingeravtrykket ditt ved å følge instruksjonene i dette innlegget: SHA-1-fingeravtrykk av keystore-sertifikat. Gå deretter til https://console.firebase.google.com/, velg appen din, og legg til SHA1-verdien under Prosjektinnstillinger (tannhjulikon øverst til venstre) -> Dine apper -> SHA-sertifikatfingeravtrykk

Hvis du sender webClientId i konfigurasjonsobjektet til GoogleSignin.configure(), sørg for at det er korrekt. Du kan få webClientId fra Google Developer Console. De er oppført under "OAuth 2.0-klient-ID-er".

Hvis du kjører appen din i feilsøkingsmodus og ikke bruker webClientId, eller du er sikker på at det er korrekt, kan problemet være en signaturfeil (SHA-1 eller SHA-256). Du må legge til følgende i android/app/build.gradle:

signingConfigs {
  debug {
       storeFile file(MYAPP_RELEASE_STORE_FILE)
       storePassword MYAPP_RELEASE_STORE_PASSWORD
       keyAlias MYAPP_RELEASE_KEY_ALIAS
       keyPassword MYAPP_RELEASE_KEY_PASSWORD
  }
  release {
       ...
  }