Flutter: PlatformException(sign_in_failed, com.google.android.gms.common.api.ApiException: 10: , null, null)
Google Sign-In failed on Android because the app's SHA-1 fingerprint or package name is not registered for the OAuth client.
PlatformException(sign_in_failed, com.google.android.gms.common.api.ApiException: 10ApiException: 10sign_in_failed ApiException 12500google_sign_in ApiException: 10 Meaning
ApiException 10 is a developer error: the debug or release SHA-1 is missing in Firebase/Google Cloud, google-services.json is stale, or the package name differs. Add both debug and release (and Play App Signing) SHA-1/SHA-256 fingerprints, then download a new google-services.json.
Common causes
- SHA-1 for the signing keystore not added in Firebase
- Release/Play signing key fingerprint missing
- Outdated google-services.json
- Package name mismatch
- OAuth consent screen or client not configured
⚡ Quick fix
- Run
cd android && ./gradlew signingReportand copy SHA-1 into Firebase project settings - Download the new google-services.json
- Add the Play Console app-signing SHA-1 for release builds
Detailed fix by platform
Android
cd android && ./gradlew signingReportprints SHA-1 for every variant
How to diagnose
- Code — ApiException 10 or 12500?
- SHA — Debug and release added?
- File — google-services.json updated?
🔧 Still not fixed?
Many errors look alike. If the steps above didn’t solve it, one of these is probably what you’re facing:
Similar errors
- Android license status unknown / licenses not accepted flutter doctor: Android license status unknown. Run `flutter doctor --android-licenses` to accept the SDK licenses
- Cleartext HTTP traffic not permitted Flutter (Android): java.io.IOException: Cleartext HTTP traffic to api.example.com not permitted
- cmdline-tools component is missing flutter doctor: Android SDK is missing command-line tools; download from https://goo.gl/XxQghQ — cmdline-tools component is missing
Most viewed in Flutter / Dart
- setState() called after dispose() Flutter: setState() called after dispose(): _MyState#1a2b3 (lifecycle state: defunct, not mounted)
- A RenderFlex overflowed Flutter: A RenderFlex overflowed by x pixels on the right/bottom
- Null check operator used on a null value Dart/Flutter: Null check operator used on a null value
Other ways to find it
Where this error sits
Origin: On your device. Errors that are often confused with or caused by this one (click to open):
🧠 Still stuck? Analyze your error
Paste the full message, response headers or stack trace — we'll detect the platform and point to the most likely cause.
💬 What worked for others
No tips yet — did something else fix this for you?
Share what worked for you
Tips are checked by an editor before they appear. Links are removed.
Report a correction or suggest an improvement
Last updated 4 Nov 2026