340

The dialog for the credentials is opened successfully(Google's account selector dialog), but after I fill my credentials I'm getting this error. I followed the instructions from here. Created a Firebase project, enabled the Google Drive API (that's what I need for now) from the Google APIs Console.

The code throwing the exception:

final GoogleSignIn _googleSignIn = GoogleSignIn(
  scopes: [
    'https://www.googleapis.com/auth/drive',
  ],
);

await _googleSignIn.signIn();

That's the stack trace:

E/flutter ( 5068): [ERROR:flutter/shell/common/shell.cc(184)] Dart Error: Unhandled exception:
E/flutter ( 5068): PlatformException(sign_in_failed, com.google.android.gms.common.api.ApiException: 10: , null)
E/flutter ( 5068): #0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:551:7)
E/flutter ( 5068): #1      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:292:18)
E/flutter ( 5068): <asynchronous suspension>
E/flutter ( 5068): #2      GoogleSignIn._callMethod (package:google_sign_in/google_sign_in.dart:226:58)
E/flutter ( 5068): <asynchronous suspension>
E/flutter ( 5068): #3      GoogleSignIn._addMethodCall (package:google_sign_in/google_sign_in.dart:268:20)
E/flutter ( 5068): #4      GoogleSignIn.signIn (package:google_sign_in/google_sign_in.dart:339:48)
E/flutter ( 5068): #5      ThatsMyComponentState.theSignInFuction.<anonymous closure> (package:my_app/widgets/my_file.dart:666:45)
E/flutter ( 5068): <asynchronous suspension>
E/flutter ( 5068): #6      _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:507:14)
E/flutter ( 5068): #7      _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:562:30)
E/flutter ( 5068): #8      GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:102:24)
E/flutter ( 5068): #9      TapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:242:9)
E/flutter ( 5068): #10     TapGestureRecognizer.acceptGesture (package:flutter/src/gestures/tap.dart:204:7)
E/flutter ( 5068): #11     GestureArenaManager.sweep (package:flutter/src/gestures/arena.dart:156:27)
E/flutter ( 5068): #12     _WidgetsFlutterBinding&BindingBase&GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:184:20)
E/flutter ( 5068): #13     _WidgetsFlutterBinding&BindingBase&GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:158:22)
E/flutter ( 5068): #14     _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:138:7)
E/flutter ( 5068): #15     _WidgetsFlutterBinding&BindingBase&GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:101:7)
E/flutter ( 5068): #16     _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:85:7)
E/flutter ( 5068): #17     _invoke1 (dart:ui/hooks.dart:168:13)
E/flutter ( 5068): #18     _dispatchPointerDataPacket (dart:ui/hooks.dart:122:5)

The version of the google_sign_in plugin is 4.0.0.

That's the output of flutter doctor -v:

[√] Flutter (Channel stable, v1.0.0, on Microsoft Windows [Version 10.0.17763.253], locale en-US)
• Flutter version 1.0.0 at C:\src\flutter-0.7.3\flutter
• Framework revision 5391447fae (10 weeks ago), 2018-11-29 19:41:26 -0800
• Engine revision 7375a0f414
• Dart version 2.1.0 (build 2.1.0-dev.9.4 f9ebf21297)

[√] Android toolchain - develop for Android devices (Android SDK 28.0.3)
• Android SDK at C:\Users\myuser\AppData\Local\Android\Sdk
• Android NDK location not configured (optional; useful for native profiling support)
• Platform android-28, build-tools 28.0.3
• ANDROID_HOME = C:\Users\myuser\AppData\Local\Android\Sdk
• Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java
• Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1248-b01)
• All Android licenses accepted.

[√] Android Studio (version 3.3)
• Android Studio at C:\Program Files\Android\Android Studio
• Flutter plugin version 32.0.1
• Dart plugin version 182.5124
• Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1248-b01)

[!] IntelliJ IDEA Community Edition (version 2018.1)
• IntelliJ at C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2018.1.6
X Flutter plugin not installed; this adds Flutter specific functionality.
X Dart plugin not installed; this adds Dart specific functionality.
• For information about installing plugins, see
  https://flutter.io/intellij-setup/#installing-the-plugins

[!] VS Code, 64-bit edition (version 1.30.2)
• VS Code at C:\Program Files\Microsoft VS Code
• Flutter extension not installed; install from
  https://marketplace.visualstudio.com/items?itemName=Dart-Code.flutter
[√] Connected device (1 available)
• Android SDK built for x86 • emulator-5554 • android-x86 • Android 8.1.0 (API 27) (emulator)

! Doctor found issues in 2 categories.

Any help will be much appreciated. Thanks!

4
  • 8
    To all: pay attention to the exception code ApiException: 10 and refer to the docs first - developers.google.com/android/reference/com/google/android/gms/… Make sure you're fixing the right issue. For example code 7 would just mean 'no internet connection'. Commented Feb 14, 2020 at 13:52
  • Run ./gradlew signingReport, it's under the app Android folder. Add SHA1 in google Firebase Google Sign in configuration. developers.google.com/android/guides/client-auth . You will need an SHA1 for each computer you work on. Commented Jun 27, 2020 at 23:44
  • @KirillKarmazin any idea what 12500 is? E/flutter (23795): [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: PlatformException(sign_in_failed, com.google.android.gms.common.api.ApiException: 12500: , null) Commented Jul 2, 2020 at 13:49
  • My issue was running the app in the debug mode yet the keys in the console had the SHA for release key. Watch out on this use flutter run --release Commented Feb 17, 2024 at 6:47

65 Answers 65

472

I run into the same issue just now. This might happens if you are running on debug and you did not register a SHA fingerprint in firebase. I solved it by generating a debug.keystore by running:
keytool -list -v -alias androiddebugkey -keystore ~/.android/debug.keystore

and registering it inside the app on Firebase. Don't forget to download the new google-services.json after that.

See also this.

enter image description here

Edit If you are not able to use authenticate in release mode try the following:

-Add the SHA certificate fingerprints of the release key.

keytool -exportcert -list -v \ -alias <your-key-name> -keystore <path-to-production-keystore>

For more details on that see here on the section "get release certificate" https://developers.google.com/android/guides/client-auth

If your authentication is still not working, probably it is because you downloaded the app from Playstore and you enabled the "App Signing by Google Play Feature" Then for this case, go to play store publish console and go to app signing under release management. There you will find the SHA certificate fingerprint to register in Firebase console.

enter image description here

Final step: If it still not working, double check that you have put the right fingerprints with cd android then ./gradlew signingReport (check Variant: debug, release ). It should work now. But if not, try to run terminal run the command flutter clean.

Sign up to request clarification or add additional context in comments.

19 Comments

Thanks for this. This helped. Worthwhile noting that both the SHA1 and SHA256 keys had to be added for the auth to work
@TSR this worked but I didn't have to download a new google-services.json.
FYI, I had the same error even after configuring my sha fingerprints. Turns out i also had to add a support email address per github.com/flutter/flutter/issues/25909#issuecomment-497378619 .
@MichaelNelson this was my problem, too
your edit linking to "If you've published your app using Play App Signing, a requirement when using Android App Bundle, you can get your SHA-1 from the Google Play Console on the Release > Setup > App Integrity page" saved me! thank you!
|
196

I spent ages trying to fix this.

1. Open grade.properties This file is found under: {{YOUR PROJECT}}/android/gradle.properties

enter image description here

2. Add the following argument to 'org.gradle.jvmargs' as shown in the screenshot.

-XX:MaxHeapSize=256m -Xmx256m

enter image description here

3. Right click on 'gradlew' and go to 'Open in Terminal' This file is found under {{YOUR PROJECT}}/android/gradlew

enter image description here

4. Type in the following command.

gradlew signingReport

If did not work first try second command:

./gradlew signingReport

5. Wait for the compilation to finish and your SHA keys should be printed out for you.

enter image description here

Use these keys to authenticate your app in https://console.firebase.google.com/

25 Comments

For me that is the only thing that worked, my keytool generated not working SHA-1 / SHA-256
If step 4 didn't work, call gradlew like this instead: ./gradlew signingReport
Chiming in to say this is also the only thing that worked for me. Tried everything else and spent days trying to solve the issue before finding this.
this is the easiest method! this should be accepted.
The best answer. Perfect.
|
128

Open the Firebase console and click on the settings icon.

You will see the list of the apps connected to your Firebase project

For Android

  1. Open terminal inside your flutter project
  2. cd android
  3. ./gradlew signingReport or gradlew signingReport
  4. Paste your SHA1 key
  5. Download and replace the google-services.json
  6. flutter clean

IOS:

  1. Configure your Firebase project
  2. Select IOS
  3. Enter your Bundle ID
  4. Download credetials
  5. Download and replace GoogleService-info.plist

Add this to your info.plist

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>**INSERT HERE YOUR RESERVED_CLIENT_ID FROM GoogleService-Info.plist**</string>
        </array>
    </dict>
</array>

4 Comments

gradlew signingReport helps me a lot, because I first I just use the wrong keystore. And with that command, you get definitely the right one.
Thank you, I was struggling all the day to find a solution , I gave you up-vote :)
good it worked for me, but you need to register both SHA1 and SHA256 to make it work
It worked well, thanks. I wanted to know if there is a possibility to change the name of the project when login in through google? like changing the project name from project-......... to the actual name of the app
111

The following solution works in flutter project:

Step 1: Generate SHA1 and SHA256 keys.
Step 2: Add both the SHA1 and SHA256 to firebase. (in you app settings)
Step 3: Download google-services.json to android/app in your project folder.
Step 4: In your terminal run the command flutter clean .
Step 5: Run your flutter app.

For more information visit:
https://developers.google.com/android/guides/client-auth
https://firebase.google.com/docs/flutter/setup

2 Comments

clean is very important
This is the right solution. Additionally, if Firebase package-name and project package-name (path) do not match, you still get this error code:10.
47

For me I didn't need to add extra SHAs, I realized I didn't enable the Google Sign-in method in the Authentication tab in Firebase console

Enabling google sign-in method in Firebase console

1 Comment

Tried all the rest - only to realize that your simple solution was the one I needed!
43

When I came across this problem, I tried all other solutions described in this post. None of these worked. Eventually I figured it out: In my situation I had to make sure to have my "support email" set.

Public Setting Support Email

Comments

26

Additional steps you might have to take in order for google_sign_in to work:

][2]

  • If you could run Google Sign In during debug but NOT in release, there is a high chance that you did not add your release key's SHA1 and SHA256 to firebase. To get the release key's SHAs, use keytool -list -v -keystore ~/key.jks -alias key

console You should end up with total of at least 6 SHA credentials: 2 from the debug key, 2 from Google Play linking, and 2 from the release key. Note that you do not need to redownload the google-services.json file after adding the release SHA credentials to firebase.

Firebase

# Flutter Wrapper
-keep class io.flutter.app.** { *; }
-keep class io.flutter.plugin.**  { *; }
-keep class io.flutter.util.**  { *; }
-keep class io.flutter.view.**  { *; }
-keep class io.flutter.**  { *; }
-keep class io.flutter.plugins.**  { *; }

# GooglePlay Services
-keep class com.google.android.gms.** { *; }
-dontwarn com.google.android.gms.**
-keep class com.google.common.** { *; }
-dontwarn com.google.common.**

Comments

25

If your released app is not working properly, and you are using Google Play Signing, Copy the SHA from your play store account, the one from your local key will not work enter image description here

4 Comments

Thank you! This is the missing essential step to putting my app in production that had me trial-and-erroring for hours. Other solutions here were only good for building debug versions.
I have this issue, my app that has been on the Google Play App Store suddenly not working, but unfortunately the 'App Signing' section is no longer available.
ahhh I got it, it is now in the 'App Integrity' section. and then copy that SHA-1 certificate fingerprint to Firebase Console (project settings -> general -> scroll down until you see your Android app)
You saved life! All are debug rellated and won't work after production
17

I found a solution for the error com.google.android.gms.common.api.ApiException: 10: I solved it by adding more keys to the firebase. initially I thought it was stupid and useless, then in the end it turned out to be the solution (I added up to 10 SHA, don't worry if that's a lot).

  1. Where did I find all these keys?

I found all these keys by entering the android folder and typing the command ./gradlew signingReport (I use linux, it also works on mac. For windows the command is gradlew signingReport)

  1. After that?

After that, he printed out a very long list of keys in my terminal, and I took all the ones that were different, that were at the top of the list.

Note: you will get all the keys (both debug and release) of each package of the app, but rest assured that all those of the packages are the same and only for debugging (so you will have to take these same keys only once)

  1. Finally

Once you have all the app keys, go to your project's Firebase settings, scroll down and add any keys you found. After that, you will need to download the google-services.json file again and run a flutter clean in your project's local folder on your computer.

Now you can build your app and see if it works!

I hope this could help someone.

1 Comment

Thanks for the comment. I was finally able to resolve it. :)
15

The answer that given early are right. None of them are false. But if you still face the error PlatformException(sign_in_failed, com.google.android.gms.common.api.ApiException: 10: , null). One thing that your should check is your OAuth 2.0 Client IDs

enter image description here

  1. Go to : https://console.cloud.google.com/apis/credentials
  2. Select your project on the top left screen
  3. Create Client ID base on your platform (iOS or Android)
  4. Just follow the next steps

Once you successfully generate the client ID, then your application will works as expected.

--- Note ---

But first, make sure you have regitered your SHA-1, package id email support and has been download the google service json from your firebase console project.

1 Comment

does that mean we need to register both as google cloud console and firebase?
12

"Flutter clean" its the piece that everybody is missing after register the SHA1 in Firebase Console!

Comments

11

You have missed configuration step enable google login on firebase.

Google sign-in is automatically configured on your connected iOS and web apps. To set up Google sign-in for your Android apps, you need to add the SHA1 fingerprint for each app on your Project Settings.

Just complete these enough steps below

  1. Enable Google Auth Method
  2. Configure certificate fingerprints in your current project at project-level setting. How to Generate certificate.
  3. Select email for Project support email
  4. Download google-service.json into your project.
  5. Run flutter clean
  6. start flutter run

image

Comments

8

make sure you have added

 dependencies {
    classpath 'com.google.gms:google-services:4.2.0'
}

in android/build.gradle and

apply plugin: 'com.google.gms.google-services'

in android/app/build.gradle. Also, make sure applicationId in android/app/build.gradle is the same as your package name in AndroidManifest.xml(You may forget to change applicationId after changing package name sometimes). This applicatioonId or package name in manifest file should be the name of your android package name in firebase app.

Comments

8

One reason that you might be experiencing this error is if you did not fill out google's OAuth consent form. This is a new change to Firebase.

Here are the steps you need to follow to fill out the consent form for your app:

  1. Navigate to the google api console (currently at https://console.developers.google.com), make sure you are logged into your account which your firebase project is created under.
  2. Select your project from the "select a project" dropdown in top left of the developer console.
  3. In the left hand pane travel to "credentials" and then switch to the "OAuth consent screen".
  4. Under "Application name" enter your application's public name
  5. Under "Application logo" upload a local image file of your application
  6. Under "Support email" enter the same support email listed in your firebase application.

Your screen should now look like this example by step 6

  1. Scroll down and fill out the "Application Homepage Link", "Application Privacy Policy Link", and "Application Terms of Service Link" by adding http:// before the authorized domain which your firebase app lives at.

Here is a highlighted example of how these regions should be filled out in step 7

  1. Click Save

These steps worked for me! While the link may not still exist, I'd like to reference the source of this solution here

4 Comments

Is it actually an answer to the question?
Thank you for the feedback. I tried to update my answer to be more specific--please let me know if it is now appropriate--and if not, how I can improve it.
Do you need to "Submit for Verification", or just "Save"?
If you arrived here, for your mental sanity, do no add a logo to the oauth screen consent. It's not needed and it triggers a verification.
6

For platform exception 10, try this:

  1. Generate a new SHA1 fingerprint on your machine,
  2. Go to your firebase android app setting in Firebase Console
  3. Click on add new fingerprint in your android app settings
  4. Paste the new SHA1 fingerprint into the field
  5. Generate a new json config file
  6. Replace the config file in android directory
  7. Run flutter clean
  8. Run your project

Comments

6

I tried all of the above answers and none worked. I'm putting my solution here in case someone runs into an edge case like mine:

  1. Mine didn't work with the above answers because I'm installing the app via Firebase App Tester (Firebase Distribution) and it resigned the app with entirely new test certificates, not the usual debug or release certificates you can get from Android Studio
  2. To solve it, go to Firebase App Distribution from Firebase Console and copy the test certificates SHA-1 and SHA-256 firebase app distribution certificates
  3. Enter these new certificates in Firebase Project Settings

1 Comment

Plus, you will need to run flutterfire configure and then ship a new build!
5

In my case, none of the answers solved the problem. After some thinking, I realized that sometime ago I have changed the package name of my application. If it is your case, you should simply create another application inside your Firebase project with your new package name and download google-services.json file again.

Comments

5

This happened to me also when I have reinstalled my OS. Just run ./gradlew signingReportand copy the SHA-1 and SHA-256 into Firebase config "add fingerprint"

1 Comment

solved my problem also
5

If your implementation works everywhere but not on Android, make sure that you use the correct WEB clientId supplied to GoogleProvider(clientId: clientId) when using firebase_ui_auth package.

I repeat: Use WEB clientId to make Google SignIn work on Android.

This is completely counterintuitive and not documented anywhere. It took me three days of trial and error until I finally found this comment.

3 Comments

For me it was to opposite. I used clientId to make it work on web, and it didn't work on Android until I removed it. github.com/flutter/flutter/issues/107532
This one worked after I tried everything else.
This perfectly work for me when i use it on my android
5

I had the same issue on android tried all above but not fixed. In my case issue was very simple. In my project i had already add google-service.json file and in my code pass clientId too

codeScreenshot

clientId is optional param required for IOs, so its least to error in Android.

check this too

Happy coding :)

1 Comment

Haha. Can't believe this is the issue for android. Thanks thanks.
3

This might seem silly, but that just happened to me now (after having some experience working with firebase in the past). I noticed that I did not enable Google authentication. Make sure you do that, as you might still see the login prompt (showing you your phone's google users, without it being enabled).

2 Comments

where do I enable thant?
@AhmedAlbarody In your firebase console - choose authentication and then you need to enable the services you want to use.
3

This answer has already more 30 answer but this is more COMPLETE STEP BY STEP APPROACH to solve this bug.

  1. Most likely you do not have debug.keystore in your C/User/.android directory. To generate one, do the following

$ keytool -genkey -v -keystore debug.keystore -storepass android -alias androiddebugkey -keypass android -keyalg RSA -keysize 2048 -validity 10000

use organization name Android country code US and name Android Debug

  1. when you have done so, navigate to your android flutter directory where gradlew is located and do the following

./gradlew signingReport

  1. You will have list of SHA1 SHA256 keys. copy both keys that is named debug.keystore to your flutter project firebase project settings (where you download google-services.json)

Flutter clean and rebuild your project.

1 Comment

Thanks. use ./gradlew signingReport to get SHA1 when test with emulator is the solution.
3

In my case the problem was I didn't add signinConfigs for debug in the android/app/build.gradle. I only added for release so the app wasn't working as I tested it.


android {
    ...

    signingConfigs {
        release {
            keyAlias keystoreProperties['keyAlias']
            keyPassword keystoreProperties['keyPassword']
            storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
            storePassword keystoreProperties['storePassword']
        }
        # It started working when I added the following debug section.
        debug {
            keyAlias keystoreProperties['keyAlias']
            keyPassword keystoreProperties['keyPassword']
            storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
            storePassword keystoreProperties['storePassword']
        }
    }
    buildTypes {
        release {
            signingConfig signingConfigs.release
        }
    }
}


I got this style of "referencing the keystore from the app" from https://docs.flutter.dev/deployment/android#reference-the-keystore-from-the-app.

Comments

2

You should generate SHA-1 and SHA-256 for each pc that you used. And add them all to firebase project settings.

And you should fill the form in OAuth Consent tab.

Comments

2

If it previously worked but now are using a different PC, you'll need to add new SHA-1/SHA-256 fingerprints generated by that PC to your project in Firebase. A good step-by-step example on doing that: https://stackoverflow.com/a/56091158/5365164

1 Comment

By explaining the rootcause, it's much easier to find the correct answer, thank you!
2

In my case it was a silly mistake,make sure that your applicationId in firebase like : 'com.example.appname' matches exactly with the applicationId in your app/src/build.gradle file,under the defaultConfig{}.No spelling errors,no upper case,lower case letter conflicts.In my case one letter was upper case which caused all the problems.

Comments

2

I know this issue has many replies already but I haven't seen this one yet. I solved ApiException: 10 by cleaning up!

  1. Removed unused OAuth 2.0 Client IDs from https://console.cloud.google.com/apis/credentials
  2. Removed unused fingerprints from the Firebase console.
  3. Download google-services.json again

1 Comment

Removed unused fingerprints and update google-services.json solved for me
2

You need to add your SHA-1 and SHA-256 to your Firebase project. If you've published your app using Play App Signing, a requirement when using Android App Bundle, you can get your SHA-1 from the Google Play Console on the Release > Setup > App Integrity page.

1 Comment

this one helped mee too. Play Console is soooo confusing
2

I faced a similar problem. but I solved it by taking a simple step.

First, let me tell you how the problem happened with my project:

I have linked my Flutter app to the Google Cloud Console to use Google Sign-In without Firebase. And it was working. Later, I linked the app (the Flutter app) to Firebase to use phone authentication. After this, when I tried to log in with Google Sign In, this error was thrown: "PlatformException(sign_in_failed, com.google.android.gms.common.api.ApiException: 10:, null, null)".

The reason was, When I call this method:

final response = await _googleSignIn.signIn();

The request was sent to Firebase, not Google Cloud Console. So, I tried this solution, and the error was solved:

  1. The solution is to just open your "google_services.json" file and delete the "client_id" from the this code in google_services.json file.

 "oauth_client": [         {     "client_id": "872887541893-6rib4t0mk07gu1l80emetda6o65e2m76.apps.googleusercontent.com",           "client_type": 3         }       ], 2. Run this command on your app's VSC terminal.    2.1.flutter clean 2.2. flutter pub get then run your app. it worked for me. Let me know if you have an issue with the above explanation.

Comments

2

Got the same issue. I checked the signingReport and found that the release SHA1 and SHA256 were different from others. I added these values in firebase and re-downloaded the google-services.json. This solved the issue.

Also, run flutter clean before building apk.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.