FCM zapewnia 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 Android SDK z Firebase Cloud Messaging Data API
- Kompleksowy eksport danych do Google BigQuery
Wszystkie narzędzia do raportowania opisane na tej stronie wymagają do działania usługi Google Analytics. Jeśli usługa Google Analytics nie jest włączona w Twoim projekcie, możesz ją skonfigurować na karcie integracji w ustawieniach projektu Firebase.
Należy pamiętać, że raportowanie wielu statystyk na tej stronie podlega opóźnieniom do 24 godzin z powodu grupowania danych analitycznych.
Raporty dostarczenia wiadomości
Na karcie Raporty w konsoli Firebase możesz przeglądać następujące dane dotyczące wiadomości wysyłanych do pakietów SDK FCM platformy Android lub Apple, w tym wiadomości wysyłanych za pośrednictwem narzędzia Notifications Composer i interfejsów API FCM:
- Wysyła — Wiadomość z danymi lub wiadomość z powiadomieniem została umieszczona w kolejce do dostarczenia lub została pomyślnie przekazana do usługi innej firmy, takiej jak APN w celu dostarczenia. Zobacz czas życia wiadomości , aby uzyskać więcej informacji.
- Odebrano (dostępne tylko na urządzeniach z systemem Android) — Wiadomość z danymi lub powiadomienie zostały odebrane przez aplikację. Te dane są dostępne, gdy odbierające urządzenie z Androidem ma zainstalowany zestaw FCM SDK 18.0.1 lub nowszy.
- Wyświetlenia (dostępne tylko dla powiadomień na urządzeniach z systemem Android) — Powiadomienie o wyświetlaniu zostało wyświetlone na urządzeniu, gdy aplikacja działa w tle.
- Otwiera — użytkownik otworzył wiadomość z powiadomieniem. Zgłaszane tylko w przypadku powiadomień otrzymanych, gdy aplikacja działa w tle.
Te dane są dostępne dla wszystkich komunikatów z ładunkiem powiadomienia i wszystkich komunikatów danych oznaczonych etykietą . Aby dowiedzieć się więcej o etykietach, zobacz Dodawanie etykiet analitycznych do wiadomości .
Podczas przeglądania raportów wiadomości możesz ustawić zakres dat dla wyświetlanych danych, z opcją 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 w przypadku analiz niestandardowych, umożliwiając filtrowanie statystyk dostarczania według etykiet lub zestawów etykiet. Możesz dodać etykietę do dowolnej wiadomości wysyłanej za pośrednictwem interfejsu HTTP v1 API, ustawiając pole fcmOptions.analyticsLabel
w obiekcie wiadomości lub w polach AndroidFcmOptions
lub ApnsFcmOptions
specyficznych dla platformy.
Etykiety Analytics to ciągi tekstowe w formacie ^[a-zA-Z0-9-_.~%]{1,50}$
. Etykiety mogą zawierać małe i duże 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 poza tym limitem nie są raportowane.
Na karcie Raporty dotyczące komunikatów konsoli Firebase możesz przeszukiwać listę wszystkich istniejących etykiet i stosować je pojedynczo lub łącznie, aby filtrować wyświetlane statystyki.
Zagregowane dane dostawy za pośrednictwem interfejsu API danych FCM
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 gromadzenie danych w projekcie. Obejmuje to szczegółowe informacje na temat odsetka wiadomości dostarczonych bez opóźnień oraz 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ń wysyłania. Zobacz Zagregowane osie czasu danych , aby uzyskać informacje o dostępności zakresu dat w raportach.
API udostępnia wszystkie dane dostępne dla danej aplikacji. Zobacz dokumentację referencyjną interfejsu API .
Jak podzielone są dane?
Dane 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 JSON androidDeliveryData
wyglądałby 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ć wskaźniki
Dane o dostarczaniu przedstawiają odsetek wiadomości, które pasują do każdego z poniższych wskaźników. Możliwe, że jedna wiadomość pasuje do wielu wskaźników. Ze względu na ograniczenia w sposobie gromadzenia danych i poziom szczegółowości, na jakim agregujemy dane, niektóre wyniki wiadomości nie są w ogóle reprezentowane w danych, więc poniższe wartości procentowe nie sumują się do 100%.
Policz wiadomości zaakceptowane
Jedyna liczba zawarta w zbiorze danych to liczba wiadomości, które zostały zaakceptowane przez FCM do dostarczenia na urządzenia z systemem Android. 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 gromadzenie informacji o użytkowaniu i informacji diagnostycznych na swoich urządzeniach.
Procent wyników wiadomości
Pola zawarte w obiekcie MessageOutcomePercents
dostarczają informacji o wynikach żądań wiadomości. Wszystkie kategorie wzajemnie się wykluczają. Może odpowiadać na pytania, takie jak „Czy moje wiadomości są dostarczane?” i „Co powoduje odrzucanie wiadomości?”
Na przykład wysoka wartość pola droppedTooManyPendingMessages
może sygnalizować, że instancje aplikacji odbierają woluminy wiadomości, których nie można zwijać, przekraczając limit FCM wynoszący 100 oczekujących wiadomości. 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 rejestracji na serwerze, usunięcia nieaktualnych tokenów i anulowania subskrypcji tematów. Zobacz Zarządzanie tokenami rejestracji FCM, aby zapoznać się z najlepszymi rozwiązaniami w tym obszarze.
Procent wydajności dostawy
Pola w obiekcie DeliveryPerformancePercents
zawierają informacje o wiadomościach, które zostały pomyślnie dostarczone. Może odpowiadać na pytania, takie jak „Czy moje wiadomości były opóźnione?” i „Dlaczego wiadomości są opóźnione?” Na przykład wysoka wartość parametru delayedMessageThrottled
wyraźnie wskazywałaby, że przekraczasz maksymalne limity na urządzenie i powinna dostosować szybkość wysyłania wiadomości.
Procent wglądu w wiadomości
Ten obiekt dostarcza dodatkowych informacji o wszystkich wysyłanych wiadomościach. Pole priorityLowered
wyraża procent zaakceptowanych wiadomości, które miały obniżony priorytet 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 o wysłaniu wiadomości o wysokim priorytecie. Więcej informacji znajdziesz w naszej dokumentacji dotyczącej priorytetu wiadomości
Czym różnią się te dane od danych wyeksportowanych do BigQuery?
Eksport BigQuery zapewnia 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 ). Te dane są przydatne do zapewnienia, że poszczególne wiadomości zostały zaakceptowane i dostarczone. Więcej informacji o eksporcie danych BigQuery znajdziesz w następnej sekcji.
Z kolei interfejs Firebase Cloud Messaging Data API zapewnia zbiorcze szczegółowe informacje o tym, co dzieje się konkretnie w warstwie transportowej Androida (lub w kroku 3 architektury FCM ). Te dane w szczególności zapewniają wgląd w dostarczanie komunikatów z backendów FCM do Android SDK. Jest to szczególnie przydatne do pokazywania trendów, dlaczego wiadomości były opóźniane lub odrzucane podczas tego transportu.
W niektórych przypadkach możliwe jest, że dwa zestawy danych mogą nie być dokładnie dopasowane z następujących powodów:
- Zagregowane dane dotyczą tylko części wszystkich wiadomości
- Zagregowane dane są zaokrąglane
- Nie przedstawiamy danych poniżej progu prywatności
- Brakuje części wyników wiadomości ze względu na optymalizację sposobu zarządzania dużym ruchem.
Ograniczenia API
Zagreguj osie czasu danych
API zwróci 7 dni danych historycznych; jednak dane zwrócone przez ten interfejs API będą opóźnione o maksymalnie 5 dni. Na przykład 20 stycznia dostępne będą dane za okres od 9 do 15 stycznia, ale nie za 16 stycznia lub później. Ponadto dane są dostarczane z największą starannością. W przypadku przerwy w transmisji danych FCM będzie pracować nad naprawą 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.
Zakres danych
Metryki dostarczane przez Firebase Cloud Messaging Data API mają zapewniać wgląd w ogólne trendy dostarczania wiadomości. Jednak nie zapewniają one 100% pokrycia wszystkich scenariuszy wiadomości. Następujące scenariusze to znane wyniki, które nie są odzwierciedlone w metrykach.
Zwinięte wiadomości
Wiadomości, które zostały 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ą pojawiać się w zbiorze danych lub nie, w zależności od wybranej ścieżki danych. Może to prowadzić do błędnego zliczania w polach droppedDeviceInactive
i pending
.
Wiadomości do urządzeń o określonych preferencjach użytkownika
Użytkownicy, którzy wyłączyli zbieranie informacji o użytkowaniu i informacje diagnostyczne na swoich urządzeniach, nie będą uwzględniać ich wiadomości zgodnie z ich preferencjami.
Zaokrąglanie i minima
FCM celowo zaokrągla i wyklucza zliczenia tam, gdzie wolumeny nie są wystarczająco duże.
Eksport danych BigQuery
Możesz wyeksportować dane wiadomości do BigQuery w celu dalszej analizy. BigQuery umożliwia analizowanie danych za pomocą BigQuery SQL, eksportowanie ich do innego dostawcy usług w chmurze lub wykorzystywanie danych w niestandardowych modelach uczenia maszynowego. Eksport do BigQuery obejmuje wszystkie dostępne dane dotyczące wiadomości, niezależnie od typu wiadomości oraz tego, czy wiadomość została wysłana przez interfejs API czy kompozytora powiadomień.
W przypadku wiadomości wysyłanych na urządzenia z następującymi minimalnymi wersjami pakietu FCM SDK masz dodatkową opcję umożliwiającą eksportowanie danych dostarczania 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 Androida i iOS .
Aby rozpocząć, połącz swój projekt z BigQuery:
Wybierz jedną z następujących opcji:
Otwórz kompozytora powiadomień , a następnie kliknij Uzyskaj dostęp do BigQuery u dołu strony.
Na stronie Integracje w konsoli Firebase kliknij Link na karcie BigQuery .
Ta strona wyświetla opcje eksportu FCM dla wszystkich aplikacji obsługujących FCM w projekcie.
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 eksport BigQuery do Cloud Messaging:
Firebase eksportuje Twoje dane do BigQuery. Należy pamiętać, że początkowa propagacja danych do wyeksportowania może potrwać do 48 godzin.
- Możesz ręcznie zaplanować uzupełnianie danych z maksymalnie ostatnich 30 dni.
Po utworzeniu zestawu danych nie można zmienić lokalizacji, ale można skopiować zestaw danych do innej lokalizacji lub ręcznie przenieść (utworzyć ponownie) zestaw danych w innej lokalizacji. Aby dowiedzieć się więcej, zobacz Zmiana lokalizacji zestawu 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ą się 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 dostarczania wiadomości
Urządzenia z systemem iOS z pakietem FCM SDK 8.6.0 lub nowszym mogą włączyć eksport danych dostarczania wiadomości z aplikacji. FCM obsługuje eksport danych zarówno dla powiadomień o alertach, jak i powiadomień w tle. Zanim włączysz te opcje, musisz najpierw utworzyć połączenie FCM-BiqQuery dla swojego projektu zgodnie z opisem w Eksport danych BigQuery .
Włącz eksport danych dostawy 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. Zobacz dokumentację firmy Apple dotyczącą modyfikowania treści w nowo dostarczonych powiadomieniach .
W przypadku każdego otrzymanego powiadomienia należy wykonać następujące połączenie:
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 HTTP v1 API, pamiętaj o określeniu mutable-content = 1
w obiekcie payload .
Włącz eksport danych dostawy dla powiadomień w tle
W przypadku komunikatów w tle otrzymanych, gdy aplikacja działa na pierwszym planie lub w tle, można wywołać interfejs API eksportu danych w programie obsługi komunikatów danych głównej aplikacji. To połączenie należy wykonać dla 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?
Pamiętaj, że celowanie w nieaktualne tokeny lub nieaktywne rejestracje może zawyżać niektóre z tych statystyk.
Schemat wyeksportowanej tabeli to:
_CZASPARTYCJI | ZNAK CZASU | Ta pseudokolumna zawiera znacznik czasu początku dnia (w UTC), w którym dane zostały załadowane. W przypadku partycji RRRRMMDD ta pseudokolumna zawiera wartość TIMESTAMP('RRRR-MM-DD'). |
znacznik_czasu zdarzenia | 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ść. Wygenerowany na podstawie identyfikatora aplikacji i sygnatury czasowej identyfikator wiadomości może w niektórych przypadkach nie być unikatowy w skali globalnej. |
identyfikator_instancji | STRUNOWY | Unikalny identyfikator aplikacji, do której jest wysyłana 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 dla tematu lub kampanii; kolejne komunikaty są albo powiadomieniem, albo komunikatem z danymi. |
platforma_sdk | STRUNOWY | Platforma aplikacji odbiorcy |
Nazwa aplikacji | STRUNOWY | Nazwa pakietu dla aplikacji na Androida lub identyfikator pakietu dla aplikacji na iOS |
zwiń_klucz | STRUNOWY | Klucz zwijania identyfikuje grupę wiadomości, które można zwinąć. Gdy urządzenie nie jest podłączone, tylko ostatnia wiadomość z danym kluczem zwijania jest umieszczana w kolejce do ostatecznego dostarczenia |
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, do którego została wysłana wiadomość (jeśli dotyczy) |
identyfikator_zbiorczy | LICZBA CAŁKOWITA | Identyfikator zbiorczy identyfikuje grupę powiązanych wiadomości, na przykład określoną wysyłkę do tematu |
wydarzenie | STRUNOWY | Typ zdarzenia. Możliwe wartości to:
|
etykieta_analityczna | STRUNOWY | Dzięki interfejsowi HTTP v1 API można ustawić etykietę analityczną 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 względem wyeksportowanych danych FCM.
Policz 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;
Policz 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';
Wysłano wiadomości z powiadomieniami o liczeniu
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';
Zlicz wysłane 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';
Zliczaj wiadomości wysłane 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 wysłanej do określonego tematu, zmodyfikuj to zapytanie, zastępując AND message_id != ''
przez 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 czas utworzenia ostatniej indywidualnej wiadomości kierowanej 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;
Policz 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 komunikatu 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;