Informacje o dostarczaniu wiadomości

FCM udostępnia 3 zestawy narzędzi, które zapewniają wgląd w dostarczanie wiadomości:

  • Raporty o dostarczaniu wiadomości w konsoli Firebase
  • Zbiorcze dane o przesyłaniu pakietów SDK do Androida z interfejsu Firebase Cloud Messaging Data API
  • Wszechstronny eksport danych do Google BigQuery

Wszystkie opisane na tej stronie narzędzia do raportowania wymagają Google Analytics do działania. Jeśli usługa Google Analytics nie jest włączona w Twoim projekcie, możesz ją skonfigurować na karcie Integracje w ustawieniach projektu Firebase.

Pamiętaj, że ze względu na zbiorcze grupowanie danych analitycznych raportowanie wielu statystyk na tej stronie może być opóźnione nawet o 24 godziny.

Raporty o dostarczeniu wiadomości

Na karcie Raporty w konsoli Firebase możesz wyświetlać te dane dotyczące wiadomości wysłanych do pakietów SDK FCM na Androida i platformy Apple, w tym za pomocą Narzędzia do tworzenia powiadomień i interfejsów API FCM:

  • Wysłane – wiadomość z danymi lub wiadomość z powiadomieniem została dodana do kolejki do dostarczenia lub została przekazana do usługi innej firmy, takiej jak APNs w celu dostarczenia. Więcej informacji znajdziesz w sekcji Czas życia wiadomości.
  • Otrzymane (dostępne tylko na urządzeniach z Androidem) – wiadomość z danymi lub komunikat z powiadomieniem została odebrana przez aplikację. Te dane są dostępne, gdy na docelowym urządzeniu z Androidem jest zainstalowany pakiet FCM SDK w wersji 18.0.1 lub nowszej.
  • Wyświetlenia (dotyczy tylko powiadomień na urządzeniach z Androidem) – powiadomienie o wyświetlaniu wyświetla się na urządzeniu, gdy aplikacja działa w tle.
  • Otwiera się – użytkownik otworzył wiadomość z powiadomieniem. Te dane są uwzględniane tylko w przypadku powiadomień otrzymywanych, gdy aplikacja działa w tle.

Te dane są dostępne w przypadku wszystkich wiadomości z ładunkiem powiadomień oraz wszystkich oznaczonych wiadomościami z danymi. Więcej informacji o etykietach znajdziesz w artykule Dodawanie etykiet Analytics do wiadomości.

Podczas przeglądania raportów dotyczących wiadomości możesz ustawić zakres dat wyświetlanych danych oraz opcję eksportu do pliku CSV. Możesz też filtrować dane według tych kryteriów:

  • Platforma (iOS lub Android)
  • Aplikacja
  • Własne etykiety Analytics

Dodawanie etykiet Analytics do wiadomości

Oznaczanie wiadomości etykietami jest bardzo przydatne przy analizie niestandardowej, ponieważ pozwala filtrować statystyki dostarczania według etykiet lub zbiorów etykiet. Możesz dodać etykietę do dowolnej wiadomości wysyłanej przez interfejs HTTP v1 API. W tym celu ustaw pole fcmOptions.analyticsLabel w obiekcie message lub w polach AndroidFcmOptions bądź ApnsFcmOptions dostępnych na danej platformie.

Etykiety Analytics to ciągi tekstowe w formacie ^[a-zA-Z0-9-_.~%]{1,50}$. Etykiety mogą zawierać małe i wielkie litery, cyfry oraz te symbole:

  • -
  • ~
  • %

Maksymalna długość to 50 znaków. Możesz określić do 100 unikalnych etykiet dziennie. Wiadomości z etykietami dodanymi ponad ten limit nie są raportowane.

Na karcie Raporty w konsoli Firebase możesz przeszukać listę wszystkich istniejących etykiet i zastosować je pojedynczo lub w połączeniu, aby filtrować wyświetlane statystyki.

Zbiorcze dane o dostawie przez interfejs FCM Data API

Interfejs Firebase Cloud Messaging Data API umożliwia pobieranie informacji, które pomagają zrozumieć efekty żądań wiadomości skierowanych do aplikacji na Androida. Interfejs API udostępnia dane zbiorcze ze wszystkich urządzeń z Androidem w projekcie, które umożliwiają zbieranie danych. Obejmuje to szczegółowe informacje o odsetku wiadomości dostarczonych bez opóźnienia oraz o liczbie wiadomości opóźnionych lub pominiętych w warstwie transportu Androida. Ocena tych danych może ujawnić ogólne trendy w dostarczaniu wiadomości i pomóc znaleźć skuteczne sposoby na zwiększenie wydajności wysyłanych żądań. Informacje o dostępności zakresu dat w raportach znajdziesz w sekcji Harmonogramy danych zbiorczych.

Interfejs API dostarcza wszystkie dane dostępne dla danej aplikacji. Zapoznaj się z dokumentacją API.

Jak wygląda podział danych?

Dane o wyświetlaniu są podzielone według aplikacji, daty i etykiety Analytics. Wywołanie interfejsu API zwróci dane dla wszystkich kombinacji daty, aplikacji i etykiety analitycznej. Na przykład pojedynczy obiekt JSON androidDeliveryData wygląda tak:

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

Jak interpretować dane

Przedstawiają one odsetek wiadomości, które spełniają poniższe warunki. Pojedyncza wiadomość może pasować do kilku wskaźników. Ze względu na ograniczenia w sposobie zbierania danych oraz na poziom szczegółowości, na jakim zagregowaliśmy wskaźniki, niektóre wyniki dotyczące wiadomości nie są w ogóle odzwierciedlane w danych, więc poniższe wartości procentowe nie sumują się do 100%.

Liczba zaakceptowanych wiadomości

Zbiór danych zawiera tylko liczbę wiadomości zaakceptowanych przez FCM w celu dostarczenia na urządzenia z Androidem. Wszystkie wartości procentowe używają tej wartości jako mianownika. Pamiętaj, że ta liczba nie obejmuje wiadomości skierowanych do użytkowników, którzy wyłączyli na swoich urządzeniach zbieranie informacji o użytkowaniu i diagnostyce.

Procentowe wyniki wiadomości

Pola zawarte w obiekcie MessageOutcomePercents dostarczają informacji o efektach żądań wiadomości. Kategorie wzajemnie się wykluczają. Może on odpowiedzieć na pytania, takie jak „Czy moje wiadomości są dostarczane?” i „Co powoduje, że wiadomości są odrzucane?”.

Na przykład wysoka wartość w polu droppedTooManyPendingMessages może oznaczać, że instancje aplikacji otrzymują ilość wiadomości, których nie można zwinąć, przekraczając limit 100 wiadomości oczekujących w FCM. Aby temu zaradzić, sprawdź, czy Twoja aplikacja obsługuje wywołania onDeletedMessages i rozważ wysyłanie wiadomości zwijanych. Podobnie wysokie wartości procentowe parametru droppedDeviceInactive mogą być sygnałem do zaktualizowania tokenów rejestracji na serwerze, usunięcia nieaktualnych tokenów i anulowania ich subskrypcji z tematów. Sprawdzone metody w tym zakresie znajdziesz w artykule Zarządzanie tokenami rejestracji FCM.

Procentowe wskaźniki skuteczności wyświetlania

Pola w obiekcie DeliveryPerformancePercents zawierają informacje o wiadomościach, które zostały dostarczone. Pozwala odpowiedzieć na pytania, takie jak „Czy moje wiadomości były opóźnione?” i „Dlaczego wiadomości są opóźnione?”. Na przykład wysoka wartość atrybutu delayedMessageThrottled jasno wskazuje, że przekraczasz maksymalne limity na urządzenie, dlatego należy dostosować częstotliwość wysyłania wiadomości.

Procentowe statystyki wiadomości

Ten obiekt dostarcza dodatkowe informacje o wszystkich wysyłanych wiadomościach. Pole priorityLowered określa odsetek zaakceptowanych wiadomości, których priorytet został obniżony z HIGH do NORMAL. Jeśli ta wartość jest wysoka, spróbuj wysyłać mniej wiadomości o wysokim priorytecie lub zadbaj o to, by zawsze wyświetlać powiadomienie o wysłaniu wiadomości o wysokim priorytecie. Więcej informacji znajdziesz w dokumentacji dotyczącej priorytetu wiadomości.

Czym różnią się te dane od danych eksportowanych do BigQuery?

Eksport BigQuery zawiera poszczególne dzienniki wiadomości dotyczące akceptacji wiadomości przez backend FCM oraz dostarczania wiadomości w pakiecie SDK na urządzeniu (kroki 2 i 4 architektury FCM). Dane te pozwalają zapewnić, że poszczególne wiadomości zostały zaakceptowane i dostarczone. Więcej informacji o eksportowaniu danych do BigQuery znajdziesz w następnej sekcji.

Interfejs Firebase Cloud Messaging Data API dostarcza natomiast zagregowane szczegółowe informacje o tym, co dzieje się w warstwie Android Transport Layer (lub w kroku 3 architektury FCM). Dane te zapewniają wgląd w dostarczanie wiadomości z backendów FCM do pakietu Android SDK. Jest to szczególnie przydatne, gdy chcesz pokazać trendy, które wyjaśniają, dlaczego wiadomości były opóźnione lub zostały usunięte podczas przenoszenia.

W niektórych przypadkach może się zdarzyć, że te 2 zbiory danych nie będą dokładnie pasować z tych powodów:

  • Zagregowane wskaźniki obejmują tylko część wszystkich wiadomości.
  • Dane zbiorcze są zaokrąglane.
  • Nie prezentujemy danych poniżej progu umożliwiającego zachowanie prywatności
  • Część wyników dotyczących wiadomości jest niedostępna ze względu na optymalizacje sposobu zarządzania dużą liczbą wiadomości.

Ograniczenia interfejsu API

Osie czasu zbierania danych

Interfejs API zwróci dane historyczne z 7 dni, jednak dane zwrócone przez ten interfejs API będą opóźnione nawet o 5 dni. Na przykład 20 stycznia dane z okresu 9–15 stycznia będą dostępne, ale nie będą z okresu 16 stycznia i później. Dodatkowo udostępniamy Ci dane w miarę naszych możliwości. W przypadku przerwy w działaniu danych FCM rozwiąże problem i nie uzupełni danych po jego wyeliminowaniu. W przypadku większych przerw dane mogą być niedostępne przez tydzień lub dłużej.

Zakres danych

Dane udostępniane przez interfejs Firebase Cloud Messaging Data API mają zapewnić wgląd w ogólne trendy w dostarczaniu wiadomości. Nie zapewniają jednak 100-procentowego zasięgu we wszystkich scenariuszach wiadomości. Poniższe scenariusze to znane wyniki, które nie są uwzględniane w wskaźnikach.

Wiadomości, które wygasły

Jeśli wartość Time To Live (TTL) wygaśnie po zakończeniu danej daty logu, wiadomość nie będzie liczona w tym dniu jako droppedTtlExpired.

Wiadomości na nieaktywne urządzenia

Wiadomości wysyłane na nieaktywne urządzenia mogą się nie pojawiać w zbiorze danych w zależności od ścieżki danych, którą przebywają. Może to spowodować błędne zliczanie w polach droppedDeviceInactive i pending.

Wiadomości na urządzenia z określonymi preferencjami użytkownika

Zgodnie z własnymi preferencjami użytkowników, którzy wyłączyli zbieranie informacji o użytkowaniu i diagnostyce na swoich urządzeniach, ich wiadomości nie będą uwzględniane w naszym zliczaniu.

Zaokrąglanie i wartości minimalne

FCM celowo zaokrągla i wyklucza wartości, które nie są wystarczająco duże.

Eksportowanie danych do BigQuery

Dane wiadomości możesz wyeksportować do BigQuery, aby poddać je dalszej analizie. BigQuery umożliwia analizowanie danych za pomocą BigQuery SQL, eksportowanie ich do innego dostawcy usług w chmurze oraz wykorzystywanie danych na potrzeby niestandardowych modeli ML. Eksport do BigQuery obejmuje wszystkie dostępne dane wiadomości niezależnie od ich typu i tego, czy jest ona wysyłana przez interfejs API czy przez kompozytora powiadomień.

W przypadku wiadomości wysyłanych do urządzeń z tymi minimalnymi wersjami pakietu SDK FCM możesz włączyć eksport danych dotyczących dostarczania wiadomości z aplikacji:

  • System Android w wersji 20.1.0 lub nowszej.
  • iOS 8.6.0 lub nowszy
  • pakiet SDK Firebase Web w wersji 9.0.0 lub nowszej

Poniżej znajdziesz szczegółowe informacje na temat włączania eksportu danych w przypadku Androida i iOS.

Aby rozpocząć, połącz projekt z BigQuery:

  1. Wybierz jedną z tych opcji:

    • Otwórz edytor powiadomień i u dołu strony kliknij Otwórz BigQuery.

    • Na stronie Integracje w konsoli Firebase kliknij Połącz na karcie BigQuery.

      Na tej stronie wyświetlane są opcje eksportu do FCM dla wszystkich aplikacji obsługujących FCM w projekcie.

  2. Postępuj zgodnie z instrukcjami wyświetlanymi na ekranie, aby włączyć BigQuery.

Więcej informacji znajdziesz w artykule Łączenie Firebase z BigQuery.

Gdy włączysz eksportowanie danych do BigQuery na potrzeby Komunikacji w chmurze:

  • Firebase eksportuje dane do BigQuery. Pamiętaj, że początkowa propagacja danych do eksportu może potrwać do 48 godzin.

  • Po utworzeniu zbioru danych jego lokalizacji nie można już zmienić. Możesz jednak skopiować zbiór danych do innej lokalizacji lub przenieść go ręcznie (ponownie utworzyć) w innej lokalizacji. Więcej informacji znajdziesz w artykule o zmienianiu lokalizacji zbioru danych.

  • Firebase konfiguruje regularne synchronizacje danych z projektu Firebase z BigQuery. Codzienne operacje eksportu rozpoczynają się o 4:00 czasu pacyficznego i zwykle kończą się w ciągu 24 godzin.

  • Domyślnie wszystkie aplikacje w projekcie są połączone z BigQuery, a wszystkie aplikacje, które dodasz później do projektu, zostaną automatycznie połączone z BigQuery. Możesz określić, które aplikacje mają wysyłać dane.

Aby wyłączyć funkcję BigQuery Export, odłącz projekt w konsoli Firebase.

Włącz eksportowanie danych dotyczących dostarczania wiadomości

Urządzenia z iOS z pakietem SDK FCM w wersji 8.6.0 lub nowszej mogą włączyć eksportowanie danych dotyczących dostarczania wiadomości w swojej aplikacji. FCM obsługuje eksportowanie danych zarówno w przypadku alertów, jak i powiadomień w tle. Zanim włączysz te opcje, musisz najpierw utworzyć w projekcie link FCM-BiqQuery, zgodnie z opisem w sekcji Eksportowanie danych do BigQuery.

Włącz eksportowanie danych dostawy na potrzeby powiadomień o alertach

Tylko powiadomienia o alertach mogą wywoływać rozszerzenia aplikacji usługi powiadomień, dlatego aby włączyć śledzenie wiadomości wyświetlanych, musisz dodać do aplikacji rozszerzenie usługi powiadomień i wywołać ten interfejs API w rozszerzeniu usługi. Zapoznaj się z dokumentacją firmy Apple dotyczącą modyfikowania treści w nowo dostarczanych powiadomieniach.

Dla każdego otrzymanego powiadomienia należy wykonać następujące połączenie:

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

Jeśli tworzysz żądania wysyłania za pomocą interfejsu API HTTP w wersji 1, pamiętaj, by określić mutable-content = 1 w obiekcie ładunku.

Włącz eksport danych dostawy na potrzeby powiadomień w tle

W przypadku wiadomości w tle otrzymanych, gdy aplikacja działa na pierwszym planie lub w tle, możesz wywołać interfejs API eksportu danych w ramach modułu obsługi wiadomości z danymi głównej aplikacji. To połączenie musi być nawiązywane w przypadku każdego otrzymanego powiadomienia:

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

Jakie dane są eksportowane do BigQuery?

Pamiętaj, że kierowanie na nieaktualne tokeny lub nieaktywne rejestracje może zawyżać niektóre z tych statystyk.

Schemat wyeksportowanej tabeli:

_PARTITIONTIME SYGNATURA CZASOWA Ta pseudokolumna zawiera sygnaturę czasową początku dnia (w czasie UTC), w którym wczytano dane. W przypadku partycji RRRRMMDD ta pseudokolumna zawiera wartość TIMESTAMP('RRRR-MM-DD').
event_timestamp SYGNATURA CZASOWA Sygnatura czasowa zdarzenia zarejestrowana przez serwer
numer_projektu LICZBA CAŁKOWITA Numer projektu identyfikuje projekt, który wysłał wiadomość.
message_id CIĄG ZNAKÓW Identyfikator wiadomości określa jej treść. W niektórych przypadkach identyfikator wiadomości, wygenerowany na podstawie identyfikatora aplikacji i sygnatury czasowej, nie jest unikalny globalnie.
identyfikator_instancji CIĄG ZNAKÓW Unikalny identyfikator aplikacji, do której została wysłana wiadomość (jeśli jest dostępny). Może to być identyfikator instancji lub identyfikator instalacji Firebase.
message_type CIĄG ZNAKÓW Typ wiadomości. Może to być Wiadomość z powiadomieniem lub Wiadomość z danymi. Temat służy do identyfikowania oryginalnej wiadomości związanej z tematem lub wiadomością związaną z kampanią. Kolejne wiadomości są albo powiadomieniami, albo wiadomościami zawierającymi dane.
sdk_platform CIĄG ZNAKÓW Platforma aplikacji odbiorcy
nazwa_aplikacji CIĄG ZNAKÓW Nazwa pakietu aplikacji na Androida lub identyfikator pakietu w przypadku aplikacji na iOS
klucz_zwinięcia CIĄG ZNAKÓW Klucz zwijania określa grupę wiadomości, które można zwinąć. Gdy urządzenie nie jest połączone, w kolejce do dostarczenia jest tylko ostatnia wiadomość z danym kluczem zwijania
rekrutacja priorytetowa LICZBA CAŁKOWITA Priorytet wiadomości. Prawidłowe wartości to „normal” (normalny) i „high”. W systemie iOS odpowiadają one priorytetom APNs 5 i 10.
TTL LICZBA CAŁKOWITA Ten parametr określa czas (w sekundach), przez jaki wiadomość ma być przechowywana w pamięci FCM, gdy urządzenie jest offline
temat CIĄG ZNAKÓW Nazwa tematu, do którego została wysłana wiadomość (jeśli dotyczy)
identyfikator_zbiorczy LICZBA CAŁKOWITA Identyfikator zbiorczy identyfikuje grupę powiązanych wiadomości, np. konkretne wysłanie do tematu.
event CIĄG ZNAKÓW Typ zdarzenia. Możliwe wartości:
  • MESSAGE_ACCEPTED: wiadomość została odebrana przez serwer FCM i żądanie jest prawidłowe;
  • MESSAGE_DELIVERED: wiadomość została dostarczona do pakietu FCM SDK aplikacji na urządzeniu. Domyślnie to pole nie jest rozpowszechniane. Aby włączyć tę funkcję, wykonaj czynności opisane w artykule setDeliveryMetricsExportToBigQuery(boolean).
  • MISSING_REGISTRATIONS: prośba została odrzucona z powodu braku rejestracji;
  • UNAUTHORIZED_REGISTRATION: wiadomość została odrzucona, ponieważ nadawca nie jest upoważniony do wysłania wiadomości do rejestracji.
  • MESSAGE_RECEIVED_INTERNAL_ERROR: podczas przetwarzania żądania wiadomości wystąpił nieokreślony błąd;
  • MISMATCH_SENDER_ID: żądanie wysłania wiadomości zostało odrzucone z powodu niezgodności między identyfikatorem nadawcy wysyłającym wiadomość a identyfikatorem zadeklarowanym dla punktu końcowego;
  • QUOTA_EXCEEDED: żądanie wysłania wiadomości zostało odrzucone z powodu niewystarczającego limitu;
  • INVALID_REGISTRATION: żądanie wysłania wiadomości zostało odrzucone z powodu nieprawidłowej rejestracji.
  • INVALID_PACKAGE_NAME: prośba o wysłanie wiadomości została odrzucona z powodu nieprawidłowej nazwy pakietu;
  • INVALID_APNS_CREDENTIAL: żądanie wysłania wiadomości zostało odrzucone ze względu na nieprawidłowy certyfikat APNS;
  • INVALID_PARAMETERS: żądanie wysłania wiadomości zostało odrzucone z powodu nieprawidłowych parametrów;
  • PAYLOAD_TOO_LARGE: żądanie wysłania wiadomości zostało odrzucone z powodu ładunku przekraczającego limit;
  • AUTHENTICATION_ERROR: żądanie wysłania wiadomości zostało odrzucone z powodu błędu uwierzytelniania (sprawdź klucz interfejsu API użyty do wysłania wiadomości);
  • INVALID_TTL: żądanie wysłania wiadomości zostało odrzucone z powodu nieprawidłowej wartości TTL.
etykieta_analityki CIĄG ZNAKÓW Interfejs HTTP v1 API umożliwia ustawienie etykiety Analytics podczas wysyłania wiadomości w celu jej oznaczenia na potrzeby statystyk

Co można zrobić z wyeksportowanymi danymi?

W sekcjach poniżej znajdziesz przykłady zapytań, które możesz wykonać w BigQuery na podstawie wyeksportowanych danych z FCM.

Liczba wysłanych wiadomości według aplikacji

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;

Liczba unikalnych instancji aplikacji, których dotyczą wiadomości

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

Licznik wysłanych powiadomień

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

Zliczanie wysłanych wiadomości z danymi

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

Zliczanie wiadomości wysłanych do tematu lub kampanii

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

Aby śledzić zdarzenia dotyczące wiadomości wysyłanej do określonego tematu, zmodyfikuj to zapytanie, tak aby zastąpić AND message_id != '' ciągiem AND message_id = <your message id>;.

Oblicz czas zwielokrotnienia dla danego tematu lub kampanii

Godzina rozpoczęcia zwielokrotnienia to czas otrzymania pierwotnego żądania, a czas zakończenia to czas utworzenia ostatniej pojedynczej wiadomości kierowanej na pojedynczą instancję.

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;

Liczba dostarczonych wiadomości

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;

Śledzenie wszystkich zdarzeń związanych z danym identyfikatorem wiadomości i identyfikatorem instancji

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;

Czas oczekiwania obliczony dla danego identyfikatora wiadomości i identyfikatora instancji

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;