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

Para comenzar a usar FCM, compila el caso práctico 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 ya hayas realizado algunos de los pasos si configuraste una app cliente en Android para FCM anteriormente.

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:

    • Se orienta al nivel de API 16 (Jelly Bean) o una versión posterior.
    • Usa Gradle 4.1 o una versión posterior.
    • Utiliza Jetpack (AndroidX), que incluye el cumplimiento de los siguientes requisitos de versión:
      • com.android.tools.build:gradle 3.2.1 o una versión posterior
      • compileSdkVersion 28 o una versión posterior
  • Configura un dispositivo físico o utiliza un emulador para ejecutar tu app.
    Los emuladores deben usar una imagen que cuente con 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 archivo de configuración.

Registra tu app en Firebase

Cuando tengas un proyecto de Firebase, podrás agregarle tu app para Android.

Consulta la Información sobre los proyectos de Firebase a fin de obtener detalles sobre prácticas recomendadas y consideraciones que debes tener para agregar apps a un proyecto de Firebase, entre ellas cómo manejar diversas variantes de compilación.

  1. Dirígete a Firebase console.

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

    Si ya agregaste una app a tu proyecto de Firebase, haz clic en Agregar app para que se muestren las opciones de la plataforma.

  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. Agrega el archivo de configuración de Firebase para Android a la app, como se indica a continuación:

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

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

  2. Agrega el complemento de google-services a tus archivos Gradle a fin de habilitar los productos de Firebase en tu app.

    1. Agrega reglas para incluir el complemento de servicios de Google al archivo Gradle (build.gradle) de nivel de raíz (a nivel de proyecto). Además, revisa que tengas el repositorio Maven de Google.

      buildscript {
      
        repositories {
          // Check that you have the following line (if not, add it):
          google()  // Google's Maven repository
        }
      
        dependencies {
          // ...
      
          // Add the following line:
          classpath 'com.google.gms:google-services:4.3.3'  // Google Services plugin
        }
      }
      
      allprojects {
        // ...
      
        repositories {
          // Check that you have the following line (if not, add it):
          google()  // Google's Maven repository
          // ...
        }
      }
      
    2. En el archivo Gradle (generalmente app/build.gradle) de tu módulo (a nivel de app), aplica el complemento Gradle de los servicios de Google:

      apply plugin: 'com.android.application'
      // Add the following line:
      apply plugin: 'com.google.gms.google-services'  // Google Services plugin
      
      android {
        // ...
      }
      

Agrega los SDK de Firebase a tu app

  1. En el archivo Gradle (generalmente app/build.gradle) de tu módulo (a nivel de app), agrega las dependencias de los productos Firebase que quieres usar en la app.

    Puedes agregar cualquiera de los productos de Firebase admitidos a tu app para Android.

    Para obtener una experiencia óptima con Firebase Cloud Messaging, te recomendamos que habilites Google Analytics en el proyecto. Además, debes agregar el SDK de Firebase para Analytics a la app cuando configures Analytics.

    Si Analytics está habilitado

    dependencies {
      // ...
    // Add the Firebase SDK for Google Analytics implementation 'com.google.firebase:firebase-analytics:17.4.3'
    // Add the SDK for Firebase Cloud Messaging implementation 'com.google.firebase:firebase-messaging:20.2.0'
    // Getting a "Could not find" error? Make sure that you've added // Google's Maven repository to your root-level build.gradle file }

    Si Analytics está inhabilitado

    dependencies {
      // ...
    // Add the SDK for Firebase Cloud Messaging implementation 'com.google.firebase:firebase-messaging:20.2.0'
    // Getting a "Could not find" error? Make sure that you've added // Google's Maven repository to your root-level build.gradle file }
  2. Sincroniza tu app para garantizar que todas las dependencias tengan las versiones necesarias.

  3. Si agregaste Analytics, ejecuta tu app para enviar la verificación a Firebase de que lo integraste correctamente. De lo contrario, puedes omitir el paso de verificación.

    En los registros de tu dispositivo, se mostrará la verificación de Firebase cuando se complete la inicialización. Si ejecutas tu app en un emulador que tiene acceso a redes, Firebase console notificará que se completó la conexión de tu app.

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 borra un ID de instancia.
  • 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 FirebaseInstanceId.getInstance().getInstanceId().

Java

FirebaseInstanceId.getInstance().getInstanceId()
        .addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
            @Override
            public void onComplete(@NonNull Task<InstanceIdResult> task) {
                if (!task.isSuccessful()) {
                    Log.w(TAG, "getInstanceId failed", task.getException());
                    return;
                }

                // Get new Instance ID token
                String token = task.getResult().getToken();

                // 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();
            }
        });

Kotlin+KTX

FirebaseInstanceId.getInstance().instanceId
        .addOnCompleteListener(OnCompleteListener { task ->
            if (!task.isSuccessful) {
                Log.w(TAG, "getInstanceId failed", task.exception)
                return@OnCompleteListener
            }

            // Get new Instance ID token
            val token = task.result?.token

            // Log and toast
            val msg = getString(R.string.msg_token_fmt, token)
            Log.d(TAG, msg)
            Toast.makeText(baseContext, 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.

Java

/**
 * Called if InstanceID token is updated. This may occur if the security of
 * the previous token had been compromised. Note that this is called when the InstanceID token
 * is initially generated so this is where you would retrieve the token.
 */
@Override
public void onNewToken(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
    // Instance ID token to your app server.
    sendRegistrationToServer(token);
}

Kotlin+KTX

/**
 * Called if InstanceID token is updated. This may occur if the security of
 * the previous token had been compromised. Note that this is called when the InstanceID 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
    // Instance ID 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. Consulta la referencia de la API de Instance ID para ver los detalles completos sobre la API.

Envía un mensaje de notificación de prueba

  1. Instala y ejecuta la app en el dispositivo de destino.

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

  3. Abre el Compositor de Notifications y selecciona Notificación nueva.

  4. Ingresa el texto del mensaje.

  5. Selecciona Enviar mensaje de prueba.

  6. 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.

  7. Haz clic en Probar.

Cuando hagas clic en Probar, el dispositivo cliente de destino (que tiene la app en segundo plano) debería recibir la notificación en la bandeja de notificaciones del sistema.

Para obtener estadísticas de la entrega de mensajes a tu app, consulta el panel de informes de FCM que registra la cantidad de mensajes enviados y abiertos en dispositivos iOS y Android, junto con datos de “impresiones” (notificaciones vistas por los usuarios) de apps para Android.

Pasos siguientes

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 y comienza a enviar mensajes a apps en primer plano.

Más allá de las notificaciones

Para ir más allá de las notificaciones y agregar otros comportamientos más avanzados a la app, consulta lo siguiente: