Soluciona los errores 10 y 28444 de Google Sign-In: Developer console is not set up correctly
ApiException: 10 del antiguo SDK de Google Sign-In y [28444] Developer console is not set up correctly de Credential Manager son el mismo problema de configuración. Significan que la app que pide iniciar sesión (su nombre de paquete y el SHA-1 del certificado que firmó esta compilación), o el ID de cliente web que pasó, no coincide con lo registrado en el proyecto. Lo que hay que corregir es el registro, no el código. Primero, comprueba que el SHA-1 de la clave que firmó la compilación que estás ejecutando esté en Firebase.
En resumen
- Es el mismo error con otro nombre. 10 es el
DEVELOPER_ERRORdel SDK antiguo, y 28444, el mensaje con el mismo significado que devuelve Credential Manager. La causa es el nombre de paquete, el SHA-1 de firma o el ID de cliente web. Distinguir los errores - Registra el SHA-1 de la clave que firmó la compilación en ejecución. La clave de depuración, la clave de carga y la clave de firma de la app de Google Play son todas distintas. SHA-1 por compilación
- En
serverClientIdva el ID de cliente web. No el ID de cliente de Android. Qué poner - El SDK antiguo se eliminó en agosto de 2026. En Credential Manager, el mismo error de configuración también puede parecer una cancelación del usuario. Al migrar
Cómo distinguir los errores
| Error | Dónde aparece | Qué significa |
|---|---|---|
ApiException: 10 | El antiguo Google Sign-In for Android | DEVELOPER_ERROR. La app está mal configurada. |
[28444] Developer console is not set up correctly. | Credential Manager. En google_sign_in 7 de Flutter, GoogleSignInExceptionCode.unknownError | Es un código no documentado. Como dice el mensaje, la configuración de OAuth no coincide con la app. |
| Se cancela sin que el usuario cancele | Credential Manager (GetCredentialCancellationException, canceled en Flutter) | A veces, los errores de configuración se notifican como una cancelación. |
ApiException: 12500 | El antiguo Google Sign-In for Android | Según la documentación de Firebase, no se configuró el correo electrónico de asistencia o falta una clave SHA. |
NoCredentialException | Credential Manager | No es un problema de configuración. El dispositivo no tiene una Cuenta de Google, o la solicitud está configurada para mostrar solo las cuentas que ya iniciaron sesión en esta app (más abajo). |
Los tres primeros tienen las mismas causas. La documentación del plugin de Flutter (google_sign_in_android) señala como causas habituales de los errores de configuración un SHA de firma ausente o incorrecto en una compilación, un nombre de paquete incorrecto del lado del servidor y un serverClientId ausente o incorrecto. Revísalas en ese orden.
El SHA-1 de la clave que firmó esta compilación
Google reconoce a la app que pide iniciar sesión por su nombre de paquete y por el SHA-1 del certificado que firmó el APK. El nombre de paquete es el applicationId de build.gradle (incluido el sufijo que le agregue el tipo de compilación), y debe coincidir con el de la app para Android registrada en Firebase. La firma depende de cómo se instaló la app.
| Compilación instalada | Firmada con | Dónde ver el SHA-1 |
|---|---|---|
| Compilación de depuración ejecutada desde Android Studio | El almacén de claves de depuración de este equipo (cambia de un equipo a otro) | La entrada debug de signingReport |
| Compilación de lanzamiento que firmaste e instalaste tú | Tu clave de carga (de lanzamiento) | La entrada release de signingReport |
| App instalada desde Google Play (cualquier segmento) | La clave de firma de la app que posee Google | La página Administrar la firma de apps de Play (Manage Play app signing) de Play Console |
| App instalada con Uso compartido interno de apps (Internal app sharing) | El certificado de prueba interna de Play | Certificado de prueba interna (Internal test certificate), en la página Uso compartido interno de apps de Play Console |
# Every build variant's signing key, from the project root
./gradlew signingReport
# The debug keystore (password: android)
keytool -list -v -alias androiddebugkey -keystore ~/.android/debug.keystore
# The certificate that signed an APK or AAB you already have
keytool -printcert -jarfile app-release.aabAgrega el SHA-1 que encontraste a las huellas digitales del certificado SHA (SHA certificate fingerprints) de la app para Android, en Configuración del proyecto (Project settings) > General > Tus apps (Your apps) de la consola de Firebase, y vuelve a descargar google-services.json para reemplazar el tuyo. Firebase crea el cliente de OAuth para Android de esa huella digital. Si registras todas las claves que usas, el inicio de sesión funciona sin importar cómo se haya instalado la app.
- Si funciona cuando la instalas tú, pero falla cuando viene de Play, falta la clave de firma de la app. Play vuelve a firmar la app con la clave de firma de la app que posee Google, no con tu clave de carga.
- Las apps nuevas quedan firmadas por Play con tres claves de forma predeterminada (firma lista para criptografía cuántica). En ese caso, la Ayuda de Play Console te indica que registres las tres huellas digitales con tus proveedores de API.
- Un mismo par de nombre de paquete y SHA-1 solo se puede registrar en un proyecto, contando todos los proyectos de Firebase y Google Cloud. Si separas los proyectos de desarrollo y de producción, dale a cada compilación su propio nombre de paquete.
En serverClientId va el ID de cliente web
En serverClientId va el ID de cliente de OAuth de la aplicación web de tu proyecto de Google Cloud. Es el valor que se usa como público (audience) de los tokens de ID de Google, así que no debe ir ahí el ID de cliente de Android. En un proyecto de Firebase, es la entrada de google-services.json con client_type 3, que el complemento google-services convierte en R.string.default_web_client_id.
// Android (Kotlin): the Sign in with Google button
val buttonOption = GetSignInWithGoogleOption.Builder(
serverClientId = getString(R.string.default_web_client_id),
).build()
// Android (Kotlin): the bottom sheet, offering every account on the device
val sheetOption = GetGoogleIdOption.Builder()
.setServerClientId(getString(R.string.default_web_client_id))
.setFilterByAuthorizedAccounts(false)
.build()
// Flutter (google_sign_in 7), without google-services.json
await GoogleSignIn.instance.initialize(
serverClientId: 'YOUR_WEB_CLIENT_ID.apps.googleusercontent.com',
);google_sign_in7 de Flutter lee ese valor aunque no le pasesserverClientIdsigoogle-services.jsontiene una entrada de cliente web. Si no la tiene, agrega una app web al proyecto de Firebase y vuelve a descargar el archivo. En Android,clientIdno se usa.- Si 28444 apareció por primera vez al actualizar de 6.x a 7, sospecha de
serverClientId. El equipo de Flutter explica que el SDK antiguo que usaba 6.x no siempre validaba este valor, así que un valor incorrecto pudo haber funcionado (flutter/flutter #174319).
Al pasar del SDK antiguo a Credential Manager
Las API del antiguo Google Sign-In for Android se eliminaron en play-services-auth 22.0.0 (26 de agosto de 2026). Si usas esa versión o una posterior, el código de inicio de sesión hecho con GoogleSignInClient no compila, así que migra a Credential Manager.
| SDK antiguo | Credential Manager |
|---|---|
La pantalla de inicio de sesión de GoogleSignInClient | GetSignInWithGoogleOption (botón) o GetGoogleIdOption (hoja inferior) |
silentSignIn() | GetGoogleIdOption con setFilterByAuthorizedAccounts(true) y setAutoSelectEnabled(true) |
requestIdToken(webClientId) | El mismo ID de cliente web en serverClientId |
signOut() | clearCredentialState() |
ApiException: 10 | [28444] Developer console is not set up correctly o una cancelación |
- El valor predeterminado de
setFilterByAuthorizedAccountsestrue. Los usuarios que nunca iniciaron sesión en esta app recibenNoCredentialException, así que, para el registro y el primer inicio de sesión, ponlo enfalseo usa el flujo del botón. - En el emulador, inicia sesión con una Cuenta de Google. Usa una imagen del sistema con Google APIs. Si el dispositivo no tiene ninguna cuenta, aparece
NoCredentialException.
Fuentes
- CommonStatusCodes.DEVELOPER_ERROR, notas de la versión de los Servicios de Play: qué significa 10 y la eliminación de las API de Google Sign-In
- Migrar desde el antiguo Google Sign-In, implementar Sign in with Google con Credential Manager, solución de problemas de Credential Manager
- Autenticar con Google en Android (Firebase), preguntas frecuentes sobre problemas de Firebase en Android, el complemento google-services, huellas digitales SHA y clientes de OAuth (Ayuda de Firebase)
- Clientes de OAuth (Ayuda de Google Cloud), obtener el SHA-1, firma de apps de Play, uso compartido interno de apps
- google_sign_in_android, flutter/flutter #174319 (donde se reporta 28444), codelab de Sign in with Google
