FCM udostępnia trzy zestawy narzędzi, które pomogą Ci uzyskać wgląd w dostarczanie wiadomości:
- Raporty dostarczenia wiadomości konsoli Firebase
- Zagregowane wskaźniki dostarczania pakietu Android SDK z interfejsu Firebase Cloud Messaging Data API
- Kompleksowy eksport danych do Google BigQuery
Wszystkie narzędzia do raportowania opisane na tej stronie wymagają Google Analytics do działania. Jeśli w Twoim projekcie nie jest włączona usługa Google Analytics, możesz ją skonfigurować na karcie Integracje w ustawieniach projektu Firebase.
Należy pamiętać, że raportowanie wielu statystyk na tej stronie może być opóźnione do 24 godzin ze względu na grupowanie danych analitycznych.
Raporty doręczenia wiadomości
Na karcie Raporty w konsoli Firebase możesz wyświetlić następujące dane dotyczące wiadomości wysyłanych do zestawów SDK FCM platformy Android lub Apple, w tym wiadomości wysyłanych za pośrednictwem narzędzia do tworzenia powiadomień i interfejsów API FCM:
- Wysyła — wiadomość z danymi lub powiadomienie została umieszczona w kolejce do dostarczenia lub została pomyślnie przekazana do usługi innej firmy, takiej jak APN, w celu dostarczenia. Aby uzyskać więcej informacji, zobacz czas życia wiadomości .
- Otrzymano (dostępne tylko na urządzeniach z systemem Android) — aplikacja odebrała wiadomość z danymi lub powiadomienie. Dane te są dostępne, jeśli na odbierającym urządzeniu z systemem Android zainstalowano FCM SDK 18.0.1 lub nowszy.
- Wyświetlenia (dostępne tylko w przypadku wiadomości powiadomień na urządzeniach z systemem Android) — powiadomienie na wyświetlaczu zostało wyświetlone na urządzeniu, gdy aplikacja działała w tle.
- Otwiera — użytkownik otworzył wiadomość z powiadomieniem. Zgłaszane tylko w przypadku powiadomień otrzymanych, gdy aplikacja działa w tle.
Dane te są dostępne dla wszystkich wiadomości z ładunkiem powiadomień i wszystkich wiadomości z danymi oznaczonych etykietą . Aby dowiedzieć się więcej o etykietach, zobacz Dodawanie etykiet analitycznych do wiadomości .
Przeglądając raporty wiadomości, możesz ustawić zakres dat wyświetlanych danych, z możliwością eksportu do pliku CSV. Możesz także filtrować według tych kryteriów:
- Platforma (iOS lub Android)
- Aplikacja
- Niestandardowe etykiety analityczne
Dodawanie etykiet analitycznych do wiadomości
Etykietowanie wiadomości jest bardzo przydatne do niestandardowych analiz, umożliwiając filtrowanie statystyk dostaw według etykiet lub zestawów etykiet. Możesz dodać etykietę do dowolnej wiadomości wysłanej poprzez API HTTP v1, ustawiając pole fcmOptions.analyticsLabel
w obiekcie wiadomości lub w specyficznych dla platformy polach AndroidFcmOptions
lub ApnsFcmOptions
.
Etykiety Analytics to ciągi tekstowe w formacie ^[a-zA-Z0-9-_.~%]{1,50}$
. Etykiety mogą zawierać małe i wielkie litery, cyfry oraz następujące symbole:
-
-
-
~
-
%
Maksymalna długość to 50 znaków. Możesz określić do 100 unikalnych etykiet dziennie; wiadomości z etykietami dodanymi powyżej tego limitu 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 w celu filtrowania wyświetlanych statystyk.
Zagregowane dane dotyczące dostawy za pośrednictwem interfejsu API danych FCM
Interfejs Firebase Cloud Messaging Data API umożliwia pobieranie informacji, które mogą pomóc w zrozumieniu wyników żądań wiadomości kierowanych do aplikacji na Androida. Interfejs API udostępnia zagregowane dane ze wszystkich urządzeń z systemem Android obsługujących zbieranie danych w projekcie. Obejmuje to szczegółowe informacje na temat odsetka wiadomości dostarczonych bez opóźnień, a także liczby wiadomości opóźnionych lub porzuconych w warstwie transportowej Androida . Ocena tych danych może ujawnić ogólne trendy w dostarczaniu wiadomości i pomóc w znalezieniu skutecznych sposobów poprawy wydajności żądań wysłania. Informacje o dostępności zakresów dat w raportach można znaleźć w artykule Osie czasu danych zbiorczych .
API udostępnia wszystkie dane dostępne dla danej aplikacji. Zobacz dokumentację referencyjną API .
Jak rozkładają się dane?
Dane dotyczące dostawy są podzielone według aplikacji, daty i etykiety analitycznej . Wywołanie interfejsu API zwróci dane dla każdej kombinacji daty, aplikacji i etykiety analitycznej. Na przykład pojedynczy obiekt androidDeliveryData
JSON będzie wyglądał następująco:
{
"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ć metryki
Dane o dostawie określają odsetek wiadomości spełniających poniższe kryteria. Możliwe jest, że pojedyncza wiadomość pasuje do wielu wskaźników. Ze względu na ograniczenia w sposobie gromadzenia danych i poziomie szczegółowości, na jakim zagregowaliśmy metryki, niektóre wyniki komunikatów w ogóle nie są reprezentowane w metrykach, dlatego poniższe wartości procentowe nie sumują się do 100%.
Liczba zaakceptowanych wiadomości
Jedyna liczba zawarta w zbiorze danych to liczba wiadomości, które zostały zaakceptowane 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 kierowanych do użytkowników, którzy wyłączyli zbieranie informacji o użytkowaniu i diagnostyce na swoich urządzeniach.
Procenty wyników wiadomości
Pola zawarte w obiekcie MessageOutcomePercents
dostarczają informacji o wynikach żądań wiadomości. Wszystkie te kategorie wzajemnie się wykluczają. Może odpowiadać na pytania takie jak „Czy moje wiadomości zostały dostarczone?” i „Co powoduje odrzucanie wiadomości?”
Na przykład wysoka wartość pola droppedTooManyPendingMessages
może sygnalizować, że instancje aplikacji odbierają liczbę niezwijanych wiadomości przekraczającą limit 100 oczekujących wiadomości FCM. Aby temu zaradzić, upewnij się, że Twoja aplikacja obsługuje wywołania onDeletedMessages
i rozważ wysyłanie zwijanych wiadomości. Podobnie wysokie wartości procentowe dla droppedDeviceInactive
mogą być sygnałem do aktualizacji tokenów rejestracyjnych na serwerze, usunięcia nieaktualnych tokenów i wyrejestrowania ich z tematów. Zobacz Zarządzanie tokenami rejestracji FCM, aby zapoznać się z najlepszymi praktykami w tym obszarze.
Procenty wydajności dostawy
Pola w obiekcie DeliveryPerformancePercents
dostarczają informacji o pomyślnie dostarczonych wiadomościach. Może 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ść delayedMessageThrottled
wyraźnie wskazywałaby, że przekraczasz maksymalne limity na urządzenie i powinna dostosować szybkość wysyłania wiadomości.
Procenty wglądu w wiadomości
Obiekt ten dostarcza dodatkowych informacji o wszystkich wysłanych wiadomościach. priorityLowered
wyraża procent zaakceptowanych wiadomości, których priorytet został obniżony z HIGH
do NORMAL
. Jeśli ta wartość jest wysoka, spróbuj wysłać mniej wiadomości o wysokim priorytecie lub upewnij się, że zawsze wyświetlasz powiadomienie, gdy wiadomość o wysokim priorytecie zostanie wysłana. Więcej informacji znajdziesz w naszej dokumentacji dotyczącej priorytetu wiadomości
Czym te dane różnią się od danych eksportowanych do BigQuery?
Eksport BigQuery udostępnia indywidualne dzienniki wiadomości dotyczące akceptacji wiadomości przez backend FCM i dostarczenia wiadomości w pakiecie SDK na urządzeniu (kroki 2 i 4 architektury FCM ). Dane te są przydatne do zapewnienia, że poszczególne wiadomości zostały zaakceptowane i dostarczone. Więcej o eksporcie danych BigQuery przeczytasz w następnej sekcji.
Z kolei interfejs Firebase Cloud Messaging Data API zapewnia zagregowane szczegółowe informacje o tym, co dzieje się konkretnie w warstwie transportowej Androida (lub kroku 3 architektury FCM ). Dane te w szczególności zapewniają wgląd w dostarczanie komunikatów z zaplecza FCM do zestawu SDK systemu Android. Jest to szczególnie przydatne do pokazywania trendów wyjaśniających, dlaczego wiadomości zostały opóźnione lub porzucone podczas transportu.
W niektórych przypadkach możliwe jest, że te dwa zestawy danych mogą nie być dokładnie zgodne z następującymi przyczynami:
- Zagregowane dane obejmują tylko część wszystkich wiadomości
- Zagregowane dane są zaokrąglane
- Nie prezentujemy wskaźników poniżej progu prywatności
- Brakuje części wyników wiadomości ze względu na optymalizację zarządzania dużym natężeniem ruchu.
Ograniczenia API
Osie czasu danych zbiorczych
API zwróci dane historyczne z 7 dni; jednakże dane zwrócone przez to API będą opóźnione do 5 dni. Na przykład w dniu 20 stycznia dostępne będą dane za okres 9–15 stycznia, ale nie za dzień 16 stycznia i później. Ponadto dane są dostarczane z należytą starannością. W przypadku awarii danych FCM będzie pracować nad naprawieniem problemu i nie będzie uzupełniać danych po rozwiązaniu problemu. W przypadku większych awarii dane mogą być niedostępne przez tydzień lub dłużej.
Zasięg danych
Metryki udostępniane przez interfejs Firebase Cloud Messaging Data API mają na celu zapewnienie wglądu w ogólne trendy w dostarczaniu wiadomości. Nie zapewniają one jednak 100% pokrycia wszystkich scenariuszy komunikatów. Poniższe scenariusze to znane wyniki, które nie są odzwierciedlone w metrykach.
Zwinięte wiadomości
Wiadomości zwinięte przez inną wiadomość nie pojawiają się w zbiorze danych.
Wiadomości do nieaktywnych urządzeń
Wiadomości wysyłane do nieaktywnych urządzeń mogą, ale nie muszą, pojawiać się w zbiorze danych, w zależności od ścieżki danych, którą podążają. Może to prowadzić do błędnego zliczenia w polach droppedDeviceInactive
i pending
.
Wiadomości do urządzeń z określonymi preferencjami użytkownika
Użytkownicy, którzy wyłączyli zbieranie informacji użytkowych i diagnostycznych na swoich urządzeniach, nie będą uwzględniani w naszym zliczaniu, zgodnie z ich preferencjami.
Zaokrąglanie i minimum
FCM celowo zaokrągla i wyklucza zliczenia, gdy wolumeny nie są wystarczająco duże.
Eksport danych BigQuery
Możesz wyeksportować dane wiadomości do BigQuery w celu dalszej analizy. BigQuery pozwala analizować dane za pomocą BigQuery SQL, eksportować je do innego dostawcy usług w chmurze lub wykorzystywać dane do niestandardowych modeli uczenia maszynowego. Eksport do BigQuery obejmuje wszystkie dostępne dane wiadomości, niezależnie od ich typu oraz tego, czy wiadomość jest wysyłana przez API, czy przez narzędzie do tworzenia powiadomień.
W przypadku wiadomości wysyłanych na urządzenia z następującymi minimalnymi wersjami pakietu FCM SDK istnieje dodatkowa opcja włączenia eksportu danych o dostarczeniu wiadomości dla Twojej aplikacji:
- Android 20.1.0 lub nowszy.
- iOS 8.6.0 lub nowszy
- Firebase Web SDK 9.0.0 lub nowszy
Poniżej znajdziesz szczegółowe informacje na temat włączania eksportu danych dla systemów Android i iOS .
Aby rozpocząć, połącz swój projekt z BigQuery:
Wybierz jedną z następujących opcji:
Otwórz narzędzie do tworzenia powiadomień i kliknij Uzyskaj dostęp do BigQuery u dołu strony.
Na stronie Integracje w konsoli Firebase kliknij Link na karcie BigQuery .
Na tej stronie wyświetlane są opcje eksportu FCM dla wszystkich aplikacji w projekcie obsługujących FCM.
Postępuj zgodnie z instrukcjami wyświetlanymi na ekranie, aby włączyć BigQuery.
Więcej informacji znajdziesz w artykule Łączenie Firebase z BigQuery .
Po włączeniu eksportu BigQuery dla Wiadomości w chmurze:
Firebase eksportuje Twoje dane do BigQuery. Należy pamiętać, że początkowa propagacja danych do eksportu może zająć do 48 godzin.
- Możesz ręcznie zaplanować uzupełnianie danych na okres maksymalnie 30 dni.
Po utworzeniu zbioru danych lokalizacji nie można zmienić, ale można skopiować zbiór danych do innej lokalizacji lub ręcznie przenieść (odtworzyć) zbiór danych w innej lokalizacji. Aby dowiedzieć się więcej, zobacz temat Zmiana lokalizacji zbioru danych .
Firebase konfiguruje regularne synchronizacje Twoich danych z projektu Firebase z BigQuery. Te codzienne operacje eksportowe rozpoczynają się o 4:00 czasu pacyficznego i zwykle kończą w ciągu 24 godzin.
Domyślnie wszystkie aplikacje w Twoim projekcie są połączone z BigQuery, a wszystkie aplikacje, które później dodasz do projektu, zostaną automatycznie połączone z BigQuery. Możesz zarządzać, które aplikacje wysyłają dane .
Aby dezaktywować eksport BigQuery, odłącz swój projekt w konsoli Firebase.
Włącz eksport danych o dostarczeniu wiadomości
Urządzenia iOS z pakietem FCM SDK 8.6.0 lub nowszym mogą włączyć eksport danych dotyczących dostarczania wiadomości w swojej aplikacji. FCM obsługuje eksport danych zarówno dla alertów, jak i powiadomień w tle. Przed włączeniem tych opcji musisz najpierw utworzyć łącze FCM-BiqQuery dla swojego projektu zgodnie z opisem w sekcji Eksport danych BigQuery .
Włącz eksport danych o dostawie dla powiadomień o alertach
Ponieważ tylko powiadomienia o alertach mogą wyzwalać rozszerzenia aplikacji usługi powiadomień, musisz dodać rozszerzenie usługi powiadomień do swojej aplikacji i wywołać ten interfejs API w rozszerzeniu usługi, aby włączyć śledzenie komunikatów wyświetlanych. Zapoznaj się z dokumentacją firmy Apple dotyczącą modyfikowania treści w nowo dostarczonych powiadomieniach .
W przypadku każdego otrzymanego powiadomienia należy wykonać następujące wezwanie:
Szybki
// 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)
}
}
Cel 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 przy użyciu interfejsu API HTTP v1, pamiętaj o określeniu mutable-content = 1
w obiekcie ładunku .
Włącz eksport danych o dostawie dla powiadomień w tle
W przypadku wiadomości w tle odbieranych, gdy aplikacja znajduje się na pierwszym planie lub w tle, możesz wywołać interfejs API eksportu danych w procedurze obsługi wiadomości danych w głównej aplikacji. To wezwanie należy wykonać w przypadku każdego otrzymanego powiadomienia:
Szybki
// 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)
}
Cel 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?
Należy pamiętać, że celowanie w nieaktualne tokeny lub nieaktywne rejestracje może zawyżać niektóre z tych statystyk.
Schemat wyeksportowanej tabeli to:
_CZAS CZASÓW | ZNAK CZASU | Ta pseudokolumna zawiera znacznik czasu początku dnia (w formacie UTC), w którym dane zostały załadowane. W przypadku partycji RRRRMMDD ta pseudokolumna zawiera wartość TIMESTAMP('RRRR-MM-DD'). |
wydarzenie_znacznik czasu | ZNAK CZASU | Sygnatura czasowa zdarzenia zarejestrowana przez serwer |
numer projektu | LICZBA CAŁKOWITA | Numer projektu identyfikuje projekt, który wysłał wiadomość |
ID wiadomości | STRUNOWY | Identyfikator wiadomości identyfikuje wiadomość. Identyfikator wiadomości, wygenerowany na podstawie identyfikatora aplikacji i sygnatury czasowej, może w niektórych przypadkach nie być unikalny w skali globalnej. |
identyfikator_instancji | STRUNOWY | Unikalny identyfikator aplikacji, do której wysyłana jest wiadomość (jeśli jest dostępny). Może to być identyfikator instancji lub identyfikator instalacji Firebase. |
typ wiadomości | STRUNOWY | Typ wiadomości. Może to być wiadomość z powiadomieniem lub wiadomość z danymi. Temat służy do identyfikacji oryginalnej wiadomości wysłanej w ramach tematu lub kampanii; kolejne wiadomości są albo powiadomieniem, albo wiadomością z danymi. |
platforma_sdk | STRUNOWY | Platforma aplikacji odbiorcy |
Nazwa aplikacji | STRUNOWY | Nazwa pakietu dla aplikacji na Androida lub identyfikator pakietu dla aplikacji na iOS |
klucz_zwinięcia | STRUNOWY | Klawisz zwijania identyfikuje grupę wiadomości, które można zwinąć. Gdy urządzenie nie jest podłączone, w kolejce do ostatecznego dostarczenia czeka tylko ostatnia wiadomość z danym klawiszem zwinięcia |
priorytet | LICZBA CAŁKOWITA | Priorytet wiadomości. Prawidłowe wartości to „normalny” i „wysoki”. W systemie iOS odpowiadają one priorytetom APN 5 i 10 |
ttl | LICZBA CAŁKOWITA | Ten parametr określa, jak długo (w sekundach) wiadomość powinna być przechowywana w pamięci FCM, jeśli urządzenie jest w trybie offline |
temat | STRUNOWY | Nazwa tematu, na który została wysłana wiadomość (jeśli dotyczy) |
id_luzu | LICZBA CAŁKOWITA | Identyfikator zbiorczy identyfikuje grupę powiązanych wiadomości, na przykład konkretną wiadomość wysłaną do tematu |
wydarzenie | STRUNOWY | Rodzaj wydarzenia. Możliwe wartości to:
|
etykieta_analityczna | STRUNOWY | Dzięki interfejsowi API HTTP v1 etykietę analityczną można ustawić podczas wysyłania wiadomości, aby oznaczyć wiadomość do celów analitycznych |
Co możesz zrobić z wyeksportowanymi danymi?
W poniższych sekcjach znajdziesz przykłady zapytań, które możesz uruchomić w BigQuery na podstawie wyeksportowanych danych FCM.
Licz wysłane 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;
Zliczaj unikalne wystąpienia aplikacji, na które kierowane są 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';
Licz wysłane powiadomienia
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';
Licz wysłane wiadomości danych
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';
Zliczaj wiadomości wysłane na dany temat lub kampanię
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 dla wiadomości wysłanej na określony temat, zmodyfikuj to zapytanie, zastępując AND message_id != ''
AND message_id = <your message id>;
.
Oblicz czas trwania fanoutu dla danego tematu lub kampanii
Czas rozpoczęcia fanoutu to moment otrzymania pierwotnego żądania, a czas zakończenia to moment utworzenia ostatniej indywidualnej wiadomości skierowanej do pojedynczej instancji.
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;
Zlicz procent 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;
Śledź wszystkie zdarzenia dla danego identyfikatora wiadomości i identyfikatora 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;
Oblicz opóźnienie 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;