Android · 4 min read

Google Sign-In DEVELOPER_ERROR on Android release builds.

It works on your machine. It fails for everyone who installs from Play. The code is fine. Google does not recognise the key your release is signed with.

What you see

Google Sign-In works perfectly when you run the app from your machine. Then you build a release APK, or install the build from a Play track, and sign-in fails with DEVELOPER_ERROR.

Nothing in your code changed between the two builds. That is the clue.

Why it happens

Google checks which key signed the app before it allows sign-in. It compares the app's SHA-1 fingerprint with the fingerprints registered for your Android app in Firebase.

Usually only the debug keystore's SHA-1 was registered, because that is what you used while setting up. The release keystore has a different fingerprint. If you use Play App Signing, Play re-signs the app with yet another key, so the build users install has a third fingerprint.

Google sees a fingerprint it does not know and refuses with DEVELOPER_ERROR.

It helps to know which key signs which build:

Each one has its own SHA-1. Google needs to know about every one that will run your app.

The fix, step by step

Step 1. Get your release fingerprint. Run keytool against the keystore you sign releases with:

keytool -list -v -keystore release.keystore -alias YOUR_ALIAS

Copy the SHA-1 line.

Step 2. Get your debug fingerprint too, if it is not registered. The default debug keystore uses a well known password:

keytool -list -v -keystore ~/.android/debug.keystore \
  -alias androiddebugkey -storepass android

Step 3. Get the Play App Signing fingerprint. In Play Console, open your app, then App integrity. Copy the SHA-1 of the app signing key. This is the key that signs what users actually install from Play.

Step 4. Add all of them in Firebase. Go to Project settings, choose the Android app, and add each SHA-1 as a fingerprint. Debug, release and Play signing.

Step 5. Try again without rebuilding. This is a server side check. You do not need a new build. Sign-in starts working within minutes on the build you already have installed.

Step 6. Refresh your config for future builds. Re-download google-services.json and replace the copy in your project, so the next build carries the updated client list.

Step 7. Check the client id in your code. Keep the Web client id as webClientId in your sign-in config. Using the Android or iOS client id there is a separate way to break sign-in.

Step 8. Test the build users get. Install from a Play test track, not a sideloaded APK. That copy is signed with the Play key, so it is the real test of the fingerprint you just added.

How to prevent it

Related traps

Field Notes

This fix is one of 228 in Field Notes: What Broke and How We Fixed It.

Every entry follows the same pattern: the symptom you see, the real cause, the fix that worked, and the rule that stops it coming back. App Store, Google Play, Capacitor, Netlify, Supabase, Stripe, n8n and more.

Get Field Notes

Building a lot? The Builder Bundle has Field Notes plus the launch playbook, the prompt book and the Claude Code skills kit. See the bundle.

Related fixes

Keep reading.