Flutter Google Sign-In: Cuando el PlatformException 10 te quema

Ese molesto PlatformException(sign_in_failed, 10) en Flutter es más común de lo que crees. Aquí te explico por qué aparece y la solución que yo aplico, sin dar muchas vueltas.

Me acuerdo de una vez, en un proyecto Flutter, que el Google Sign-In no funcionaba ni a patadas. Me tiraba un PlatformException(sign_in_failed, 10) y yo estaba convencido de que mi código era el problema. Perdí horas revisando lógica, llamando APIs, y al final, la solución era tan estúpida que me dio rabia. Era pura configuración.

La típica: el mensaje de error de Google te dice cero y nada. 10: ¿Qué significa eso? Absolutamente nada útil. Uno piensa que es su código, que algo en el signIn() o en el signInSilently() está mal, pero en la mayoría de los casos, créeme, no es tu código.

El verdadero culpable: las huellas digitales SHA

Este error casi siempre es un problema de autenticación entre tu aplicación Android y los servicios de Google (Firebase, Google APIs Console). Para que Google confíe en tu app, necesita verificar que eres tú. Esto lo hace a través de las huellas digitales de los certificados SHA (SHA-1 y SHA-256).

Primer paso: El debug SHA, el más olvidado

La mayoría de las veces, esto pasa porque no registraste tu debug SHA fingerprint en Firebase. Cuando desarrollas, Flutter usa una clave de debug por defecto. Si no la añades a tu proyecto en la consola de Firebase, Google no reconocerá tu app y te botará ese PlatformException 10. ¿Cómo lo sacas?

En tu terminal, puedes generar el SHA-1 del certificado de debug con este comando (asumiendo que estás en un sistema tipo Unix, en Windows es similar pero la ruta puede variar):

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

Ojo que la contraseña por defecto para el debug keystore es android. Una vez que tengas ese SHA-1, lo copias y lo pegas en la configuración de tu aplicación Android dentro de Firebase, en la sección de Configuración del proyecto -> Configuración de la aplicación -> Huellas digitales de certificados.

Importante: Después de cada cambio en Firebase, siempre descarga el nuevo google-services.json y reemplázalo en tu carpeta android/app/. Esto me costó entenderlo al principio, y es crítico.

¿Y qué pasa en producción? El release SHA y Play Store

Si tu app funciona perfecto en debug pero falla en producción, es casi seguro que el problema es el SHA de tu clave de release. Cuando generas tu APK o AAB para producción, usas otra clave (tu propia clave de producción). Esa clave también tiene una huella digital SHA que debes registrar en Firebase.

Puedes obtenerla con un comando similar, apuntando a tu keystore de producción:

keytool -exportcert -list -v \ 
-alias <tu-nombre-de-clave> -keystore <ruta-a-tu-keystore-de-produccion>

Pero espera, hay un truco adicional: si subes tu app a Google Play Store y activas la función App Signing by Google Play, es muy probable que Google firme tu app con una clave diferente a la tuya. En este caso, el SHA que necesitas registrar en Firebase no es el de tu clave de producción original, sino el que te proporciona Google Play Console.

Para encontrarlo, ve a tu Google Play Console, busca tu aplicación, y luego en la sección de Lanzamientos -> Configuración -> Firma de la aplicación. Ahí encontrarás la huella digital SHA-1 y SHA-256 que debes copiar y pegar en Firebase. Esta es una trampa común que me ha sacado canas.

Para no andar adivinando: signingReport

Para ver todas las huellas digitales SHA de tu proyecto (debug y release, si las tienes configuradas), hay un comando de Gradle que es una maravilla:

cd android
./gradlew signingReport

Esto te mostrará una lista de variantes (debug, release, etc.) y sus correspondientes SHA-1 y SHA-256. Te ahorra mucho tiempo de búsqueda manual.

¿Qué hay de los otros 'fixes'?

He visto gente que sugiere aumentar la memoria de Gradle editando gradle.properties (por ejemplo, -Xmx256m). Si bien eso puede ayudar con problemas de compilación en máquinas con poca RAM, no creo que sea la raíz de este error de autenticación específico. Es más un 'por si acaso' que una solución directa al PlatformException 10.

Mi recomendación concreta

Si te encuentras con un PlatformException(sign_in_failed, 10) en Flutter, esto es lo que yo hago:

  1. Verifica el Debug SHA: Asegúrate de que tu SHA-1 de debug (el que sacas del debug.keystore) esté registrado en tu proyecto de Firebase.
  2. Descarga google-services.json: Con cada cambio en Firebase, descarga el archivo actualizado y reemplázalo en android/app/.
  3. Limpia y reconstruye: Haz un flutter clean y luego flutter pub get. Después, intenta correr la aplicación de nuevo.
  4. Si es en Release: Revisa las huellas digitales SHA de tu clave de producción. Y si usas Google Play App Signing, ese es el SHA que debes registrar en Firebase, no el de tu propio keystore de producción.
  5. Usa signingReport: Si todavía no estás seguro, corre ./gradlew signingReport desde la carpeta android/ de tu proyecto para ver todas las huellas digitales que Gradle reconoce.

Generalmente, con estos pasos, se soluciona. El problema casi nunca está en el código de tu UI o en cómo llamas a google_sign_in, sino en cómo tu aplicación está registrada con Google.

Jorge RequenaDeveloper full-stack · Chile