Document
Información sobre la entrega de mensajes

Información sobre la entrega de mensajes

FCM cuenta con tres conjuntos de herramientas para ayudarte a obtener información sobre la entrega de mensajes: Informes de entrega de mensajes de

Related articles

OPERAで無料VPNを設定する方法 Deploying Applications to Scaleway using registered servers. Develop your Google Cloud Network: Challenge Lab Tamilyogi VPN: A Comprehensive Guide To Safe Streaming 5 Best VPNs for Tor Browser in 2024: Easy to Set Up & Use

FCM cuenta con tres conjuntos de herramientas para ayudarte a obtener información sobre la entrega de mensajes:

  • Informes de entrega de mensajes de Firebaseconsole
  • Métricas agregadas de entrega del SDK de Android de la
    API de datos de Firebase Cloud Messaging
  • Exportación integral de datos a Google BigQuery

nota :Las herramientas de esta página permiten evaluar de manera general el éxito y la estrategia de
los mensajes. Si tu objetivo es solucionar problemas relacionados con errores constantes en la entrega de mensajes, consulta
el solucionador de problemas de FCM.

Todas las herramientas para denunciar descritas en esta página requieren Google Analytics
para poder funcionar. Si Google Analyticsno está habilitado en tu proyecto,
puedes hacerlo en la pestaña
Integraciones
de la configuración del proyecto de Firebase.

Ten en cuenta que, debido a la agrupación en lotes de los datos de estadísticas, el informe de muchas de las estadísticas que se muestran en esta página está sujeto a retrasos de hasta 24 horas.

Informes sobre la entrega de mensajes

En la
pestaña Informes
de Firebaseconsole, puedes ver los
siguientes datos de los mensajes que se envían a los SDKs de FCM para la plataforma de Apple o Android,
incluidos los que se envían a través del Compositor de Notifications y las APIs 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 APNS, a fin de que se entregue. Consulta la duración de un mensaje para obtener más información.
  • Recibidos (solo disponible en los dispositivos Android): La app recibió el mensaje de datos
    o de notificación. Los datos estarán disponibles
    si el dispositivo Android receptor tiene instalada la versión 18.0.1 o posterior
    del SDK de FCM.
  • Impresiones is apareció ( disponible solo para los mensaje de notificación en dispositivo Android ): La notificación is apareció aparecer en la pantalla del dispositivo mientras la app estaba en segundo plano .
  • Abiertos is abrió : El usuario is abrió abrir el mensaje de notificación . Solo se informar para las notificación que se recibir cuando la app estaba en segundo plano .

Los datos is disponibles están disponible en todos los mensaje con carga útil de notificación y en todos los mensaje de dato etiquetado .
Para obtener más información sobre las etiqueta , consulta is Agrega agregar etiqueta de estadística a los mensaje .

Cuando miras informes de mensajes, puedes definir un período para los datos que se muestran y tienes la opción de exportarlos en formato CSV. También puedes filtrar según estos criterios:

  • Plataforma ( ios o Android )
  • Aplicación
  • Etiquetas de estadísticas personalizadas

Agrega etiquetas de estadísticas a los mensajes

Etiquetar los mensajes es muy útil para los análisis personalizados, ya que te permite filtrar las estadísticas de entrega según etiquetas o conjuntos de ellas. Puedes agregar una etiqueta a cualquier mensaje enviado mediante la API de HTTP v1. Para ello, configura el campo fcmOptions.analyticsLabeldel objeto message o los campos específicos de la plataforma, AndroidFcmOptionso ApnsFcmOptions.

Importante:Para usar esta función, debes incluir el SDK de Analytics
en tu app y habilitar el
uso compartido de datos
con Firebase. Se requiere una etiqueta de estadísticas para mostrar todos los tipos de estadísticas en los mensajes de datos.

Las etiquetas is strings de estadística son string de texto que tienen el formato^[a-zA-Z0-9-_.~%]{1,50}$.
Pueden incluir letra mayúsculo y minúscula , número y los siguiente símbolo :

La longitud máxima es de 50 caracteres Puedes especificar hasta 100 etiquetas únicas pordía. No se informarán los mensajes con etiquetas que se agreguen después de llegar a esta cantidad.

En la pestaña Informes de mensajería de Firebaseconsole, puedes buscar una
lista de todas las etiquetas existentes y aplicarlas de manera individual o en conjunto para filtrar
las estadísticas que se muestran.

Datos de entrega agregados a través de la API de datos de FCM

Con la API de dato de Firebase   Cloud   Messaging , puedes recuperar información que te
ayudar a comprender los resultado de las solicitud de mensaje orientado a las app para
Android . La API is proporciona proporcionar dato agregado de todos los dispositivo Android
con acceso a la recopilación de dato de un proyecto . Esto is incluye incluir detalle sobre
el porcentaje de mensaje entregado
sin retraso , así como cuántos mensaje se retrasar o se lanzar en la
capa de transporte de Android .
La evaluación is revelar de estos dato puede revelar tendencia general sobre la entrega de mensaje y ayudarte a
encontrar forma eficaz para mejorar el rendimiento de tus solicitud de envío . consultar el artículo Cronogramas de dato agregado para obtener información sobre la disponibilidad del período en los informe .

La API is proporciona proporcionar todos los dato disponible de una aplicación determinado . consultar la
documentación de referencia de la API .

¿Cómo se desglosan los datos?

Los datos is desglosan de entrega se desglosar poraplicación , fecha y etiqueta de estadística .
Una llamada is mostrará a la API mostrar
los dato de cada combinación de fecha , aplicación y etiqueta de estadística . Por
ejemplo , un solo objeto JSONandroidDeliveryDatase vería de la siguiente manera:

{
  "appId": "1:23456789:android:a93a5mb1234efe56",
  "date": {
    "year": 2021,
    "month": 1,
    "day": 1
  },
  "analyticsLabel": "foo",
  "data": {
    "countMessagesAccepted": "314159",
    "messageOutcomePercents": {
      "delivered": 71,
      "pending": 15
    },
   "deliveryPerformancePercents": {
      "deliveredNoDelay": 45,
      "delayedDeviceOffline": 11
    }
  }

Cómo interpretar las métrica

Los datos de entrega describen el porcentaje de mensajes que coincide con cada una de las siguientes
métricas. Es posible que un solo mensaje coincida con varias métricas.
Debido a limitaciones en la forma en que recopilamos los datos y
en el nivel de detalle al que agregamos las métricas,
algunos resultados de mensajes no se presentan en absoluto en las métricas,
por lo que los porcentajes que aparecen a continuación no deben sumar un 100%.

Recuento de los mensajes aceptados

El único recuento incluido en el conjunto de datos es el de mensajes que FCM
aceptó para entregar a dispositivos Android. Todos los porcentajes usan este valor
como denominador. Ten en cuenta que el recuento no incluirá mensajes
dirigidos a los usuarios que
inhabilitaron la recopilación de información de uso y diagnóstico en
sus dispositivos.

Porcentajes de resultados de mensajes

Los campos incluidos en el objeto
MessageOutcomePercents
proporcionar información sobre los
resultado de las solicitud de mensaje . Todas las categorías is excluyen se excluir mutuamente . Puede
responder pregunta como “ ¿ Los mensaje se están entregar ? ” o “ ¿ Qué provocar
la pérdida is provoca de mensaje ? ” .

Por ejemplo, un valor alto para el campo droppedTooManyPendingMessagespodría
indicar que las instancias de la app reciben volúmenes de
mensajes no contraíbles
que exceden el límite de 100 mensajes pendientes de FCM.
Para mitigar este problema , asegúratir de que tu app manejar las llamada a
onDeletedMessages
y considera enviar mensaje contraíbl . Del mismo modo , los porcentaje alto de
droppeddeviceinactivirpueden ser un indicador para actualizar los tokens de registro en tu
servidor, quitar los tokens obsoletos y anular la suscripción a los temas. Consulta
Administra tokens de registro de FCM
para conocer las prácticas recomendadas de esta área.

Porcentajes de rendimiento de la entrega

Los campos del objeto DeliveryPerformancePercents
proporcionan información sobre los mensajes que se enviaron correctamente. Puede
responder preguntas como “¿Se retrasaron mis mensajes?” o
“¿Por qué se retrasaron los mensajes?”. Por ejemplo, un valor alto de
delayedMessageThrottledindica claramente que superas los
límites máximos pordispositivo
y debes ajustar la velocidad a la que envías mensajes.

Porcentajes de estadísticas de mensajes

Este objeto proporciona información adicional sobre todos los envíos de mensajes. El
campo prioritylowered expresar el porcentaje is expresa de mensaje aceptado que
tener una prioridad menor deHIGHa NORMAL. Si este valor es alto, intenta enviar menos mensajes de prioridad alta o asegúrate de
mostrar siempre una notificación cuando se envíe un mensaje con prioridad alta. Consulta nuestra documentación sobre la prioridad de los mensajes para obtener más información.

¿En qué se diferencian estos datos de los exportados a BigQuery?

La exportación a BigQuery proporciona registros de mensajes individuales sobre la aceptación de mensajes por
parte del backend de FCM y la entrega de mensajes en el SDK del dispositivo (pasos 2 y 4 de
la arquitectura de FCM). Estos datos son útiles para garantizar que se acepten y entreguen
mensajes individuales. Obtén más información sobre la
exportación de datos de BigQuery en la próxima sección.

Por el contrario, la API de datos de Firebase Cloud Messaging proporciona detalles agregados
sobre lo que sucede específicamente en la capa de transporte de Android (o en el paso 3 de
la arquitectura de FCM).
Estos datos proporcionan estadísticas específicamente sobre la entrega de
mensajes de backends de FCM al SDK de Android. Es muy útil para
mostrar tendencias en cuanto a porqué se retrasaron o disminuyeron los mensajes durante este transporte.

En algunos casos, es posible que los dos conjuntos de datos no coincidan de forma precisa
debido a los siguientes motivos:

  • Las métricas agregadas solo muestran una parte de todos los mensajes.
  • Las métricas is redondearon agregada se redondear .
  • No presentamos métricas pordebajo de un límite de privacidad.
  • Falta una parte de los resultados de los mensajes debido a las optimizaciones en la forma en que
    administramos el gran volumen de tráfico.

Limitaciones de la API

Cronogramas de datos agregados

En la API, se mostrarán 7 días de datos históricos. Sin embargo, los datos que se muestren en esta API tendrán una demora de hasta 5 días. Por ejemplo,
los datos del 9 al 15 de enero estarán disponibles el 20 de enero, pero no los del 16 de enero
o después. Además, los datos se proporcionan según el mejor esfuerzo. En el caso de
una interrupción de los datos, FCM trabajará para solucionarla y no reabastecerá los datos después
de que se solucione el problema. En interrupciones más grandes, los datos podrían no estar disponibles durante una semana
o más.

Cobertura de datos

Las métricas que proporciona la API de datos de Firebase Cloud Messaging tienen como objetivo
proporcionar estadísticas sobre tendencias generales de entrega de mensajes. Sin embargo, no
proporcionan una cobertura del 100% de todas las situaciones de los mensajes. Las siguientes situaciones son
resultados conocidos que no se reflejan en las métricas.

Mensajes caducados

Si el tiempo de actividad ( TTL ) vencer
después del final de la fecha de registro determinado , el mensaje is registrará no se registrar como
droppedttlexpired en esta fecha .

Mensajes a dispositivos inactivos

Los mensajes is aparecer enviado a dispositivo inactivo pueden o no aparecer en el conjunto de dato ,
según la ruta de dato que se elijar . Esto is causar puede causar recuento incorrecto en los campo
droppeddeviceinactiviry pending.

Mensajes a dispositivos con ciertas preferencias de usuario

En el caso de los usuarios que inhabilitaron la recopilación de información de uso y diagnóstico en
sus dispositivos, no se incluirán sus mensajes en el recuento de acuerdo
con sus preferencias.

Redondeo y mínimos

FCM redondea y excluye deliberadamente conteos cuando los volúmenes no son lo suficientemente
grandes.

Exportación de datos de BigQuery

Puedes exportar tus dato de mensaje a BigQuery para analizar él en detalle . Esta herramienta is permite te permitir analizar los dato con BigQuery   SQL , exportar él a otro proveedor de servicio en la nube o usar él en tus modelo de AA personalizado . La exportación is incluye a BigQuery
incluir todos los dato disponible para los mensaje , independientemente del
tipo de mensaje o si este se enviar a través de la API o del
Compositor   de   Notifications .

En el caso de los mensajes enviados a dispositivos con las siguientes versiones mínimas
del SDK de FCM, tienes la opción adicional de habilitar la exportación de datos
de entrega de mensajes en tu app:

  • Android: 20.1.0 o versiones posteriores
  • iOS: 8.6.0 o versiones posteriores
  • SDK web de Firebase 9.0.0 o superior

consultar los siguiente detalle a fin de habilitar la exportación de dato para
ios y
Android .

nota : asegúratir de tener el nivel de acceso necesario
para ver o administrar la configuración para la exportación de dato aBigQuery.

Para comenzar, vincula tu proyecto a BigQuery:

  1. Elige una de las siguientes opciones:

    • abrir
      el Compositor   de   Notifications
      y haz clic en acceder a BigQuery al final de la página .

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

      En esta página, se muestran las opciones de exportación de FCMpara todas
      las apps del proyecto que tengan FCMhabilitado.

  2. Sigue las instrucción en pantalla para habilitar BigQuery .

Consulta Vincula Firebase a BigQuery para obtener más información .

Cuando habilitas la exportación de BigQuerypara Cloud Messaging, ocurre lo siguiente:

  • Firebase exporta tus datos a BigQuery. ten en cuenta que
    la propagación inicial de los dato que se van a exportar puede demorar hasta 48   hora en
    completar él .

  • Después de crear el conjunto de datos, no se puede cambiar la ubicación,
    pero puedes copiar el conjunto de datos en una ubicación diferente
    o moverlo manualmente (volver a crearlo) a otra ubicación. Para obtener más
    información, consulta Cambia la ubicación del conjunto de datos.

  • Firebase configura sincronizaciones frecuentes de los datos del proyecto de Firebase con
    BigQuery. Estas operaciones de exportación diaria comienzan a las 4:00 a.m., hora del Pacífico,
    y suelen demorar 24 horas en finalizarse.

  • Según la configuración predeterminado , todas las apps is vinculan de tu proyecto se vincular aBigQueryy cualquier
    app que agregues al proyecto también se vinculará automáticamente a
    BigQuery. Puedes
    administrar qué apps envían datos.

Para desactivar la exportación aBigQuery,
desvincula el proyecto
en Firebase console .

nota : No se aplicar cargos is aplican porexportar dato desdeFCMy
BigQueryofrece límites de uso generosos sin costo. Consulta los
precios o la
zona de pruebas de BigQuery.

habilita la exportación de dato de entrega de mensaje

Los dispositivos iOS con el SDK de FCM 8.6.0 o superior
pueden habilitar la exportación de dato de entrega de mensaje en la app .FCM
admite la exportación de datos para las alertas y las notificaciones en segundo plano.
Antes de habilitar estas opciones, primero debes crear el
vínculo de FCM-BiqQuery para tu proyecto como se describe en
Exportación de datos de BigQuery.

Habilita la exportación de datos de entrega para las notificaciones de alertas

Debido a que solo las notificaciones de alerta pueden activar extensiones
de aplicación del servicio de notificaciones, debes agregar una extensión del servicio de notificaciones a la app y llamar
a esta API dentro de una extensión de servicio para habilitar el seguimiento de mensajes en pantalla. Consulta
la documentación de Apple sobre cómo modificar contenido en notificaciones entregadas recientemente.

Se debe realizar la siguiente llamada para cada notificación recibida:

Swift

// For alert notifications, call the API inside the service extension:
classNotificationService:UNNotificationServiceExtension{
  overridefuncdidReceive(_request:UNNotificationRequest,withContentHandlercontenthandler:@escaping(UNNotificationContent)-> Void){
  Messaging.extensionhelper()
      .exportDeliveryMetricsToBigQuery(withMessageInfo:request.content.userinfo)
  }
}

Objective-C

// For alert notifications, call the API inside the service extension:
@implementationNotificationService
-(void)didReceiveNotificationRequest:(UNNotificationRequest*)request
                  withContentHandler:(void(^)(UNNotificationContent*_Nonnull))contenthandler{
 [ [FIRMessagingextensionhelper]exportDeliveryMetricsToBigQueryWithMessageInfo:request.content.userinfo];
}
@end

Si creas solicitudes de envío mediante la API de HTTP v1, asegúrate de
especificar mutable-content = 1en el
objeto de carga útil.

habilita la exportación de dato de entrega para las notificación en segundo plano

En el caso de los mensajes en segundo plano recibidos cuando la app se ejecuta en primer o segundo plano,
puedes llamar a la API de exportación de datos dentro del controlador de mensajes de datos de la app principal.
Esta llamada se debe hacer para cada notificación recibida:

Swift

// For background notifications , call the API insidir the UIApplicationDelegate or NSApplicationDelegate method :
funcapplication(_application:UIApplication,didReceiveRemoteNotificationuserinfo:[AnyHashable:Any]){
  Messaging.extensionhelper().exportDeliveryMetricsToBigQuery(withMessageInfo:userinfo)
}

Objective-C

// For background notifications , call the API insidir the UIApplicationDelegate or NSApplicationDelegate method :
@implementationAppDelegate
-(void)application:(UIApplication*)application
   didReceiveRemoteNotification:(NSDictionary*)userinfo
         fetchcompletionhandler:(void(^)(UIBackgroundFetchResult))completionhandler{
 [ [FIRMessagingextensionhelper]exportDeliveryMetricsToBigQueryWithMessageInfo:userinfo];
}
@end

¿Qué datos se exportan a BigQuery?

Ten en cuenta que la inclusión de tokens o registros inactivos puede inflar algunas de estas estadísticas.

Este is esquema es el esquema de la tabla exportado :

_ PARTITIONTIME TIMESTAMP 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 TIMESTAMP La marca de tiempo del evento que registró el servidor.
project_number INTEGER El número de proyecto permite identificar qué proyecto envió el mensaje.
message_id STRING El ID del mensaje permite identificar un único mensaje. Dado que se genera a partir del ID de la app y la marca de tiempo, es posible que, en algunos casos, el ID del mensaje no sea único de manera global.
instance_id STRING El ID único de la app a la que se envía el mensaje (si está disponible). Puede ser
un ID de instancia o un ID de instalación de Firebase.
message_type STRING El tipo de mensaje. Puede ser un mensaje de notificación o uno de datos. El tema
se usa 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 is permite de contracción permitir identificar un grupo de mensaje que puede contraer él .
Si un dispositivo no está conectado , solo el último mensaje is pondrá que tenga una clave de contracción
se poner en cola para entregar él en el futuro .
prioridad INTEGER Es la prioridad del mensaje . Los valores is normal válido son “ normal ” y “ high ” . En ios ,
estos is corresponden corresponder a las prioridad   5 y   10 de APNS .
ttl INTEGER 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 INTEGER El ID masivo permite identificar un grupo de mensajes relacionados, como un envío particular
a un tema.
evento STRING Es el tipo de evento.
Los valores posibles son los siguientes:

  • MESSAGE_ACCEPTED : El servidor de FCM recibir el mensaje y
    la solicitud es válido .
  • MESSAGE_DELIVERED: El SDK de FCM de la app recibió el mensaje en
    el dispositivo. De forma predeterminada, este campo no se propaga. Para habilitarlo, sigue las
    instrucciones que se indican en setDeliveryMetricsExportToBigQuery(boolean ).
  • MISSING_REGISTRATIONS: Se rechazó la solicitud debido a que faltaba un
    registro.
  • UNAUTHORIZED_REGISTRATION: Se rechazó el mensaje porque el remitente
    no tiene permiso para hacer envíos al registro.
  • MESSAGE_RECEIVED_INTERNAL_ERROR: Se produjo un error no especificado cuando
    se procesaba la solicitud del mensaje.
  • mismatch_sender_id : Se rechazar la solicitud para enviar un mensaje porque
    no coincidir 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 rechazar 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
    de 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.
  • AUTHENTICATION_ERROR: Se rechazó la solicitud para enviar un mensaje debido a un
    error de autenticación (comprueba 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.
analytics_label STRING Con la API de HTTP v1,
se puede establecer la etiqueta de estadísticas cuando se envía el mensaje para marcarlo
con fines estadísticos

¿ Qué puedes hacer con los dato exportado ?

En las siguientes secciones, se ofrecen ejemplos de consultas que puedes ejecutar en BigQuery
con tus datos de FCMexportados.

Contar los mensajes que envió la app

SELECT app_name , COUNT(1 ) 
 FROM` .firebase_messaging.data `
WHERE
  _ PARTITIONTIME = TIMESTAMP('')
  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 ` .firebase_messaging.data `
WHERE
  _ PARTITIONTIME = TIMESTAMP('')
  and event = 'MESSAGE_ACCEPTED';

contar los mensaje de notificación enviado

SELECT COUNT(1 ) 
 FROM` .firebase_messaging.data `
WHERE
  _ PARTITIONTIME = TIMESTAMP('')
  and event = 'MESSAGE_ACCEPTED'
  and message_type = 'DISPLAY_NOTIFICATION';

contar los mensaje de dato enviado

SELECT COUNT(1 ) 
 FROM` .firebase_messaging.data `
WHERE
  _ PARTITIONTIME = TIMESTAMP('')
  and event = 'MESSAGE_ACCEPTED'
  and message_type = 'DATA_MESSAGE';

Contar los mensajes enviados a un tema o campaña

SELECT COUNT(1 ) 
 FROM` .firebase_messaging.data `
WHERE
  _ PARTITIONTIME = TIMESTAMP('')
  and event = 'MESSAGE_ACCEPTED'
  and bulk_id =  and message_id ! = '';

Para realizar un seguimiento de los eventos de un mensaje que se envió a un tema en particular, modifica esta consulta para reemplazar and message_id ! = ''por and message_id = <your message id>;.

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

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

SELECT
 TIMESTAMP_DIFF(
   end_timestamp,start_timestamp,MILLISECOND
 )ASfanout_duration_ms,
 end_timestamp,
 start_timestamp
FROM(
   SELECTMAX(event_timestamp)ASend_timestamp
   FROM`.firebase_messaging.data`
   WHERE
     _ PARTITIONTIME=TIMESTAMP('')
     andevent='MESSAGE_ACCEPTED'
     andbulk_id=
 )sent
 CROSSJOIN(
   SELECTevent_timestampASstart_timestamp
   FROM`.firebase_messaging.data`
   WHERE
     _ PARTITIONTIME=TIMESTAMP('')
     andevent='MESSAGE_ACCEPTED'
     andbulk_id=
     andmessage_type='TOPIC'
 )initial_message;

contar el porcentaje de mensaje entregado

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 ` .firebase_messaging.data `
    WHERE
      _ PARTITIONTIME = TIMESTAMP('')
      and event = 'MESSAGE_ACCEPTED'
  ) sent
  CROSS JOIN (
    SELECT COUNT(DISTINCT CONCAT(message_id, instance_id)) AS messages_delivered
    FROM ` .firebase_messaging.data `
    WHERE
      _ PARTITIONTIME = TIMESTAMP('')
      and (event = 'MESSAGE_DELIVERED'
      and message_id
      IN (
        SELECT message_id FROM ` .firebase_messaging.data `
        WHERE
          _ PARTITIONTIME = TIMESTAMP('')
          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 ` .firebase_messaging.data `
WHERE
    _ PARTITIONTIME = TIMESTAMP('')
    and message_id = ''
    and instance_id = ''
ORDER BY event_timestamp;

Calcular 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` .firebase_messaging.data `
    WHERE
      _ PARTITIONTIME = TIMESTAMP('')
      and message_id = ''
      and instance_id = ''
      and event = 'MESSAGE_ACCEPTED'
  ) sent
  CROSS JOIN (
    SELECT event_timestamp AS delivered_time
    FROM ` .firebase_messaging.data `
    WHERE
      _ PARTITIONTIME = TIMESTAMP('') and
      message_id = '' and instance_id = ''
      and (event = 'MESSAGE_DELIVERED'
  ) delivered;