Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

Nachrichtenübermittlung verstehen

FCM bietet drei Toolsets, die Ihnen helfen, einen Einblick in die Nachrichtenübermittlung zu erhalten:

  • Berichte zur Nachrichtenübermittlung in der Firebase-Konsole und Analyse des Benachrichtigungstrichters
  • Aggregierte Android SDK-Bereitstellungsmetriken aus der Firebase Cloud Messaging Data API
  • Umfassender Datenexport nach Google BigQuery

Die auf dieser Seite beschriebenen Berichtstools benötigen alle Google Analytics, um zu funktionieren. Wenn Google Analytics nicht für Ihr Projekt aktiviert ist, können Sie es in der obenen Integrationen Registerkarte Ihrer Firebase Projekteinstellungen.

Beachten Sie, dass die Berichterstellung vieler Statistiken auf dieser Seite aufgrund der Stapelverarbeitung von Analysedaten Verzögerungen von bis zu 24 Stunden unterliegen kann.

Nachrichtenzustellungsberichte

In den Berichten Registerkarte in der Firebase - Konsole können Sie die folgenden Daten für Nachrichten , die an Android oder iOS FCM SDKs, einschließlich denjenigen , abgeschickt über die Benachrichtigungen Komponisten und den FCM APIs anzuzeigen:

  • Gesendet – Die Datennachricht oder Benachrichtigungsnachricht wurde zur Zustellung in die Warteschlange eingereiht oder erfolgreich an einen Drittanbieterdienst wie APNs zur Zustellung übergeben. Siehe Lebensdauer einer Nachricht für weitere Informationen.
  • Empfangen (nur auf Android-Geräten verfügbar) — Die Datennachricht oder Benachrichtigung wurde von der App empfangen. Diese Daten sind verfügbar, wenn auf dem empfangenden Android-Gerät FCM SDK 18.0.1 oder höher installiert ist.
  • Impressionen (nur für Benachrichtigungsnachrichten auf Android-Geräten verfügbar) — Die Anzeigebenachrichtigung wurde auf dem Gerät angezeigt, während die App im Hintergrund läuft.
  • Öffnet – Der Benutzer hat die Benachrichtigungsnachricht geöffnet. Wird nur für Benachrichtigungen gemeldet, die empfangen werden, wenn die App im Hintergrund läuft.

Diese Daten sind für alle Nachrichten mit einer Meldung Nutzlast und alle markierten verfügbaren Datennachrichten . Weitere Informationen zu den Etiketten finden Hinzufügen von Analyse Labels Nachrichten .

Beim Anzeigen von Nachrichtenberichten können Sie einen Datumsbereich für die angezeigten Daten festlegen, mit der Option zum Exportieren in CSV. Sie können auch nach diesen Kriterien filtern:

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

Hinzufügen von Analyselabels zu Nachrichten

Das Kennzeichnen von Nachrichten ist für benutzerdefinierte Analysen sehr nützlich, da Sie die Zustellungsstatistiken nach Labels oder Label-Sets filtern können. Sie können ein Etikett auf jede Nachricht fügen Sie das , indem Sie über das HTTP - API v1 gesendet fcmOptions.analyticsLabel Feld in der Nachricht Objekt oder in den plattformspezifischen AndroidFcmOptions oder ApnsFcmOptions Felder aus .

Analytics - Etiketten sind Textzeichenfolgen im Format ^[a-zA-Z0-9-_.~%]{1,50}$ . Beschriftungen können Klein- und Großbuchstaben, Zahlen und die folgenden Symbole enthalten:

  • -
  • ~
  • %

Die maximale Länge beträgt 50 Zeichen. Sie können bis zu 100 eindeutige Labels pro Tag angeben; Nachrichten mit Labels, die über dieses Limit hinaus hinzugefügt wurden, werden nicht gemeldet.

In der Konsole Registerkarte Berichte Firebase Messaging können Sie eine Liste aller vorhandenen Etiketten suchen und sie einzeln oder in Kombination anwenden die Statistik filtern angezeigt.

Analyse des Benachrichtigungstrichters

Eine integrierte Benachrichtigungstrichteranalyse zeigt Ihnen, wie Ihre Benutzer auf bestimmte Benachrichtigungen reagieren, die von der Firebase-Konsole gesendet werden. Diese Ansicht enthält Daten für bestimmte iOS- und Android-Geräte in diesen Kategorien:

  • Gesendete Benachrichtigungen – Die Nachricht wurde zur Zustellung in die Warteschlange gestellt oder erfolgreich an einen Drittanbieterdienst wie APNs zur Zustellung weitergeleitet. Beachten Sie, dass das Targeting auf veraltete Token oder inaktive Registrierungen diese Statistiken aufblähen kann.
  • Geöffnete Benachrichtigungen — Die Anzahl der geöffneten Benachrichtigungen. Wird nur für Benachrichtigungen gemeldet, die empfangen werden, wenn die App im Hintergrund läuft.
  • Die Anzahl der Unique User, die ein Conversion-Ereignis ausgelöst haben, falls eines definiert ist.

So zeigen Sie die Benachrichtigungstrichteranalyse an:

  1. Im Benachrichtigungen Komponist, wählen Sie die Benachrichtigungen Registerkarte.
  2. Klicken Sie in der Nachrichtenliste auf eine abgeschlossene oder in Bearbeitung befindliche Nachricht. Eine erweiterte Ansicht mit einer Funnel-Analyse wird angezeigt.

Analytics-Berichte werden regelmäßig aktualisiert. Es kann jedoch eine gewisse Verzögerung zwischen dem Öffnen der Benachrichtigung durch einen Benutzer und dem Verfügbarmachen der Ereignisdaten in der Konsole geben. Zusätzlich zu diesen Berichten unter dem Benachrichtigungen Registerkarte können Sie auch benutzerdefinierte Trichter in Analytics bauen und die Abschlussrate von einer Abfolge von Schritten in Ihrer App zu visualisieren.

Aggregierte Lieferdaten über die FCM Data API

Mit der Firebase Cloud Messaging Data API können Sie Informationen abrufen, die Ihnen helfen, die Ergebnisse von Nachrichtenanfragen zu verstehen, die an Android-Anwendungen gerichtet sind. Die API stellt aggregierte Daten für alle datenerfassungsfähigen Android-Geräte in einem Projekt bereit. Dazu gehören Angaben über den Anteil der Nachrichten ohne Verzögerung geliefert sowie wie viele Nachrichten wurden im verzögert oder fallen gelassen Android Transport Layer . Die Auswertung dieser Daten kann allgemeine Trends bei der Nachrichtenzustellung aufdecken und Ihnen helfen, effektive Möglichkeiten zur Verbesserung der Leistung Ihrer Sendeanforderungen zu finden.

Die API stellt alle für eine bestimmte Anwendung verfügbaren Daten bereit. Finden Sie in der API - Referenz - Dokumentation .

Wie werden die Daten aufgeschlüsselt?

Lieferdaten werden durch die Anwendung, das Datum und aufgeschlüsselt Analytik Etikett . Ein Aufruf der API gibt Daten für jede Kombination aus Datum, Anwendung und Analytics-Label zurück. Zum Beispiel kann ein einzelnes androidDeliveryData würde JSON - Objekt wie folgt 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
    }
  }

So interpretieren Sie die Metriken

Zustellungsdaten beschreiben den Prozentsatz der Nachrichten, die jeder der folgenden Metriken entsprechen. Es ist möglich, dass eine einzelne Nachricht mehreren Metriken entspricht. Aufgrund von Einschränkungen, wie wir die Daten und die Granularität sammeln , an dem wir die Metriken aggregiert werden einige Nachrichten Ergebnisse nicht in den Metriken dargestellt, so unter die Prozentsätze nicht zu 100% summieren.

Angenommene Nachrichten zählen

Die einzige im Datensatz enthaltene Anzahl ist die Anzahl der Nachrichten, die von FCM zur Zustellung an Android-Geräte akzeptiert wurden. Alle Prozentangaben verwenden diesen Wert als Nenner. Beachten Sie, dass diese Anzahl keine Nachrichten enthält, die an Benutzer gerichtet sind, die die Erfassung von Nutzungs- und Diagnoseinformationen auf ihren Geräten deaktiviert haben.

Prozentsatz des Nachrichtenergebnisses

Die Felder in der mitgelieferten MessageOutcomePercents Objektinformationen über die Ergebnisse der Nachrichtenanforderungen liefern. Die Kategorien schließen sich alle gegenseitig aus. Es kann Fragen wie "Werden meine Nachrichten zugestellt?" beantworten. und "Was führt dazu, dass Nachrichten verworfen werden?"

Zum Beispiel kann ein hoher Wert für die droppedTooManyPendingMessages könnte Feld signalisieren , dass App - Instanzen Volumina erhalten nicht zusammenlegbare Nachrichten von mehr als FCM Grenze von 100 anstehenden Meldungen. Um dies zu mildern, stellen Sie sicher , dass Ihre App Griffe Anrufe onDeletedMessages und betrachten zusammenklappbar Senden von Nachrichten. Ähnlich hohe Prozentsätze für droppedDeviceInactive konnte ein Signal Update Registrierungstoken auf dem Server sein, abgestandene Token zu entfernen und sie von Themen abzumelden. Siehe Verwalten FCM Registrierung Token für Best Practices in diesem Bereich.

Lieferleistung in Prozent

Die Felder in den DeliveryPerformancePercents Objektinformationen über Nachrichten liefern , die erfolgreich geliefert wurden. Es kann Fragen wie "Waren meine Nachrichten verspätet?" beantworten. und "Warum werden Nachrichten verzögert?" Zum Beispiel kann ein hoher Wert für delayedMessageThrottled würde zeigen deutlich , dass Sie mehr als pro-Gerät Höchstgrenzen , und sollte die Geschwindigkeit , mit der Sie das Senden von Nachrichten anpassen.

Message Insight-Prozentsatz

Dieses Objekt stellt zusätzliche Informationen zu allen gesendeten Nachrichten bereit. Das priorityLowered Feld drückt den Prozentsatz der akzeptierten Nachrichten , die Priorität von gesenkt hatte HIGH auf NORMAL aufgrund App Standby - Eimer . Wenn dieser Wert hoch ist, versuchen Sie, weniger Nachrichten mit hoher Priorität zu senden, oder stellen Sie sicher, dass Sie immer eine Benachrichtigung anzeigen, wenn eine Nachricht mit hoher Priorität gesendet wird.

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

Der BigQuery Export liefert individuelle Nachrichtenprotokolle zu Nachrichten Akzeptanz durch den FCM Backend und die Nachrichtenübermittlung in dem SDK auf dem Gerät (Schritte 2 und 4 des FCM Architecture ). Diese Daten sind nützlich, um sicherzustellen, dass einzelne Nachrichten akzeptiert und zugestellt wurden. Lesen Sie mehr über BigQuery Datenexport im nächsten Abschnitt.

Im Gegensatz dazu bietet die Firebase Cloud Messaging Data API aggregiert Details über das, was im Android Transport Layer speziell passiert (oder Schritt 3 der FCM Architektur ). Diese Daten bieten insbesondere Einblicke in die Übermittlung von Nachrichten von FCM-Back-Ends an das Android SDK. Es ist besonders nützlich, um Trends zu zeigen, warum Nachrichten während dieses Transports verzögert oder verworfen wurden.

In einigen Fällen ist es möglich, dass die beiden Datensätze aus folgenden Gründen nicht genau übereinstimmen:

  • Die aggregierten Metriken erfassen nur einen Teil aller Nachrichten
  • Die aggregierten Metriken sind gerundet
  • Wir präsentieren keine Messwerte unter einem Datenschutzgrenzwert
  • Ein Teil der Nachrichtenergebnisse fehlt aufgrund von Optimierungen bei der Verwaltung des großen Datenverkehrsaufkommens.

Einschränkungen der API

Datenverzögerung

Die von dieser API zurückgegebenen Daten werden um bis zu 5 Tage verzögert. Am 10. Januar wären beispielsweise die Daten für den 5. Januar verfügbar, aber nicht für den 6. Januar oder später. Darüber hinaus werden die Daten nach bestem Wissen und Gewissen bereitgestellt. Im Falle eines Datenausfalls wird FCM daran arbeiten, die Daten vorwärts zu beheben und die Daten nach der Behebung des Problems nicht wieder aufzufüllen. Bei größeren Ausfällen können die Daten eine Woche oder länger nicht verfügbar sein.

Datenabdeckung

Die von der Firebase Cloud Messaging Data API bereitgestellten Metriken sollen Einblicke in allgemeine Trends der Nachrichtenübermittlung geben. Sie decken jedoch nicht alle Nachrichtenszenarien zu 100 % ab. Die folgenden Szenarien sind bekannte Ergebnisse, die sich nicht in den Metriken widerspiegeln.

Eingeklappte Nachrichten

Nachrichten , die wurden zusammengebrochen durch eine andere Meldung erscheinen nicht im Datensatz.

Nachrichten an inaktive Geräte

Nachrichten, die an inaktive Geräte gesendet werden, werden möglicherweise im Datensatz angezeigt, je nachdem, welchen Datenpfad sie verwenden. Dies kann zu Fehlzählungen in den Feldern "Dropped Inactive Device" und "Pending" führen.

Nachrichten an Geräte mit bestimmten Benutzereinstellungen

Benutzer, die die Erfassung von Nutzungs- und Diagnoseinformationen auf ihren Geräten deaktiviert haben, werden ihre Nachrichten gemäß ihren Präferenzen nicht in unsere Zählung aufgenommen.

Rundung und Minimum

FCM rundet und schließt Zählungen bewusst aus, wenn die Volumina nicht groß genug sind.

BigQuery-Datenexport

Sie können Ihre Nachrichtendaten in exportieren BigQuery für die weitere Analyse. Mit BigQuery können Sie die Daten mit BigQuery SQL analysieren, in einen anderen Cloud-Anbieter exportieren oder die Daten für Ihre benutzerdefinierten ML-Modelle verwenden. Ein Export nach BigQuery umfasst alle verfügbaren Daten für Nachrichten, unabhängig vom Nachrichtentyp oder ob die Nachricht über die API oder den Notifications Composer gesendet wird.

Für Nachrichten, die an Geräte mit den folgenden Mindestversionen des FCM SDK gesendet werden, haben Sie die zusätzliche Option, den Export von Nachrichtenzustellungsdaten 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

Siehe unten für Einzelheiten zur Aktivierung Datenexport für Android und iOS .

Verknüpfen Sie zunächst Ihr Projekt mit BigQuery:

  1. Wählen Sie eine der folgenden Optionen:

    • Öffnen Sie die Benachrichtigungen Komponist , klicken Sie dann auf Access - BigQuery am unteren Rand der Seite.

    • Von der Integrations - Seite in der Firebase - Konsole, klicken Sie auf Link - in BigQuery - Karte.

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

  2. Befolgen Sie die Anweisungen auf dem Bildschirm, um BigQuery zu aktivieren.

Siehe Link - Firebase zu BigQuery für weitere Informationen.

Nachdem Sie Ihr Projekt mit BigQuery verknüpft haben:

  • Firebase exportiert Ihre Daten zu BigQuery. Beachten Sie, dass die anfängliche Weitergabe von Daten für den Export bis zu 48 Stunden dauern kann.

  • Firebase richtet regelmäßige Synchronisierungen Ihrer Daten aus Ihrem Firebase-Projekt mit BigQuery ein. Diese täglichen Exportvorgänge beginnen um 4:00 Uhr PDT und können bis zu zehn Stunden dauern.

  • Standardmäßig sind alle Apps in Ihrem Projekt mit BigQuery verknüpft und alle Apps, die Sie später zum Projekt hinzufügen, werden automatisch mit BigQuery verknüpft. Sie können festlegen , welche Anwendungen Daten senden .

BigQuery Export, zu deaktivieren , die Verknüpfung zwischen Ihrem Projekt in der Konsole Firebase.

Exportieren von Nachrichtenzustellungsdaten aktivieren

iOS-Geräte mit dem FCM SDK 8.6.0 oder höher können den Export der Nachrichtenübermittlungsdaten ihrer App aktivieren. FCM unterstützt den Datenexport für Warn- und Hintergrundbenachrichtigungen. Bevor Sie diese Optionen aktivieren, müssen Sie zuerst den FCM-BiqQuery Link für Ihr Projekt erstellen , wie beschrieben in BigQuery Datenexport .

Lieferdatenexport für Warnmeldungen aktivieren

Da nur Warnungsbenachrichtigungen App-Erweiterungen für den Benachrichtigungsdienst auslösen können, müssen Sie Ihrer App eine Benachrichtigungsdienst-Erweiterung hinzufügen und diese API in einer Diensterweiterung aufrufen, um die Nachverfolgung von Anzeigenachrichten zu aktivieren. Siehe Apples Dokumentation Ändern von Inhalt in neu ausgelieferten Benachrichtigungen .

Für jede eingegangene Benachrichtigung muss folgender Aufruf erfolgen:

Schnell

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

Ziel 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 Sendeaufträge werden der Aufbau mit der HTTP - API v1, stellen Sie sicher , spezifizieren mutable-content = 1 in der Nutzlast Objekt .

Lieferdatenexport für Hintergrundbenachrichtigungen aktivieren

Für Hintergrund - Nachrichten empfangen , wenn die App im Vordergrund oder im Hintergrund ist, können Sie die Daten - Export - API innerhalb der Haupt App Daten Nachrichtenhandler aufrufen UIApplicationDelegate application:didReceiveRemoteNotification:fetchCompletionHandler: . Dieser Aufruf muss für jede empfangene Benachrichtigung erfolgen:

Schnell

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

Ziel c

// For background notifications, call the API inside the UIApplicationDelegate 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 das Targeting auf veraltete Token oder inaktive Registrierungen einige dieser Statistiken aufblähen kann.

Das Schema der exportierten Tabelle ist:

_PARTITIONZEIT ZEITSTEMPEL Diese Pseudospalte enthält einen Zeitstempel für den Beginn des Tages (in UTC), in dem die Daten geladen wurden. Für die Partition YYYYMMDD enthält diese Pseudospalte den Wert TIMESTAMP('YYYY-MM-DD').
event_timestamp ZEITSTEMPEL Ereigniszeitstempel wie vom Server aufgezeichnet
Projektnummer GANZE ZAHL Die Projektnummer identifiziert das Projekt, das die Nachricht gesendet hat
Nachrichten ID STRING Die Nachrichten-ID identifiziert eine Nachricht. Die aus der App-ID und dem Zeitstempel generierte Nachrichten-ID ist in einigen Fällen möglicherweise nicht global eindeutig.
Instanz_ID STRING Die Instanz-ID der App, an die die Nachricht gesendet wird (sofern verfügbar)
Nachrichtentyp STRING Der Typ der Nachricht. Kann eine Benachrichtigungsnachricht oder eine Datennachricht sein. Thema wird verwendet, um die ursprüngliche Nachricht für ein Thema oder eine Kampagne zu identifizieren; die nachfolgenden Nachrichten sind entweder eine Benachrichtigung oder eine Datennachricht.
sdk_plattform STRING Die Plattform der Empfänger-App
App Name STRING Der Paketname für Android-Apps oder die Bundle-ID für iOS-Apps
Collapse_key STRING Der Minimierungsschlüssel identifiziert eine Gruppe von Nachrichten, die minimiert werden können. Wenn ein Gerät nicht verbunden ist, wird nur die letzte Nachricht mit einem bestimmten Minimierungsschlüssel für die eventuelle Zustellung in die Warteschlange gestellt
Priorität GANZE ZAHL Die Priorität der Nachricht. Gültige Werte sind "normal" und "hoch". Unter iOS entsprechen diese den APNs-Prioritäten 5 und 10
ttl GANZE ZAHL Dieser Parameter gibt an, wie lange (in Sekunden) die Nachricht im FCM-Speicher aufbewahrt werden soll, wenn das Gerät offline ist
Thema STRING Der Name des Themas, an das eine Nachricht gesendet wurde (falls zutreffend)
Bulk-ID GANZE ZAHL Die Bulk-ID identifiziert eine Gruppe verwandter Nachrichten, z. B. eine bestimmte Sendung an ein Thema
Veranstaltung STRING Die Art des Ereignisses. Mögliche Werte sind:
  • 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 übermittelt. Dieses Feld wird standardmäßig nicht weitergegeben. So aktivieren Sie den Anweisungen in setDeliveryMetricsExportToBigQuery(boolean) .
  • MISSING_REGISTRATIONS: Die Anfrage wurde aufgrund einer fehlenden Registrierung abgelehnt;
  • UNAUTHORIZED_REGISTRATION: Die Nachricht wurde abgelehnt, da der Absender nicht berechtigt ist, an die Registrierung zu senden;
  • MESSAGE_RECEIVED_INTERNAL_ERROR: Bei der Verarbeitung der Nachrichtenanforderung ist ein nicht näher angegebener Fehler aufgetreten;
  • MISMATCH_SENDER_ID: Die Anfrage zum Senden einer Nachricht wurde aufgrund einer Nichtübereinstimmung zwischen der Absender-ID, die die Nachricht sendet, und der für den Endpunkt deklarierten abgelehnt;
  • QUOTA_EXCEEDED: Die Anfrage zum Senden einer Nachricht wurde aufgrund eines unzureichenden Kontingents abgelehnt;
  • INVALID_REGISTRATION: Die Anfrage zum Senden einer Nachricht wurde aufgrund einer ungültigen Registrierung abgelehnt;
  • 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 einer Nutzlast über dem Limit abgelehnt;
  • AUTHENTICATION_ERROR: Die Anfrage zum Senden einer Nachricht wurde aufgrund eines Authentifizierungsfehlers abgelehnt (überprüfen Sie den zum Senden der Nachricht verwendeten API-Schlüssel);
  • INVALID_TTL: Die Anfrage zum Senden einer Nachricht wurde aufgrund einer ungültigen TTL abgelehnt.
analytics_label STRING Mit dem HTTP - API v1 kann die Analytik Label eingestellt werden , wenn die Nachricht zu senden, um die Nachricht für die Analytik Zwecke zu markieren

Was können Sie mit den exportierten Daten machen?

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 per 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;

Zählen Sie einzelne App-Instanzen, 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 Benachrichtigungen 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';

Gesendete Datennachrichten 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 = 'DATA_MESSAGE';

Zählen Sie Nachrichten, die an ein Thema oder eine Kampagne gesendet wurden

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 != '';

Um eine Nachricht zu bestimmtem Thema gesendet Ereignisse zu verfolgen, modifizieren , diese Abfrage zu ersetzen AND message_id != '' Mit AND message_id = <your message id>; - AND message_id = <your message id>; .

Berechnen der Fanout-Dauer für ein bestimmtes Thema oder eine Kampagne

Die Startzeit für das Fanout ist der Zeitpunkt, zu dem die ursprüngliche Anfrage empfangen wird, und die Endzeit ist der Zeitpunkt, zu dem die letzte einzelne Nachricht erstellt wird, die auf eine einzelne Instanz abzielt.

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;

Verfolgen Sie alle Ereignisse für eine bestimmte Nachrichten-ID und Instanz-ID

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;

Berechnen Sie die Latenz für eine bestimmte Nachrichten-ID und Instanz-ID

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;