Información sobre la entrega de mensajes

FCM ofrece herramientas para ayudarte a obtener información sobre la entrega de mensajes. Además de los informes sobre la entrega y el análisis de embudo de Notifications incorporados en Firebase console, FCM permite la exportación integral de datos a Google BigQuery.

Informes sobre la entrega de mensajes

Puedes evaluar si los mensajes que envías llegan a los usuarios. En la pestaña Informes de Firebase console, puedes ver los siguientes datos que corresponden a los mensajes enviados a un SDK de FCM, incluidos los que se enviaron mediante el Compositor de Notifications y las API de FCM:

  • Enviados: El mensaje de datos o de notificación se puso en cola para la entrega o se transmitió correctamente a un servicio de terceros, como los APN. Consulta duración de un mensaje para obtener más información.
  • Impresiones (disponible solo para los mensajes de notificación en dispositivos Android): La notificación apareció en la pantalla del dispositivo.
  • Abiertos: El usuario abrió el mensaje de notificación.

Puedes definir un período para los datos que se muestran y tienes la opción de exportarlos en formato CSV.

Análisis de embudo de Notifications

Un análisis de embudo de Notifications integrado permite ver cómo responden los usuarios a notificaciones específicas que se envían desde Firebase console, con datos sobre lo siguiente:

  • Notificaciones enviadas: El mensaje se puso en cola para la entrega o se transmitió correctamente a un servicio de terceros, como los APN.
  • Notificaciones abiertas: la cantidad de notificaciones que se abrieron.
  • La cantidad de usuarios únicos que activaron un evento de conversión (si se definió alguno).

Para ver el análisis de embudo de Notifications, sigue estos pasos:

  1. En el Compositor de Notifications, selecciona la pestaña Notifications.
  2. En la lista de mensajes, haz clic en un mensaje finalizado o en curso. Se mostrará una vista expandida que incluye un análisis de embudo.

Los informes de Analytics se actualizan periódicamente. Sin embargo, puede haber un retraso entre el momento en el que el usuario abre la notificación y en el que los datos del evento están disponibles en la consola.

Además de estos informes en la pestaña Notifications, también puedes crear embudos personalizados en Analytics para ver el porcentaje de respuesta de una secuencia de pasos en tu app.

Exportación de datos de BigQuery

Puedes exportar tus datos de mensajes a BigQuery para analizarlos en detalle. Esta herramienta te permite analizar los datos con BigQuery SQL, exportarlos a otro proveedor de servicios en la nube o usarlos en tus modelos de AA personalizados. Consulta Cómo vincular Firebase a BigQuery para obtener más información.

  1. Para comenzar, usa una de estas opciones:

    • Abre el Compositor de Notifications y selecciona Vincular con BigQuery al final de la página.

    • En la página Integraciones de Firebase console, haz clic en Vincular en la tarjeta BigQuery.

      En esta página, verás las opciones de exportación de FCM para todas las apps del proyecto que tengan FCM habilitado.

  2. Sigue las instrucciones que aparecen en la pantalla para habilitar BigQuery.

Cuando vinculas el proyecto a BigQuery, ocurre lo siguiente:

Para inhabilitar la exportación a BigQuery, desvincula el proyecto en Firebase console.

¿Qué datos se exportan a BigQuery?

Este es el esquema de la tabla exportada:

_PARTITIONTIME MARCA DE TIEMPO Esta pseudocolumna contiene una marca de tiempo del inicio del día (en UTC) en el que se cargaron los datos. Para la partición AAAAMMDD, contiene el valor TIMESTAMP('AAAA-MM-DD').
event_timestamp MARCA DE TIEMPO La marca de tiempo del evento que registró el servidor.
project_number NÚMERO ENTERO El número de proyecto permite identificar qué proyecto envió el mensaje.
message_id STRING El ID del mensaje permite identificar un único mensaje.
instance_id STRING El ID de la instancia de la app a la que se envía el mensaje (si está disponible).
message_type STRING El tipo de mensaje. Puede ser un mensaje de notificación o uno de datos. Se usa el tema para identificar el mensaje original de un tema o una campaña enviados. Los mensajes posteriores son de notificación o de datos.
sdk_platform STRING La plataforma de la app receptora.
app_name STRING El nombre del paquete de las apps para Android o el ID de paquete de las apps para iOS.
collapse_key STRING La clave de contracción permite identificar un grupo de mensajes que puede contraerse. Si un dispositivo no está conectado, solamente el último mensaje que tenga una clave de contracción se pondrá en cola para entregarlo en el futuro.
priority NÚMERO ENTERO La prioridad del mensaje. Los valores válidos son “normal” y “alta”. En iOS, estos corresponden a las prioridades de APN 5 y 10.
ttl NÚMERO ENTERO Este parámetro especifica el tiempo (en segundos) que el mensaje se debe conservar en el almacenamiento de FCM si el dispositivo se encuentra sin conexión.
tema STRING El nombre del tema al que se envió un mensaje (si corresponde).
bulk_id NÚMERO ENTERO El ID masivo permite identificar un grupo de mensajes relacionados, como un envío particular a un tema.
device_recently_active BOOLEANO Este parámetro es verdadero si el dispositivo se conectó recientemente.
evento STRING El tipo de evento. Los valores posibles son los siguientes:
  • MESSAGE_ACCEPTED: el servidor de FCM recibió el mensaje y la solicitud es válida.
  • MESSAGE_DELIVERED: el mensaje se envió al dispositivo.
  • MESSAGE_DELIVERED_ON_RECONNECT: el mensaje se envió al dispositivo cuando este volvió a conectarse.
  • MISSING_REGISTRATIONS: se rechazó la solicitud debido a que faltaba un registro.
  • MESSAGE_EXPIRED: el mensaje caducó antes de que se conectara el dispositivo y no se pudo entregar.
  • MESSAGE_DELAYED_DOZE: la entrega del mensaje se retrasó porque el dispositivo se encuentra en modo de descanso.
  • UNAUTHORIZED_REGISTRATION: se rechazó el mensaje porque el remitente no tiene permiso para hacer envíos al registro.
  • MESSAGE_COLLAPSED: antes de poder entregar el mensaje, se lo reemplazó por uno más nuevo con la misma clave de contracción.
  • MESSAGE_RECEIVED_INTERNAL_ERROR: hubo un problema no especificado cuando se procesó la solicitud del mensaje.
  • MESSAGE_DELAYED_THROTTLED: se retrasó la entrega del mensaje al dispositivo debido a la regulación de la clave de contracción.
  • MISMATCH_SENDER_ID: se rechazó la solicitud para enviar un mensaje porque no coincidían el ID del remitente y el ID declarado en el punto de destino.
  • QUOTA_EXCEEDED: se rechazó la solicitud para enviar un mensaje porque la cuota era insuficiente.
  • INVALID_REGISTRATION: se rechazó la solicitud para enviar un mensaje porque el registro no era válido.
  • INVALID_PACKAGE_NAME: se rechazó la solicitud para enviar un mensaje porque el nombre del paquete no era válido.
  • INVALID_APNS_CREDENTIAL: se rechazó la solicitud para enviar un mensaje porque el certificado APNS no era válido.
  • INVALID_PARAMETERS: se rechazó la solicitud para enviar un mensaje porque los parámetros no eran válidos.
  • PAYLOAD_TOO_LARGE: se rechazó la solicitud para enviar un mensaje porque la carga útil excedía el límite.
  • DEVICE_NOT_FOUND: se rechazó la solicitud para enviar un mensaje porque no se encontró el dispositivo en nuestra base de datos.
  • AUTHENTICATION_ERROR: se rechazó la solicitud para enviar un mensaje porque hubo un problema de autenticación (compruebe la clave de API que se usó para enviar el mensaje).
  • INVALID_TTL: se rechazó la solicitud para enviar un mensaje porque el TTL no era válido.

¿Qué puedes hacer con los datos exportados?

Contar los mensajes que envió la app

SELECT app_name, COUNT(1)
FROM [<project name>:firebase_messaging.data]
WHERE
  _PARTITIONTIME = TIMESTAMP('<date as YYYY-MM-DD>')
  AND event = 'MESSAGE_ACCEPTED'
  AND message_id != ''
GROUP BY 1;

Contar las instancias de app únicas a las que se orientaron los mensajes

SELECT COUNT(DISTINCT instance_id)
FROM [<project name>:firebase_messaging.data]
WHERE
  _PARTITIONTIME = TIMESTAMP('<date as YYYY-MM-DD>')
  AND event = 'MESSAGE_ACCEPTED';

Contar los mensajes de notificación enviados

SELECT COUNT(1)
FROM [<project name>:firebase_messaging.data]
WHERE
  _PARTITIONTIME = TIMESTAMP('<date as YYYY-MM-DD>')
  AND event = 'MESSAGE_ACCEPTED'
  AND message_type = 'DISPLAY_NOTIFICATION';

Contar los mensajes de datos enviados

SELECT COUNT(1)
FROM [<project name>:firebase_messaging.data]
WHERE
  _PARTITIONTIME = TIMESTAMP('<date as YYYY-MM-DD>')
  AND event = 'MESSAGE_ACCEPTED'
  AND message_type = 'DATA_MESSAGE';

Contar los mensajes enviados a un tema o una campaña desde la consola Notifications

SELECT COUNT(1)
FROM [<project name>:firebase_messaging.data]
WHERE
  _PARTITIONTIME = TIMESTAMP('<date as YYYY-MM-DD>')
  AND event = 'MESSAGE_ACCEPTED'
  AND bulk_id = <your bulk id> AND message_id != '';

Calcular la duración de la distribución de un tema o una campaña específicos

El tiempo de inicio de la distribución corresponde al momento en que se recibe la solicitud original, y el tiempo de finalización es el momento en que se crea el último mensaje individual dirigido a una sola instancia.

SELECT
  TIMESTAMP_DIFF(
    end_timestamp, start_timestamp, MILLISECOND
  ) AS fanout_duration_ms,
  end_timestamp,
  start_timestamp
FROM (
    SELECT MAX(event_timestamp) AS end_timestamp
    FROM [<project name>:firebase_messaging.data]
    WHERE
      _PARTITIONTIME = TIMESTAMP('<date as YYYY-MM-DD>')
      AND event = 'MESSAGE_ACCEPTED'
      AND bulk_id = <your bulk id>
  ) sent
  CROSS JOIN (
    SELECT event_timestamp AS start_timestamp
    FROM [<project name>:firebase_messaging.data]
    WHERE
      _PARTITIONTIME = TIMESTAMP('<date as YYYY-MM-DD>')
      AND event = 'MESSAGE_ACCEPTED'
      AND bulk_id = <your bulk id>
      AND message_type = 'TOPIC'
  ) initial_message;

Contar el porcentaje de mensajes entregados

SELECT
  messages_sent,
  messages_delivered,
  messages_delivered / messages_sent * 100 AS percent_delivered
FROM (
    SELECT COUNT(DISTINCT CONCAT(message_id, instance_id)) AS messages_sent
    FROM [<project name>:firebase_messaging.data]
    WHERE
      _PARTITIONTIME = TIMESTAMP('<date as YYYY-MM-DD>')
      AND event = 'MESSAGE_ACCEPTED'
  ) sent
  CROSS JOIN (
    SELECT COUNT(DISTINCT CONCAT(message_id, instance_id)) AS messages_delivered
    FROM [<project name>:firebase_messaging.data]
    WHERE
      _PARTITIONTIME = TIMESTAMP('<date as YYYY-MM-DD>')
      AND (event = 'MESSAGE_DELIVERED' OR event = 'MESSAGE_DELIVERED_ON_RECONNECT')
      AND message_id
      IN (
        SELECT message_id FROM [<project name>:firebase_messaging.data]
        WHERE
          _PARTITIONTIME = TIMESTAMP('<date as YYYY-MM-DD>')
          AND event = 'MESSAGE_ACCEPTED'
        GROUP BY 1
      )
  ) delivered;

Hacer un seguimiento de todos los eventos de un ID de mensaje y un ID de instancia específicos

SELECT *
FROM [<project name>:firebase_messaging.data]
WHERE
    _PARTITIONTIME = TIMESTAMP('<date as YYYY-MM-DD>')
    AND message_id = '<your message id>'
    AND instance_id = '<your instance id>'
ORDER BY event_timestamp;

Calcula la latencia de un ID de mensaje y un ID de instancia específicos

SELECT
  TIMESTAMP_DIFF(
    MAX(delivered_time), MIN(accepted_time), MILLISECOND
  ) AS latency_ms
FROM (
    SELECT event_timestamp AS accepted_time
    FROM [<project name>:firebase_messaging.data]
    WHERE
      _PARTITIONTIME = TIMESTAMP('<date as YYYY-MM-DD>')
      AND message_id = '<your message id>'
      AND instance_id = '<your instance id>'
      AND event = 'MESSAGE_ACCEPTED'
  ) sent
  CROSS JOIN (
    SELECT event_timestamp AS delivered_time
    FROM [<project name>:firebase_messaging.data]
    WHERE
      _PARTITIONTIME = TIMESTAMP('<date as YYYY-MM-DD>') AND
      message_id = '<your message id>' AND instance_id = '<your instance id>'
      AND (event = 'MESSAGE_DELIVERED' OR event = 'MESSAGE_DELIVERED_ON_RECONNECT')
  ) delivered;

Enviar comentarios sobre…

¿Necesitas ayuda? Visita nuestra página de asistencia.