Nachrichtenzustellung

FCM bietet drei Sätze von Tools, die Ihnen helfen, einen Einblick in die Nachrichtenzustellung zu erhalten:

  • Firebase Berichte zur Nachrichtenzustellung in der Konsole
  • Aggregierte Übermittlungsmesswerte des Android SDK aus der Firebase Cloud Messaging Data API
  • Umfassender Datenexport nach Google BigQuery

Die auf dieser Seite beschriebenen Berichtstools erfordern Google Analytics um zu funktionieren. Ist Google Analytics für Ihr Projekt nicht aktiviert, können Sie das in der Integrationen Ihrer Firebase-Projekteinstellungen.

Die Berichte für viele Statistiken auf dieser Seite Verzögerungen von bis zu 24 Stunden aufgrund der Batchverarbeitung von Analysedaten.

Berichte zu Nachrichtenzustellungen

Auf dem Tab Berichte in der Firebase-Konsole können Sie die folgenden Daten für Nachrichten aufrufen, die an FCM-SDKs der Android- oder Apple-Plattform gesendet wurden, einschließlich derjenigen, die über den Benachrichtigungs-Composer und die FCM APIs gesendet wurden:

  • Sends: Die Daten- oder Benachrichtigungsnachricht wurde zur Zustellung in die Warteschlange gestellt oder zur Zustellung an einen Drittanbieterdienst wie APNs übergeben. Weitere Informationen finden Sie unter Lebensdauer einer Nachricht.
  • Empfangen (nur auf Android-Geräten verfügbar): Die Datennachricht oder Benachrichtigung wurde von der App empfangen. Diese Daten sind verfügbar wenn das empfangende Android-Gerät das FCM SDK 18.0.1 oder höher installiert ist.
  • Impressionen (nur für Benachrichtigungsnachrichten auf Android-Geräten verfügbar): Die Benachrichtigung wurde auf dem Gerät angezeigt, während die App im Hintergrund ausgeführt wurde.
  • Öffnet – Der Nutzer hat die Benachrichtigung geöffnet. Nur für Benachrichtigungen erfasst, die empfangen werden, während die App im Hintergrund läuft.

Diese Daten sind für alle Nachrichten mit einer Benachrichtigungsnutzlast und alle beschrifteten Datennachrichten verfügbar. Weitere Informationen zu Labels finden Sie unter Analyselabels zu Nachrichten hinzufügen.

Beim Anzeigen von SMS-Berichten können Sie einen Zeitraum für die angezeigten Daten festlegen. mit der Option eines CSV-Exports. Sie können auch nach folgenden Kriterien filtern:

  • Plattform (iOS oder Android)
  • App
  • Benutzerdefinierte Analyselabels

Analyselabels zu Nachrichten hinzufügen

Das Beschriften von E-Mails ist sehr nützlich für benutzerdefinierte Analysen, da Sie Zustellungsstatistiken nach Labels oder Labelsets filtern können. Sie können eine jeder Nachricht, die über die HTTP v1 API gesendet wird, ein Label hinzufügen, indem Sie im Feld fcmOptions.analyticsLabel im message-Objekts oder im Feld plattformspezifischen AndroidFcmOptions- oder ApnsFcmOptions-Feldern.

Analytics-Labels sind Textstrings im Format ^[a-zA-Z0-9-_.~%]{1,50}$. Labels können Klein- und Großbuchstaben, Ziffern und den folgenden Symbolen:

  • -
  • ~
  • %

Darf maximal 50 Zeichen lang sein. Sie können bis zu 100 eindeutige Labels pro Tag angeben. Nachrichten mit Labels, die über diese Grenze hinaus hinzugefügt wurden, werden nicht gemeldet.

Auf dem Tab Firebase Berichte können Sie in einer Liste aller vorhandenen Labels suchen und sie einzeln oder in Kombination anwenden, um die angezeigten Statistiken zu filtern.

Aggregierte Lieferdaten über die FCM Data API

Mit der Firebase Cloud Messaging Data API können Sie Informationen abrufen, mit denen Sie die Ergebnisse von Nachrichtenanfragen nachvollziehen können, die auf Android-Apps ausgerichtet sind. Die API stellt aggregierte Daten für alle Android-Geräte in einem Projekt bereit, auf denen die Datenerhebung aktiviert ist. Dazu gehören Details zum Prozentsatz der ohne Verzögerung zugestellten Nachrichten sowie dazu, wie viele Nachrichten innerhalb der Android-Transportschicht verzögert oder verworfen wurden. Die Auswertung dieser Daten kann allgemeine Trends bei der Nachrichtenübermittlung aufzeigen und Ihnen helfen, effektive Möglichkeiten zur Verbesserung der Leistung Ihrer Sendeanfragen zu finden. Informationen dazu, welche Zeiträume in den Berichten verfügbar sind, finden Sie unter Zusammengefasste Datenzeitachsen.

Die API stellt alle für eine bestimmte Anwendung verfügbaren Daten bereit. Weitere Informationen finden Sie in der API-Referenzdokumentation

Wie werden die Daten aufgeschlüsselt?

Lieferdaten werden nach Anwendung, Datum und Analytics-Label aufgeschlüsselt. Ein API-Aufruf liefert Daten für jede Kombination aus Datum, Anwendung und Analyselabel. Ein einzelnes androidDeliveryData-JSON-Objekt könnte beispielsweise so aussehen:

 {
  "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
    }
  }

Messwerte auswerten

In den Zustellungsdaten sehen Sie den Prozentsatz der Nachrichten, die zu den einzelnen Messwerten passen. Es ist möglich, dass eine einzelne Nachricht zu mehreren Messwerten passt. Aufgrund von Einschränkungen bei der Datenerhebung und den Detaillierungsgrad, mit dem die Messwerte aggregiert wurden, einige Nachrichtenergebnisse werden überhaupt nicht in den Messwerten sodass die Summe der Prozentsätze unten nicht 100 % ergibt.

Anzahl der angenommenen Nachrichten

Im Datensatz ist nur die Anzahl der Nachrichten enthalten, die von FCM zur Zustellung an Android-Geräte akzeptiert wurden. Dieser Wert wird als Nenner für alle Prozentsätze verwendet. Diese Anzahl umfasst keine Nachrichten, die auf Nutzer ausgerichtet sind, die die Erhebung von Nutzungs- und Diagnosedaten auf ihren Geräten deaktiviert haben.

Prozentsätze für Nachrichtenergebnisse

Die Felder in den MessageOutcomePercents -Objekt bieten Informationen zum Nachrichtenanfragen zu ermitteln. Die Kategorien schließen sich alle gegenseitig aus. Sie kann So erhalten Sie Antworten auf Fragen wie „Werden meine Nachrichten zugestellt?“ und „Was ist Nachrichten zu löschen?“

Ein hoher Wert für das Feld droppedTooManyPendingMessages kann beispielsweise darauf hinweisen, dass App-Instanzen eine große Menge an nicht minimierbaren Nachrichten erhalten, die das Limit von 100 ausstehenden Nachrichten von FCM übersteigt. Um dies zu vermeiden, sollten Sie darauf achten, dass Ihre App Aufrufe an onDeletedMessages, und minimierbare Nachrichten in Betracht ziehen. Hohe Prozentsätze für droppedDeviceInactive könnte ein Hinweis sein, dass die Registrierungstokens auf deinem um veraltete Tokens zu entfernen und sie von Themen zu trennen. Best Practices in diesem Bereich finden Sie unter FCM-Registrierungstokens verwalten.

Prozentsatz der Auslieferungsleistung

Die Felder in der Datei DeliveryPerformancePercents -Objekt enthält Informationen zu erfolgreich zugestellten Nachrichten. Es wie z. B. die Frage "Haben meine Nachrichten verzögert?" und „Warum erscheinen Nachrichten verzögert?“ Ein hoher Wert für delayedMessageThrottled gibt deutlich an, dass Sie Höchstbeträge pro Gerät, und die Geschwindigkeit anpassen, mit der Sie Nachrichten senden.

Prozentsätze für Message Insight

Dieses Objekt bietet zusätzliche Informationen zu allen gesendeten Nachrichten. Im Feld priorityLowered wird der Prozentsatz der akzeptierten Nachrichten angegeben, deren Priorität von HIGH auf NORMAL gesenkt wurde. Wenn dieser Wert hoch ist, senden Sie weniger Nachrichten mit hoher Priorität oder sorgen Sie dafür, dass immer eine Benachrichtigung angezeigt wird, wenn eine Nachricht mit hoher Priorität gesendet wird. Weitere Informationen finden Sie in der Dokumentation zur Nachrichtenpriorität.

Wie unterscheiden sich diese Daten von Daten, die nach BigQuery exportiert wurden?

Der BigQuery-Export stellt einzelne Nachrichtenlogs über die Annahme von Nachrichten durch das FCM-Back-End und die Nachrichtenzustellung im SDK auf dem Gerät (Schritte 2 und 4 der der FCM-Architektur). Anhand dieser Daten können Sie prüfen, ob einzelne Nachrichten angenommen und zugestellt wurden. Weitere Informationen zu BigQuery-Datenexport aus.

Die Firebase Cloud Messaging Data API bietet dagegen aggregierte Details dazu, was genau in der Android-Transportschicht passiert (Schritt 3 der FCM-Architektur). Diese Daten geben insbesondere Aufschluss über die Zustellung von Nachrichten von FCM-Backends an das Android SDK. Sie ist besonders nützlich für zeigt Trends dazu, warum Nachrichten während des Transports verspätet oder gar nicht zugestellt wurden.

In einigen Fällen stimmen die beiden Datensätze möglicherweise nicht genau überein. Das kann folgende Gründe haben:

  • Bei den aggregierten Messwerten wird nur ein Teil der Nachrichten berücksichtigt
  • Die zusammengefassten Messwerte werden gerundet.
  • Messwerte unter einem Datenschutzgrenzwert werden nicht angezeigt
  • Ein Teil der Nachrichtenergebnisse fehlt aufgrund von Optimierungen bei der Verwaltung des hohen Traffic-Volumens.

Einschränkungen der API

Zeitachsen für aggregierte Daten

Die API gibt Verlaufsdaten aus 7 Tagen zurück. Die von dieser API zurückgegebenen Daten verzögern sich jedoch um bis zu 5 Tage. Zum Beispiel auf Für den 20. Januar wären die Daten für den Zeitraum vom 9. bis 15. Januar verfügbar, aber nicht für den Januar. ab dem 16. Tag des Monats. Außerdem werden die Daten nach dem Best-Effort-Prinzip bereitgestellt. Bei einem Datenausfall wird FCM versuchen, das Problem zu beheben, und die Daten nicht nachholen, nachdem das Problem behoben wurde. Bei größeren Ausfällen sind die Daten möglicherweise eine Woche lang nicht verfügbar oder mehr.

Datenabdeckung

Die von der Firebase Cloud Messaging Data API bereitgestellten Messwerte sollen einen Überblick über allgemeine Trends bei der Nachrichtenübermittlung geben. Sie decken jedoch nicht alle Nachrichtenszenarien zu 100 % ab. Die folgenden Szenarien sind bekannte Ergebnisse, die nicht in den Messwerten berücksichtigt werden.

Abgelaufene Nachrichten

Wenn die Gültigkeitsdauer (TTL) abläuft nach Ablauf des angegebenen Protokolldatums, wird die Nachricht droppedTtlExpired an diesem Datum.

Nachrichten an inaktive Geräte

Nachrichten, die an inaktive Geräte gesendet werden, werden je nach Datenpfad möglicherweise nicht im Datenpool aufgeführt. Das kann zu einer falschen Zählung in den Feldern droppedDeviceInactive und pending führen.

Nachrichten an Geräte mit bestimmten Nutzereinstellungen

Bei Nutzern, die die Erhebung von Nutzungs- und Diagnosedaten auf ihren Geräten deaktiviert haben, werden ihre Nachrichten gemäß ihren Einstellungen nicht gezählt.

Abrundung und Mindestwerte

Bei FCM werden Zählungen absichtlich gerundet und bei zu geringen Volumen ausgeschlossen.

BigQuery-Datenexport

Sie können Ihre Nachrichtendaten exportieren in BigQuery zur weiteren Analyse. BigQuery können Sie die Daten mit BigQuery SQL analysieren und in eine andere Cloud exportieren. oder die Daten für Ihre benutzerdefinierten ML-Modelle verwenden. Export nach BigQuery enthält alle verfügbaren Daten für Nachrichten, unabhängig von oder ob die Nachricht über die API oder Notifications Composer.

Bei Nachrichten, die an Geräte mit den folgenden Mindestversionen des FCM SDK gesendet werden, haben Sie die zusätzliche Möglichkeit, den Export von Daten zur Nachrichtenübermittlung für Ihre App zu aktivieren:

  • Android 20.1.0 oder höher
  • iOS 8.6.0 oder höher
  • Firebase Web SDK 9.0.0 oder höher

Weitere Informationen zum Aktivieren des Datenexports für Android und iOS:

Verknüpfen Sie zuerst Ihr Projekt mit BigQuery:

  1. Wählen Sie eine der folgenden Optionen aus:

    • Öffnen Sie den Benachrichtigungs-Editor und klicken Sie unten auf der Seite auf Auf BigQuery zugreifen.

    • Klicken Sie in der Firebase Console auf der Seite Integrationen auf der Karte BigQuery auf Verknüpfen.

      Auf dieser Seite werden FCM Exportoptionen für alle angezeigt FCM-fähige Apps im Projekt.

  2. Folgen Sie der Anleitung auf dem Bildschirm, um BigQuery zu aktivieren.

Weitere Informationen finden Sie unter Firebase mit BigQuery verknüpfen. .

Wenn Sie den Export von BigQuery für Cloud Messaging aktivieren, gilt Folgendes:

  • Firebase exportiert Ihre Daten nach BigQuery. Die Erstübertragung der Daten für den Export kann bis zu 48 Stunden dauern.

  • Nachdem das Dataset erstellt wurde, kann der Speicherort nicht mehr geändert werden. Sie können das Dataset aber an einen anderen Speicherort kopieren oder es manuell verschieben, d. h. an einem anderen Speicherort neu erstellen. Weitere Informationen finden Sie unter Speicherort des Datasets ändern.

  • Firebase richtet regelmäßige Synchronisierungen der Daten aus Ihrem Firebase-Projekt mit BigQuery Diese täglichen Exportvorgänge beginnen um 4:00 Uhr Pacific Time und sind in der Regel innerhalb von 24 Stunden abgeschlossen.

  • Standardmäßig werden alle Apps in Ihrem Projekt mit BigQuery verknüpft. Alle Apps, die Sie dem Projekt später hinzufügen, werden ebenfalls automatisch mit BigQuery verknüpft. Sie können Festlegen, welche Apps Daten senden

Wenn Sie den BigQuery-Export deaktivieren möchten, heben Sie die Verknüpfung Ihres Projekts in der Firebase-Konsole auf.

Export von Daten zur Nachrichtenübermittlung aktivieren

iOS-Geräte mit dem FCM SDK 8.6.0 oder höher können den Datenexport ihrer App für die Nachrichtenzustellung aktivieren. FCM unterstützt den Datenexport sowohl für Benachrichtigungen als auch für Benachrichtigungen im Hintergrund. Bevor Sie diese Optionen aktivieren, müssen Sie zuerst die FCM-BigQuery-Verknüpfung für Ihr Projekt erstellen, wie unter BigQuery-Datenexport beschrieben.

Export von Lieferdaten für Benachrichtigungen aktivieren

Weil nur Warnmeldungen eine Benachrichtigungsdienst-App auslösen können müssen Sie Ihrer App eine Erweiterung für den Benachrichtigungsdienst hinzufügen und innerhalb einer Diensterweiterung, um das Tracking von Displaynachrichten zu aktivieren. Weitere Informationen finden Sie in der Apple-Dokumentation unter Inhalte in neu gesendeten Benachrichtigungen ändern.

Der folgende Aufruf muss für jede eingegangene Benachrichtigung erfolgen:

Swift

// For alert notifications, call the API inside the service extension:
class NotificationService: UNNotificationServiceExtension {
  override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
  Messaging.extensionHelper()
      .exportDeliveryMetricsToBigQuery(withMessageInfo:request.content.userInfo)
  }
}

Objective-C

// For alert notifications, call the API inside the service extension:
@implementation NotificationService
- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request
                   withContentHandler:(void (^)(UNNotificationContent *_Nonnull))contentHandler {
  [[FIRMessaging extensionHelper] exportDeliveryMetricsToBigQueryWithMessageInfo:request.content.userInfo];
}
@end

Wenn Sie Sendeanfragen mit der HTTP v1 API erstellen, müssen Sie mutable-content = 1 im Nutzlastobjekt angeben.

Export von Übermittlungsdaten für Benachrichtigungen im Hintergrund aktivieren

Für Hintergrundnachrichten, die empfangen werden, wenn die App im Vordergrund oder im Hintergrund ausgeführt wird, können Sie die Datenexport-API im Daten-Nachrichten-Handler der Haupt-App aufrufen. Dieser Anruf muss für jede eingegangene Benachrichtigung erfolgen:

Swift

// For background notifications, call the API inside the UIApplicationDelegate or NSApplicationDelegate method:
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any]) {
  Messaging.extensionHelper().exportDeliveryMetricsToBigQuery(withMessageInfo:userInfo)
}

Objective-C

// For background notifications, call the API inside the UIApplicationDelegate or NSApplicationDelegate method:
@implementation AppDelegate
- (void)application:(UIApplication *)application
    didReceiveRemoteNotification:(NSDictionary *)userInfo
          fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
  [[FIRMessaging extensionHelper] exportDeliveryMetricsToBigQueryWithMessageInfo:userInfo];
}
@end

Welche Daten werden nach BigQuery exportiert?

Beachten Sie, dass einige dieser Statistiken durch das Targeting auf veraltete Tokens oder inaktive Registrierungen möglicherweise aufgebläht werden.

Das Schema der exportierten Tabelle ist:

_PARTITIONTIME TIMESTAMP Diese Pseudospalte enthält einen Zeitstempel für den Beginn des Tages (in UTC), an dem die Daten geladen wurden. Diese Pseudospalte für die Partition JJJJMMTT enthält den Wert TIMESTAMP('JJJJ-MM-TT').
event_timestamp TIMESTAMP Vom Server erfasster Ereigniszeitstempel
project_number INTEGER Die Projektnummer identifiziert das Projekt, von dem die Nachricht gesendet wurde.
message_id STRING Die Nachrichten-ID identifiziert eine Nachricht. Aus der App-ID und Zeitstempel enthalten, kann die Nachrichten-ID in einigen Fällen nicht global eindeutig sein.
instance_id STRING Die eindeutige ID der App, an die die Nachricht gesendet wird (falls verfügbar). Es kann sein, eine Instanz-ID oder eine Firebase-Installations-ID.
message_type STRING Der Typ der Nachricht. Kann eine Benachrichtigungsnachricht oder eine Datennachricht sein. „Topic“ wird verwendet, um die ursprüngliche Nachricht für ein Thema oder eine gesendeten Kampagne zu identifizieren. Die nachfolgenden Nachrichten sind entweder Benachrichtigungen oder Datennachrichten.
SDK_platform STRING Die Plattform der Empfänger-App
app_name STRING Der Paketname für Android-Apps oder die Paket-ID für iOS-Apps
Schlüssel minimieren STRING Der Minimierungsschlüssel identifiziert eine Gruppe von Nachrichten, die minimiert werden kann. Wenn ein Gerät nicht verbunden ist, wird nur die letzte Nachricht bei einer bestimmten Minimierung Schlüssel wird zur endgültigen Übermittlung in die Warteschlange gestellt
Priorität INTEGER Die Priorität der Nachricht. Gültige Werte sind „normal“ und „hoch“. Auf iOS-Geräten entsprechen den APNs-Prioritäten 5 und 10
TTL INTEGER Dieser Parameter gibt an, wie lange (in Sekunden) die Nachricht im FCM-Speicher aufbewahrt werden soll, wenn das Gerät offline ist.
Thema STRING Name des Themas, an das eine Nachricht gesendet wurde (falls zutreffend)
Bulk-ID INTEGER Die Bulk-ID identifiziert eine Gruppe zusammengehöriger Nachrichten, z. B. eine bestimmte an ein Thema senden
event STRING Der Typ des Ereignisses. Mögliche Werte:
  • MESSAGE_ACCEPTED: Die Nachricht wurde vom FCM-Server empfangen und die Anfrage ist gültig.
  • MESSAGE_DELIVERED: Die Nachricht wurde an das FCM SDK der App auf dem Gerät gesendet. Dieses Feld wird standardmäßig nicht weitergegeben. Folgen Sie zum Aktivieren der finden Sie unter setDeliveryMetricsExportToBigQuery(boolean).
  • MISSING_REGISTRATIONS: Die Anfrage wurde aufgrund einer fehlenden Registrierung abgelehnt.
  • UNAUTHORIZED_REGISTRATION: Die Nachricht wurde abgelehnt, weil der Absender Sie sind nicht berechtigt, den Link zur Registrierung zu senden;
  • MESSAGE_RECEIVED_INTERNAL_ERROR: Bei der Verarbeitung der Nachrichtenanfrage ist ein nicht näher beschriebener Fehler aufgetreten.
  • MISMATCH_SENDER_ID: Die Anfrage zum Senden einer Nachricht wurde aufgrund eines Abweichung zwischen der Absender-ID, über die die Nachricht gesendet wurde, und der ID für Endpunkt;
  • QUOTA_EXCEEDED: Die Anfrage zum Senden einer Nachricht wurde aufgrund eines unzureichenden Kontingents abgelehnt.
  • INVALID_REGISTRATION: Die Anfrage zum Senden einer Nachricht wurde aufgrund eines ungültige Registrierung
  • INVALID_PACKAGE_NAME: Die Anfrage zum Senden einer Nachricht wurde aufgrund eines ungültigen Paketnamens abgelehnt.
  • INVALID_APNS_CREDENTIAL: Die Anfrage zum Senden einer Nachricht wurde aufgrund eines ungültigen APNS-Zertifikats abgelehnt.
  • INVALID_PARAMETERS: Die Anfrage zum Senden einer Nachricht wurde aufgrund ungültiger Parameter abgelehnt.
  • PAYLOAD_TOO_LARGE: Die Anfrage zum Senden einer Nachricht wurde aufgrund eines Nutzlast größer als das Limit;
  • AUTHENTICATION_ERROR: Die Anfrage zum Senden einer Nachricht wurde aufgrund eines Authentifizierungsfehler (überprüfen Sie den API-Schlüssel, der zum Senden der Nachricht verwendet wurde)
  • INVALID_TTL: Die Anfrage zum Senden einer Nachricht wurde aufgrund einer ungültigen Zeit abgelehnt. TTL
analytics_label STRING Mit der HTTP v1 API Analytics-Label beim Senden der Nachricht festgelegt werden, um Die Nachricht zu Analysezwecken

Was kann ich mit den exportierten Daten tun?

In den folgenden Abschnitten finden Sie Beispiele für Abfragen, die Sie in BigQuery für Ihre exportierten FCM-Daten ausführen können.

Gesendete Nachrichten nach App zählen

SELECT app_name, COUNT(1)
FROM `project ID.firebase_messaging.data`
WHERE
  _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
  AND event = 'MESSAGE_ACCEPTED'
  AND message_id != ''
GROUP BY 1;

Einzelne App-Instanzen zählen, auf die Nachrichten ausgerichtet sind

SELECT COUNT(DISTINCT instance_id)
FROM `project ID.firebase_messaging.data`
WHERE
  _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
  AND event = 'MESSAGE_ACCEPTED';

Gesendete Benachrichtigungsnachrichten zählen

SELECT COUNT(1)
FROM `project ID.firebase_messaging.data`
WHERE
  _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
  AND event = 'MESSAGE_ACCEPTED'
  AND message_type = 'DISPLAY_NOTIFICATION';

Anzahl der gesendeten Datennachrichten

SELECT COUNT(1)
FROM `project ID.firebase_messaging.data`
WHERE
  _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
  AND event = 'MESSAGE_ACCEPTED'
  AND message_type = 'DATA_MESSAGE';

Gesendete Nachrichten an ein Thema oder eine Kampagne zählen

SELECT COUNT(1)
FROM `project ID.firebase_messaging.data`
WHERE
  _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
  AND event = 'MESSAGE_ACCEPTED'
  AND bulk_id = your bulk id AND message_id != '';

Wenn Sie Ereignisse für eine an ein bestimmtes Thema gesendete Nachricht erfassen möchten, ändern Sie diese Abfrage, indem Sie AND message_id != '' durch AND message_id = <your message id>; ersetzen.

Fan-out-Dauer für ein bestimmtes Thema oder eine bestimmte Kampagne berechnen

Der Beginn des Fanouts ist der Zeitpunkt, an dem die ursprüngliche Anfrage eingeht, und das Ende „time“ gibt an, wann die letzte einzelne Nachricht für eine einzelne Instanz gesendet wurde. erstellt wird.

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 ID.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 ID.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;

Prozentsatz der zugestellten Nachrichten zählen

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 ID.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 ID.firebase_messaging.data`
    WHERE
      _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
      AND (event = 'MESSAGE_DELIVERED'
      AND message_id
      IN (
        SELECT message_id FROM `project ID.firebase_messaging.data`
        WHERE
          _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
          AND event = 'MESSAGE_ACCEPTED'
        GROUP BY 1
      )
  ) delivered;

Alle Ereignisse für eine bestimmte Nachrichten-ID und Instanz-ID erfassen

SELECT *
FROM `project ID.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;

Latenz für eine bestimmte Nachrichten-ID und Instanz-ID berechnen

SELECT
  TIMESTAMP_DIFF(
    MAX(delivered_time), MIN(accepted_time), MILLISECOND
  ) AS latency_ms
FROM (
    SELECT event_timestamp AS accepted_time
    FROM `project ID.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 ID.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'
  ) delivered;