FirexportBlog

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_ERROR del 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 serverClientId va 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

ErrorDónde apareceQué significa
ApiException: 10El antiguo Google Sign-In for AndroidDEVELOPER_ERROR. La app está mal configurada.
[28444] Developer console is not set up correctly.Credential Manager. En google_sign_in 7 de Flutter, GoogleSignInExceptionCode.unknownErrorEs 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 canceleCredential Manager (GetCredentialCancellationException, canceled en Flutter)A veces, los errores de configuración se notifican como una cancelación.
ApiException: 12500El antiguo Google Sign-In for AndroidSegún la documentación de Firebase, no se configuró el correo electrónico de asistencia o falta una clave SHA.
NoCredentialExceptionCredential ManagerNo 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 instaladaFirmada conDónde ver el SHA-1
Compilación de depuración ejecutada desde Android StudioEl 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 GoogleLa 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 PlayCertificado 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.aab

Agrega 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_in 7 de Flutter lee ese valor aunque no le pases serverClientId si google-services.json tiene 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, clientId no 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 antiguoCredential Manager
La pantalla de inicio de sesión de GoogleSignInClientGetSignInWithGoogleOption (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 setFilterByAuthorizedAccounts es true. Los usuarios que nunca iniciaron sesión en esta app reciben NoCredentialException, así que, para el registro y el primer inicio de sesión, ponlo en false o 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

Todos los artículos →