Saltar al contenido

Google Login en Android

GitHub

En esta guía, aprenderás a configurar Google Login con Capgo Social Login para Android. Asumo que ya has leído la guía de configuración general.

En esta parte, aprenderás a configurar Google login en Android.

  1. Crear un client ID de Android.

    1. Haz clic en la barra de búsqueda

      Barra de búsqueda de Google Console
    2. Busca credentials y haz clic en el APIs and Services uno (el número 2 en la captura)

      Resultados de búsqueda que muestran la opción de credenciales con APIs y servicios resaltados
    3. Haz clic en el create credentials

      Botón Crear credenciales en Google Console
    4. Selecciona OAuth client ID

      Opción de client ID de OAuth en el menú de creación de credenciales
    5. Selecciona el Android tipo de aplicación

      Selección del tipo de aplicación con la opción de Android resaltada
    6. Abrir Android Studio

    7. En la parte inferior del navegador, busca la Gradle Scripts

      sección Gradle Scripts en el navegador de proyectos de Android Studio
    8. Busca build.gradle para el módulo app

      archivo build.gradle (Module: app) en la sección Gradle Scripts
    9. Copia el android.defaultConfig.applicationId. Este será tu package name en la consola de Google

      Archivo build.gradle mostrando la configuración de applicationId
    10. Ahora, abre la terminal. Asegúrate de estar en la android carpeta de tu app y ejecuta ./gradlew signInReport

    Terminal mostrando el comando gradlew signInReport
    1. Desplázate hasta el inicio de este comando. Deberías ver lo siguiente. Copia el SHA1.
    Salida de terminal mostrando el fingerprint del certificado SHA1
    1. Ahora, vuelve a la Google Console. Introduce tu applicationId como el Package Name y tu SHA1 en el campo del certificado y haz clic en create
    Formulario de creación de cliente Android con nombre del paquete y SHA1 completados
  2. Crea un cliente web (esto es necesario para Android)

    1. Ve a la pestaña Create credentials página en Google Console

    2. Establece el tipo de aplicación en Web

      Selección del tipo de aplicación con la opción Web resaltada
    3. Haz clic Create

      Formulario de creación del cliente web con el botón Create abajo
    4. Copia el client ID, lo usarás como el webClientId en tu code de JS/TS

      Detalles del Client ID con el ID de cliente Web para copiar
  3. Modifica tu MainActivity

    1. Abre tu app en Android Studio. Puedes ejecutar cap open android

    2. Busca MainActivity.java

      1. Abre la app carpeta

        Carpeta App en el navegador de proyectos de Android Studio
      2. Busca java

        Carpeta Java en la estructura del proyecto de Android Studio
      3. Busca tu MainActivity.java y haz clic en él

        Archivo MainActivity.java en la estructura del paquete
    3. Modificar MainActivity.java. Por favor, añade el siguiente code

      import ee.forgr.capacitor.social.login.GoogleProvider;
      import ee.forgr.capacitor.social.login.SocialLoginPlugin;
      import ee.forgr.capacitor.social.login.ModifiedMainActivityForSocialLoginPlugin;
      import com.getcapacitor.PluginHandle;
      import com.getcapacitor.Plugin;
      import android.content.Intent;
      import android.util.Log;
      import com.getcapacitor.BridgeActivity;
      // ModifiedMainActivityForSocialLoginPlugin is VERY VERY important !!!!!!
      public class MainActivity extends BridgeActivity implements ModifiedMainActivityForSocialLoginPlugin {
      @Override
      public void onActivityResult(int requestCode, int resultCode, Intent data) {
      super.onActivityResult(requestCode, resultCode, data);
      if (requestCode >= GoogleProvider.REQUEST_AUTHORIZE_GOOGLE_MIN && requestCode < GoogleProvider.REQUEST_AUTHORIZE_GOOGLE_MAX) {
      PluginHandle pluginHandle = getBridge().getPlugin("SocialLogin");
      if (pluginHandle == null) {
      Log.i("Google Activity Result", "SocialLogin login handle is null");
      return;
      }
      Plugin plugin = pluginHandle.getInstance();
      if (!(plugin instanceof SocialLoginPlugin)) {
      Log.i("Google Activity Result", "SocialLogin plugin instance is not SocialLoginPlugin");
      return;
      }
      ((SocialLoginPlugin) plugin).handleGoogleLoginIntent(requestCode, data);
      }
      }
      // This function will never be called, leave it empty
      @Override
      public void IHaveModifiedTheMainActivityForTheUseWithSocialLoginPlugin() {}
      }
    4. Guardar el archivo

  4. Usa Google Login en tu aplicación

    1. Primero, importa SocialLogin

      import { SocialLogin } from '@capgo/capacitor-social-login';
    2. Llama a initialize. Solo debe llamarse una vez.

      // onMounted is Vue specific
      // webClientId is the client ID you got in the web client creation step not the android client ID.
      onMounted(() => {
      SocialLogin.initialize({
      google: {
      webClientId: '673324426943-avl4v9ubdas7a0u7igf7in03pdj1dkmg.apps.googleusercontent.com',
      }
      })
      })
    3. Llama a SocialLogin.login. Crea un botón y ejecuta el siguiente code al hacer clic.

      const res = await SocialLogin.login({
      provider: 'google',
      options: {}
      })
      // handle the response
      console.log(JSON.stringify(res))
  5. Configura el emulador para las pruebas

    1. Entra en Device manager y haz clic en el botón más

      Device Manager en Android Studio con el botón más resaltado
    2. Crea un dispositivo virtual

      Botón Create Virtual Device en Virtual Device Configuration
    3. Selecciona cualquier dispositivo con un Play Store icono

      Selección de hardware mostrando dispositivos con soporte de Play Store

      Como puedes ver, pixel 8 soporta los Play Store servicios

    4. Haz clic next

      Botón Siguiente en el asistente de creación
    5. Asegúrate de que la imagen del SO sea de tipo Google Play. DEBE ser de tipo Google Play

      Selección de imagen de sistema con imágenes de Google Play
    6. Click next

      Botón Siguiente en la selección de imagen del sistema
    7. Confirma tu dispositivo. Puedes nombrar tu emulador como prefieras

      Pantalla de verificación de configuración del dispositivo con botón Finalizar
    8. Entra en Device Manager y arranca tu simulador

      Device Manager con un dispositivo virtual y el botón de play
    9. Una vez que arranque el simulador, entra en sus ajustes

      Emulador de Android mostrando la app de ajustes
    10. Entra en Google Play

    Pantalla de ajustes con la opción de Google Play
    1. Haz clic Update y espera unos 60 segundos
    Pantalla de actualización de Google Play con el botón Update
  6. Prueba tu aplicación

    Si lo has hecho todo correctamente, deberías ver el flujo de login de Google funcionando:

    Demo del flujo de login de Google en Android mostrando el proceso de sign-in y la autenticación exitosa

Si tienes algún problema, primero compara la configuración de tu app con los valores de Google Cloud Console. Los fallos de Google Sign-In en Android suelen deberse a que el package name, el SHA-1 o el client ID no coinciden.

En Android, este plugin usa Google Credential Manager (androidx.credentials y Sign in with Google), no el antiguo GoogleSignInClient API. Los errores de Logcat como GetCredentialCustomException: [28444] Developer console is not set up correctly vienen de ese stack.

Filtra Logcat con GoogleProvider o CapgoSocialLogin tras un login fallido. El plugin registra tu package name, el SHA-1 de firma y un webClientId para que puedas compararlos con Google Cloud Console.

Necesitas dos tipos de client IDs de OAuth 2.0 en el mismo proyecto de Google Cloud:

Tipo de clientePara qué sirveDónde se ubica
Aplicación webAudiencia del token de ID del servidorwebClientId en SocialLogin.initialize()
Android, uno por cada signing keyDemuestra que tu APK tiene permiso para llamar a GoogleSolo en Google Cloud Console. No pases este ID a webClientId

Un error común es usar el Android client ID como webClientId. Credential Manager requiere el Web client ID ahí. El cliente de Android solo necesita el package name y el SHA-1 registrados en la consola.

Crea un cliente OAuth de Android para cada certificado que firme los builds que pruebes:

  • Debug: desde ./gradlew signingReport para la variante de debug.
  • Release: desde el APK o AAB que instales realmente.
  • Play App Signing: desde Play Console > App integrity > App signing key certificate. Esto es necesario para builds de la Play Store, incluso si tu SHA-1 de la upload key ya está registrado.

El applicationId en android/app/build.gradle debe coincidir exactamente con el package name del cliente OAuth de Android, incluyendo cualquier .debug sufijo.

Si la pantalla de consentimiento de OAuth está en modo Testing, añade cada cuenta de Google con la que pruebes en Audience > Test users. No es necesario publicar la app en Production para email y profile scopes. Digital Asset Links ("assetlinks.json) no son necesarios para Sign in with Google mediante Credential Manager.

Los cambios en Google Cloud pueden tardar unas horas en propagarse.

Error 28444: La consola de desarrollador no está configurada correctamente

Sección titulada “Error 28444: La consola de desarrollador no está configurada correctamente”

Esto casi siempre significa que Google rechazó la combinación del certificado de firma del APK instalado, el nombre del paquete y webClientId. Sigue esta lista de verificación:

  1. Confirmar webClientId es el client ID de la aplicación web y termina con .apps.googleusercontent.com.
  2. Ejecuta la app, reproduce el error y revisa Logcat para GoogleProvider, signingSha1=, y package=.
  3. En Google Cloud Console > Credenciales, abre tu cliente OAuth de Android y verifica el package name y el SHA-1 exactos.
  4. Si pruebas un release build, registra el SHA-1 de esa build, no solo el del debug keystore.
  5. Si la app se distribuye por Play Store, registra también el SHA-1 de Play App Signing.
  6. Asegúrate de que los clientes de Web y Android estén en el mismo proyecto de Google Cloud.
  7. Si la pantalla de consentimiento está en Testing, confirma que la cuenta de Google sea un test user.
  8. Wait and retry after console changes.

USER_CANCELLED tras elegir una cuenta en un debug build mal configurado, puede seguir habiendo un error de SHA-1 o client ID. Primero corrige la configuración de la consola.

Builds de debug o locales:

Ventana de terminal
cd android && ./gradlew signingReport

APK de release firmada:

Ventana de terminal
keytool -printcert -jarfile android/app/release/app-release.apk

Añade ese SHA-1 a un cliente OAuth de Android con el package name correspondiente, reinstala la misma APK firmada y vuelve a probar:

Ventana de terminal
adb install android/app/release/app-release.apk

Los tokens están anidados bajo result:

const login = await SocialLogin.login({ provider: 'google' });
const idToken = login.result?.idToken;

Para Firebase Auth, crea las credenciales con eso idToken y usa el Web client ID como webClientId en initialize.

Si no puedes obtener el certificado SHA-1 de desarrollo, intenta con un keystore personalizado. Este comentario en el issue explica cómo añadir un keystore a tu proyecto.

Si estás usando Google Login en Android para planificar los flujos de autenticación y de cuenta, conéctalo con Uso de @capgo/capacitor-social-login para la capacidad nativa en el uso de @capgo/capacitor-social-login, @capgo/capacitor-social-login para los detalles de implementación en @capgo/capacitor-social-login, @capgo/capacitor-passkey para el detalle de implementación en @capgo/capacitor-passkey, @capgo/capacitor-native-biometric para el detalle de implementación en @capgo/capacitor-native-biometric, y Autenticación de dos factores para el detalle de implementación en la autenticación de dos factores.