Envía un mensaje de prueba a una app en segundo plano

Para comenzar a usar FCM, crea el caso de uso más sencillo: enviar un mensaje de notificación de prueba desde el Compositor de Notifications a un dispositivo de desarrollo cuando la app se encuentra en segundo plano. En esta página, se indican todos los pasos necesarios para lograrlo, desde la configuración hasta la verificación. Es posible que hayas realizado algunos de los pasos si configuraste una app cliente en Android para FCM.

Configura el SDK

Es posible que hayas completado tareas que aparecen en esta sección si ya habilitaste otras funciones de Firebase para tu app.

Antes de comenzar

  • Instala Android Studio o actualízalo a su versión más reciente.

  • Asegúrate de que tu proyecto cumpla con estos requisitos (ten en cuenta que algunos productos pueden tener requisitos más estrictos):

    • Se segmenta al nivel de API 21 (Lollipop) o una versión posterior.
    • Usa Android 5.0 o una versión posterior.
    • Utiliza Jetpack (AndroidX), que incluye el cumplimiento de los siguientes requisitos de versión:
      • com.android.tools.build:gradle v7.3.0 o una versión posterior
      • compileSdkVersion 28 o una versión posterior
  • Configura un dispositivo físico o usa un emulador para ejecutar tu app.
    Ten en cuenta que los SDKs de Firebase con una dependencia en Servicios de Google Play requieren que el dispositivo o el emulador tenga instalados los Servicios de Google Play.

  • Accede a Firebase con tu Cuenta de Google.

Si solo quieres probar un producto de Firebase, pero aún no tienes un proyecto de Android, puedes descargar una de estas muestras de inicio rápido.

Crea un proyecto de Firebase

Antes de poder agregar Firebase a tu app para Android, debes crear un proyecto de Firebase y conectarlo a la app. Visita Información sobre los proyectos de Firebase para obtener más detalles sobre este tema.

Registra tu app en Firebase

Si quieres usar Firebase en tu app para Android, debes registrar la app con el proyecto de Firebase. El registro de tu app a menudo se conoce como “agregar” la app a tu proyecto.

  1. Ve a Firebase console.

  2. En el centro de la página de descripción general del proyecto, haz clic en el ícono de Android () o en Agregar app para iniciar el flujo de trabajo de configuración.

  3. Ingresa el nombre del paquete de tu app en el campo Nombre del paquete de Android.

  4. Ingresa otra información de la app, como el sobrenombre y el certificado de firma SHA-1 de depuración (opcional).

  5. Haz clic en Registrar app.

Agrega un archivo de configuración de Firebase

  1. Descarga y, luego, agrega el archivo de configuración de Firebase para Android (google-services.json) a la app:

    1. Haz clic en Descargar google-services.json a fin de obtener el archivo de configuración de Firebase para Android.

    2. Transfiere tu archivo de configuración al directorio raíz del módulo (nivel de app) de tu app.

  2. Para que los SDKs de Firebase puedan acceder a los valores de tu archivo de configuración google-services.json, necesitas el complemento de los servicios de Google para Gradle (google-services).

    1. Agrega el complemento de Google Services como dependencia en el archivo de Gradle (<project>/build.gradle.kts o <project>/build.gradle) a nivel de raíz (a nivel de proyecto):

      Kotlin

      plugins {
        id("com.android.application") version "7.3.0" apply false
        // ...
      
        // Add the dependency for the Google services Gradle plugin
        id("com.google.gms.google-services") version "4.4.2" apply false
      }

      Groovy

      plugins {
        id 'com.android.application' version '7.3.0' apply false
        // ...
      
        // Add the dependency for the Google services Gradle plugin
        id 'com.google.gms.google-services' version '4.4.2' apply false
      }
    2. Agrega el complemento de los servicios de Google en el archivo de Gradle (generalmente <project>/<app-module>/build.gradle.kts o <project>/<app-module>/build.gradle) del módulo (nivel de app):

      Kotlin

      plugins {
        id("com.android.application")
      
        // Add the Google services Gradle plugin
        id("com.google.gms.google-services")
        // ...
      }

      Groovy

      plugins {
        id 'com.android.application'
      
        // Add the Google services Gradle plugin
        id 'com.google.gms.google-services'
        // ...
      }

Agrega los SDK de Firebase a tu app

  1. En el archivo Gradle del módulo (nivel de la app) (generalmente <project>/<app-module>/build.gradle.kts o <project>/<app-module>/build.gradle), agrega la dependencia de la biblioteca de Firebase Cloud Messaging para Android. Te recomendamos usar la Firebase Android BoM para controlar las versiones de las bibliotecas.

    Para obtener una experiencia óptima con Firebase Cloud Messaging, te recomendamos habilitar la Google Analytics en tu proyecto de Firebase y agregar el SDK de Firebase para Google Analytics a tu app.

    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:33.7.0"))
    
        // Add the dependencies for the Firebase Cloud Messaging and Analytics libraries
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation("com.google.firebase:firebase-messaging")
        implementation("com.google.firebase:firebase-analytics")
    }

    Cuando usas la Firebase Android BoM, tu app siempre usará versiones compatibles de las bibliotecas de Firebase para Android.

    (Alternativa)  Agrega dependencias de la biblioteca de Firebase sin usar la BoM

    Si eliges no usar la Firebase BoM, debes especificar cada versión de la biblioteca de Firebase en su línea de dependencia.

    Ten en cuenta que, si usas múltiples bibliotecas de Firebase en tu app, es muy recomendable que uses la BoM para administrar las versiones de las bibliotecas para garantizar que todas las versiones sean compatibles.

    dependencies {
        // Add the dependencies for the Firebase Cloud Messaging and Analytics libraries
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation("com.google.firebase:firebase-messaging:24.1.0")
        implementation("com.google.firebase:firebase-analytics:22.1.2")
    }
    ¿Buscas un módulo de biblioteca específico de Kotlin? A partir de octubre de 2023 (Firebase BoM 32.5.0), tanto los desarrolladores de Kotlin como los de Java pueden depender del módulo de la biblioteca principal (para obtener más información, consulta las Preguntas frecuentes sobre esta iniciativa).

  2. Sincroniza tu proyecto de Android con archivos Gradle.

Accede al token de registro

Para enviar mensajes a un dispositivo específico, es necesario conocer el token de registro del dispositivo. Dado que tienes que ingresar el token en un campo de la consola de Notifications para completar este instructivo, asegúrate de copiar el token o de almacenarlo en forma segura después de recuperarlo.

Cuando se inicia tu app por primera vez, el SDK de FCM genera un token de registro para la instancia de la app cliente. Si el objetivo son dispositivos individuales o la creación de grupos de dispositivos, es necesario extender FirebaseMessagingService y anular onNewToken para acceder a este token.

En esta sección, se describe cómo recuperar el token y cómo supervisar los cambios que lo afectan. Debido a que el token se puede rotar después del primer inicio, te recomendamos enfáticamente que recuperes el token de registro con la actualización más reciente.

El token de registro puede cambiar en las siguientes situaciones:

  • La app se restablece en un dispositivo nuevo.
  • El usuario desinstala y vuelve a instalar la app.
  • El usuario borra los datos de la app.

Recupera el token de registro actual

Para recuperar el token actual, llama a FirebaseMessaging.getInstance().getToken().

Kotlin

FirebaseMessaging.getInstance().token.addOnCompleteListener(OnCompleteListener { task ->
    if (!task.isSuccessful) {
        Log.w(TAG, "Fetching FCM registration token failed", task.exception)
        return@OnCompleteListener
    }

    // Get new FCM registration token
    val token = task.result

    // Log and toast
    val msg = getString(R.string.msg_token_fmt, token)
    Log.d(TAG, msg)
    Toast.makeText(baseContext, msg, Toast.LENGTH_SHORT).show()
})

Java

FirebaseMessaging.getInstance().getToken()
    .addOnCompleteListener(new OnCompleteListener<String>() {
        @Override
        public void onComplete(@NonNull Task<String> task) {
          if (!task.isSuccessful()) {
            Log.w(TAG, "Fetching FCM registration token failed", task.getException());
            return;
          }

          // Get new FCM registration token
          String token = task.getResult();

          // Log and toast
          String msg = getString(R.string.msg_token_fmt, token);
          Log.d(TAG, msg);
          Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
        }
    });

Supervisa la generación de tokens

La devolución de llamada de onNewToken se activa cuando se genera un token nuevo.

Kotlin

/**
 * Called if the FCM registration token is updated. This may occur if the security of
 * the previous token had been compromised. Note that this is called when the
 * FCM registration token is initially generated so this is where you would retrieve the token.
 */
override fun onNewToken(token: String) {
    Log.d(TAG, "Refreshed token: $token")

    // If you want to send messages to this application instance or
    // manage this apps subscriptions on the server side, send the
    // FCM registration token to your app server.
    sendRegistrationToServer(token)
}

Java

/**
 * There are two scenarios when onNewToken is called:
 * 1) When a new token is generated on initial app startup
 * 2) Whenever an existing token is changed
 * Under #2, there are three scenarios when the existing token is changed:
 * A) App is restored to a new device
 * B) User uninstalls/reinstalls the app
 * C) User clears app data
 */
@Override
public void onNewToken(@NonNull String token) {
    Log.d(TAG, "Refreshed token: " + token);

    // If you want to send messages to this application instance or
    // manage this apps subscriptions on the server side, send the
    // FCM registration token to your app server.
    sendRegistrationToServer(token);
}

Después de obtener el token, puedes enviarlo a tu servidor de apps y almacenarlo con tu método preferido.

Envía un mensaje de notificación de prueba

  1. Instala y ejecuta la app en el dispositivo de destino. En los dispositivos Apple, tendrás que aceptar la solicitud de permiso para recibir notificaciones remotas.

  2. Asegúrate de que la app se encuentre en segundo plano en el dispositivo.

  3. En Firebase console, abre la página Mensajería.

  4. Si este es tu primer mensaje, selecciona Crear la primera campaña.

    1. Selecciona Mensajes de Firebase Notifications y, luego, Crear.
  5. De lo contrario, en la pestaña Campañas, selecciona Campaña nueva y, luego, Notificaciones.

  6. Ingresa el texto del mensaje. Todos los demás campos son opcionales.

  7. Selecciona Enviar mensaje de prueba en el panel derecho.

  8. En el campo Agregar un token de registro de FCM, ingresa el token de registro que obtuviste en una sección anterior de esta guía.

  9. Selecciona Probar.

Después de seleccionar Probar, los dispositivos cliente de destino que tienen la app en segundo plano recibirán la notificación.

Para obtener información sobre la entrega de mensajes en tu app, consulta el panel de informes de FCM, en el que se registra la cantidad de mensajes que se enviaron y abrieron en dispositivos Apple y Android, junto con datos de "impresiones" (las notificaciones que ven los usuarios) de las apps para Android.

Próximos pasos

Envía mensajes a apps en primer plano

Una vez que envíes mensajes de notificación de manera correcta mientras la app está en segundo plano, consulta Recibe mensajes en una app para Android para comenzar a enviar mensajes a apps en primer plano.

Más allá de las notificaciones

Para dejar atrás las notificaciones y agregar otros comportamientos más avanzados a la app, consulta lo siguiente: