Informacje na temat dostarczania wiadomości

Aby rozwiązać problemy z dostarczaniem wiadomości, użyj narzędzia do rozwiązywania problemów z FCM i zapoznaj się z tym postem na blogu, aby poznać różne przyczyny, dla których możesz nie widzieć swojej wiadomości. Możesz też sprawdzić na panelu stanu FCM, czy nie występują obecnie przerwy w działaniu usługi FCM.

FCM udostępnia też 3 zestawy narzędzi, które pomagają uzyskać ogólne statystyki o skuteczności przesyłania wiadomości i strategii:

  • Raporty o dostarczeniu wiadomości z konsoli Firebase
  • Zbiorcze dane o wyświetlaniu z interfejsu Firebase Cloud Messaging Data API dotyczące pakietu Android SDK
  • Kompleksowy eksport danych do Google BigQuery

Eksportowanie danych do BigQuery i karta Raporty w konsoli Firebase wymagają do działania Google Analytics. Możesz włączyć Google Analytics w konsoli Firebase na karcie Ustawienia > Integracje. Zbiorcze dane o wyświetlaniu nie wymagają do działania Google Analytics.

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

Raporty Dostarczanie wiadomości

W Firebase konsoli otwórz DevOps i zaangażowanie > Wiadomości > karta Raporty, aby wyświetlić te dane dotyczące wiadomości wysłanych do pakietów SDK FCM na platformy Android i Apple, w tym wiadomości wysłanych za pomocą narzędzia do tworzenia powiadomień i interfejsów API FCM:

  • Wysłane – wiadomość z danymi lub powiadomienie zostało umieszczone w kolejce do dostarczenia lub zostało przekazane do usługi innej firmy, np. APNs, w celu dostarczenia. Pamiętaj, że statystyki wysyłania mogą być opóźnione o kilka godzin. Więcej informacji znajdziesz w sekcji Czas życia wiadomości.
  • Odebrano (dostępne tylko na urządzeniach z Androidem) – aplikacja odebrała wiadomość z danymi lub powiadomienie. Te dane są dostępne, gdy na urządzeniu z Androidem, które odbiera wiadomość, jest zainstalowany pakiet SDK FCM w wersji 18.0.1 lub nowszej.
  • Wyświetlenia (dostępne tylko w przypadku powiadomień na urządzeniach z Androidem) – powiadomienie zostało wyświetlone na urządzeniu, gdy aplikacja działała w tle.
  • Otwarcie – użytkownik otworzył wiadomość z powiadomieniem. Raportowane tylko w przypadku powiadomień otrzymanych, gdy aplikacja działa w tle.

Te dane są dostępne w przypadku wszystkich wiadomości z ładunkiem powiadomienia i wszystkich oznaczonych etykietą wiadomości z danymi. Więcej informacji o etykietach znajdziesz w artykule Dodawanie etykiet analitycznych do wiadomości.

Podczas wyświetlania raportów wiadomości możesz ustawić zakres dat dla wyświetlanych danych z opcją eksportu do pliku CSV. Możesz też filtrować według tych kryteriów:

  • Platforma (iOS lub Android)
  • Aplikacja
  • Etykiety niestandardowych statystyk

Dodawanie etykiet analitycznych do wiadomości

Etykietowanie wiadomości jest bardzo przydatne w przypadku analizy niestandardowej, ponieważ umożliwia filtrowanie statystyk dostarczania według etykiet lub zestawów etykiet. Możesz dodać etykietę do dowolnej wiadomości wysłanej za pomocą interfejsu HTTP v1 API, ustawiając pole fcmOptions.analyticsLabel w obiekcie message lub w polach AndroidFcmOptions lub ApnsFcmOptions dla konkretnej platformy.

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ć maksymalnie 100 unikalnych etykiet dziennie. Wiadomości z etykietami dodanymi po przekroczeniu tego limitu nie są uwzględniane w raportach.

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

Zbiorcze dane o dostawie przy użyciu interfejsu FCM Data API

Interfejs Komunikacja w chmurze Firebase (FCM) Data API umożliwia pobieranie informacji, które mogą pomóc Ci zrozumieć wyniki żądań wiadomości kierowanych do aplikacji na Androida. Interfejs API udostępnia dane zbiorcze ze wszystkich urządzeń z Androidem w projekcie, na których włączone jest zbieranie danych. Obejmuje to informacje o odsetku wiadomości dostarczonych bez opóźnień oraz o liczbie wiadomości, które zostały opóźnione lub odrzucone w warstwie transportowej Androida. Analiza tych danych może ujawnić ogólne trendy w dostarczaniu wiadomości i pomóc Ci znaleźć skuteczne sposoby na zwiększenie skuteczności wysyłanych próśb. Informacje o dostępności zakresów dat w raportach znajdziesz w sekcji Oś czasu danych zbiorczych.

Interfejs API udostępnia wszystkie dane dostępne w przypadku danej aplikacji. Zapoznaj się z dokumentacją interfejsu API.

Jak są podzielone dane?

Dane o dostarczaniu są podzielone według aplikacji, daty i etykiety Analytics. 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
    }
  }

Interpretacja danych

Dane o dostarczaniu zawierają odsetek wiadomości, które pasują do poszczególnych danych. Możliwe, że jedna wiadomość pasuje do kilku danych. Ze względu na ograniczenia dotyczące sposobu zbierania danych i poziomu szczegółowości, na którym agregujemy dane, niektóre wyniki wiadomości nie są w ogóle uwzględniane w danych, więc podane niżej wartości procentowe nie sumują się do 100%.

Liczba zaakceptowanych wiadomości

Jedyna liczba uwzględniona w zbiorze danych to liczba wiadomości, które zostały zaakceptowane przez FCM do 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 diagnostycznych na swoich urządzeniach.

Odsetki wyników wiadomości

Pola w obiekcie MessageOutcomePercents zawierają informacje 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ść w polu droppedTooManyPendingMessages może oznaczać, że instancje aplikacji otrzymują liczbę wiadomości niezwijanych przekraczającą limit 100 oczekujących wiadomości w usłudze FCM. Aby temu zapobiec, zadbaj o to, aby aplikacja obsługiwała wywołania funkcji onDeletedMessages i rozważ wysyłanie zwijalnych wiadomości. Podobnie wysokie wartości procentowe dla droppedDeviceInactive mogą być sygnałem, że należy zaktualizować tokeny rejestracji na serwerze, usunąć nieaktualne tokeny i anulować ich subskrypcję tematów. Więcej informacji o sprawdzonych metodach znajdziesz w artykule Zarządzanie tokenami rejestracji FCM.

Odsetki wydajności dostawy

Pola w obiekcie DeliveryPerformancePercents zawierają informacje o wiadomościach, które zostały 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 wskazuje, że przekraczasz maksymalne limity na urządzenie i powinieneś(-aś) dostosować częstotliwość wysyłania wiadomości.

Wartości procentowe statystyk wiadomości

Ten obiekt zawiera dodatkowe informacje o wszystkich wysł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 upewnij się, że za każdym razem, gdy wysyłana jest wiadomość o wysokim priorytecie, wyświetlane jest powiadomienie. 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 dzienniki poszczególnych wiadomości dotyczące akceptacji wiadomości przez backend FCM i dostarczania wiadomości w pakiecie SDK na urządzeniu (kroki 2 i 4 architektury FCM). Te dane są przydatne do sprawdzania, czy poszczególne wiadomości zostały zaakceptowane i dostarczone. Więcej informacji o eksportowaniu danych do BigQuery znajdziesz w następnej sekcji.

Z kolei interfejs Firebase Cloud Messaging Data API udostępnia zbiorcze informacje o tym, co dzieje się w warstwie transportowej Androida (czyli w kroku 3 architektury FCM). Te dane zawierają statystyki dotyczące dostarczania wiadomości z backendów FCM do pakietu Android SDK. Jest to szczególnie przydatne do pokazywania trendów dotyczących przyczyn opóźnień lub odrzucenia wiadomości podczas tego transportu.

W niektórych przypadkach te 2 zbiory danych mogą się nie pokrywać dokładnie z tych powodów:

  • Zgromadzone dane obejmują tylko próbkę wszystkich wiadomości.
  • Dane zbiorcze są zaokrąglane.
  • Nie wyświetlamy danych poniżej progu prywatności
  • Część wyników wiadomości jest niedostępna z powodu optymalizacji sposobu zarządzania dużym ruchem.

Ograniczenia interfejsu API

Oś czasu danych zbiorczych

Interfejs API zwraca dane historyczne z 7 dni, ale dane zwracane przez ten interfejs API będą opóźnione o maksymalnie 5 dni. Na przykład 20 stycznia dostępne będą dane z okresu 9–15 stycznia, ale nie z okresu od 16 stycznia. Dodatkowo dane są dostarczane z możliwie największą dokładnością. W przypadku awarii danych FCM podejmie działania, aby rozwiązać problem, ale nie uzupełni danych po jego usunięciu. W przypadku większych awarii dane mogą być niedostępne przez tydzień lub dłużej.

Zakres danych

Dane dostarczane przez interfejs Firebase Cloud Messaging Data API mają na celu zapewnienie wglądu w ogólne trendy dotyczące dostarczania wiadomości. Nie zapewniają one jednak 100% pokrycia wszystkich scenariuszy wyświetlania wiadomości. Poniższe scenariusze to znane wyniki, które nie są odzwierciedlane w danych.

Wygasłe wiadomości

Jeśli czas TTL wygaśnie po zakończeniu danego dnia, wiadomość nie zostanie uwzględniona w dzienniku jako droppedTtlExpired w tym dniu.

Wiadomości na nieaktywne urządzenia

Wiadomości wysyłane na nieaktywne urządzenia mogą, ale nie muszą, pojawiać się w zbiorze danych w zależności od tego, którą ścieżką danych się przemieszczają. Może to prowadzić do błędów w zliczaniu w polach droppedDeviceInactive i pending.

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

Wiadomości od użytkowników, którzy wyłączyli zbieranie informacji o użytkowaniu i diagnostyce na swoich urządzeniach, nie będą uwzględniane w naszych obliczeniach, zgodnie z ich preferencjami.

Zaokrąglanie i wartości minimalne

FCM celowo zaokrągla i wyklucza liczby, gdy wolumeny nie są wystarczająco duże.

Eksportowanie danych z BigQuery

Możesz wyeksportować dane wiadomości do BigQuery, aby przeprowadzić dalszą analizę. BigQuery umożliwia analizowanie danych za pomocą BigQuery SQL, eksportowanie ich do innego dostawcy chmury lub używanie ich w niestandardowych modelach ML. Eksport do BigQuery obejmuje wszystkie dostępne dane dotyczące wiadomości, niezależnie od ich typu i tego, czy zostały wysłane za pomocą interfejsu API czy Kreatora powiadomień.

W przypadku wiadomości wysyłanych na urządzenia z minimalną wersją pakietu SDK FCM masz dodatkową opcję włączenia eksportu danych o dostarczaniu wiadomości w aplikacji:

  • Androida w wersji 20.1.0 lub nowszej.
  • iOS w wersji 8.6.0 lub nowszej,
  • Pakiet SDK Firebase dla aplikacji internetowych w wersji 12.14.0 lub nowszej

Aby rozpocząć, połącz projekt z BigQuery za pomocą konsoli Firebase:

  1. Wybierz jedną z tych opcji:

    • Otwórz DevOps i zaangażowanie > Komunikacja > Kreator powiadomień, a następnie u dołu strony kliknij Uzyskaj dostęp do BigQuery.

    • Otwórz Ustawienia > Integracje. Następnie w sekcji BigQuery kliknij Połącz.

      Na tej stronie wyświetlane są FCMopcje eksportu dla wszystkichFCM aplikacji w projekcie, w których włączono tę funkcję.

  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 z usługi BigQuery do Cloud Messaging:

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

  • Gdy zostanie on utworzony, jego lokalizacji nie można już zmienić. Możesz natomiast skopiować zbiór danych do innej lokalizacji lub go ręcznie przenieść przez ponowne utworzenie tego zbioru w innej lokalizacji. Więcej informacji znajdziesz w artykule Zmiana lokalizacji zbioru danych.

  • Firebase konfiguruje regularną synchronizację danych z projektu w Firebase z BigQuery. Te 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. Wszystkie aplikacje, które dodasz do projektu później, także zostaną automatycznie połączone z BigQuery. Możesz określić, które aplikacje mają wysyłać dane.

Aby dezaktywować eksport BigQuery, odłącz projekt w Firebase konsoli.

Włączanie eksportu danych o dostarczaniu wiadomości

iOS+

Na urządzeniach z iOS z pakietem SDK FCM w wersji 8.6.0 lub nowszej można włączyć eksportowanie danych o dostarczaniu wiadomości z aplikacji. FCM obsługuje eksport danych zarówno w przypadku alertów, jak i powiadomień w tle. Eksport danych jest domyślnie wyłączony na poziomie aplikacji. Włączenie tej funkcji automatycznie na poziomie instancji aplikacji umożliwia poproszenie użytkowników o zgodę na analizowanie danych o dostarczaniu wiadomości (zalecane). Jeśli ustawione są obie wartości, wartość na poziomie instancji aplikacji zastępuje wartość na poziomie aplikacji.

Zanim włączysz te opcje, musisz najpierw utworzyć połączenie FCM-BigQuery dla swojego projektu, jak opisano w artykule Eksportowanie danych do BigQuery.

Włączanie eksportu danych o dostawie w przypadku powiadomień o alertach

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

W przypadku każdego otrzymanego powiadomienia należy wykonać to wywołanie:

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.serviceExtension().exportDeliveryMetrics(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 HTTP v1 API, pamiętaj, aby w obiekcie ładunku określić `mutable-content = 1`.

Włączanie eksportu danych o dostarczaniu 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 module obsługi wiadomości z danymi w głównej aplikacji. To wywołanie musi być wykonywane 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.serviceExtension().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

Android

Na urządzeniach z Androidem z pakietem SDK FCM w wersji 20.1.0 lub nowszej można włączyć eksportowanie danych o dostarczaniu wiadomości z aplikacji. Eksport danych jest domyślnie wyłączony na poziomie aplikacji. Włączenie tej funkcji na poziomie instancji aplikacji umożliwia proszenie użytkowników o zgodę na analizowanie danych o dostarczaniu wiadomości (zalecane). Jeśli oba są ustawione, wartość na poziomie instancji aplikacji zastępuje wartość na poziomie aplikacji.

Zanim włączysz te opcje, musisz najpierw utworzyć FCMpołączenie z BigQuery w projekcie zgodnie z opisem w sekcji Eksportowanie danych do BigQuery.

Włączanie eksportu danych o dostarczaniu w przypadku instancji aplikacji

W większości przypadków zalecamy włączenie eksportu danych o dostarczaniu wiadomości tylko na poziomie instancji aplikacji i pozostawienie go wyłączonego na poziomie aplikacji.

FirebaseMessaging.getInstance().setDeliveryMetricsExportToBigQuery(true);

Włączanie eksportu danych o dostarczaniu w przypadku aplikacji

Jeśli wolisz włączyć eksportowanie na poziomie aplikacji, nie wywołuj metody setDeliveryMetricsExportToBigQuery i dodaj do obiektu aplikacji w manifeście aplikacji tę właściwość:

<application>
  <meta-data android:name="delivery_metrics_exported_to_big_query_enabled"
      android:value="true" />
</application>

Sieć

FCM SDK na potrzeby internetu w wersji 12.14.0 lub nowszej umożliwia eksportowanie danych o dostarczaniu. Eksport danych jest domyślnie wyłączony na poziomie aplikacji. Włączenie tej funkcji automatycznie na poziomie instancji aplikacji umożliwia poproszenie użytkowników o zgodę na analizowanie danych o dostarczaniu wiadomości (zalecane). Jeśli ustawione są obie wartości, wartość na poziomie instancji aplikacji zastępuje wartość na poziomie aplikacji. Gdy użytkownik wyrazi zgodę na zbieranie danych lub ją odrzuci, aplikacja powinna ustawić eksperymentalną flagę włączania lub wyłączania dla każdej instancji aplikacji w ten sposób:

// userConsent holds the decision of the user to give big query export consent.
const userConsent = ...;

const messaging = getMessagingInSw(app);

experimentalSetDeliveryMetricsExportedToBigQueryEnabled(messaging, userConsent);

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 jest następujący:

_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.
project_number LICZBA CAŁKOWITA Numer projektu identyfikuje projekt, który wysłał wiadomość.
message_id CIĄG ZNAKÓW Identyfikator wiadomości identyfikuje wiadomość. Identyfikator wiadomości jest generowany na podstawie identyfikatora aplikacji i sygnatury czasowej, więc w niektórych przypadkach może nie być unikalny globalnie.
instance_id CIĄG ZNAKÓW 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.
message_type CIĄG ZNAKÓW Typ wiadomości. Może to być powiadomienie lub wiadomość zawierająca dane. Temat służy do identyfikowania pierwotnej wiadomości w przypadku wysyłania tematu lub kampanii. Kolejne wiadomości to powiadomienia lub wiadomości z danymi.
sdk_platform CIĄG ZNAKÓW Platforma aplikacji odbiorcy
app_name CIĄG ZNAKÓW nazwę pakietu w przypadku aplikacji na Androida lub identyfikator pakietu w przypadku aplikacji na iOS,
collapse_key CIĄG ZNAKÓW Klucz zwijania identyfikuje grupę wiadomości, które można zwinąć. Gdy urządzenie nie jest połączone, tylko ostatnia wiadomość z danym kluczem zwijania jest umieszczana w kolejce do dostarczenia.
rekrutacja priorytetowa LICZBA CAŁKOWITA Priorytet wiadomości. 5 to priorytet „normalny”, a 10 to priorytet „wysoki”.
ttl LICZBA CAŁKOWITA Ten parametr określa, jak długo (w sekundach) wiadomość powinna być przechowywana w FCM, jeśli urządzenie jest offline.
temat CIĄG ZNAKÓW nazwa tematu, do którego wysłano wiadomość (jeśli dotyczy);
bulk_id LICZBA CAŁKOWITA Identyfikator zbiorczy identyfikuje grupę powiązanych wiadomości, np. wysłanych na dany temat.
zdarzenie CIĄG ZNAKÓW Typ zdarzenia. Możliwe wartości:
  • MESSAGE_ACCEPTED: wiadomość została odebrana przez serwer FCM, a żądanie jest prawidłowe;
  • MESSAGE_DELIVERED: wiadomość została dostarczona do pakietu FCM SDK aplikacji na urządzeniu. Domyślnie to pole nie jest propagowane. Aby je włączyć, postępuj zgodnie z instrukcjami podanymi w setDeliveryMetricsExportToBigQuery(boolean).
  • MISSING_REGISTRATIONS: żądanie zostało odrzucone z powodu braku rejestracji;
  • UNAUTHORIZED_REGISTRATION: wiadomość została odrzucona, ponieważ nadawca nie jest uprawniony do wysył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ącego wiadomość a identyfikatorem zadeklarowanym dla punktu końcowego;
  • QUOTA_EXCEEDED: prośba o wysłanie wiadomości została odrzucona 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 z powodu nieprawidłowego certyfikatu APNS;
  • INVALID_PARAMETERS: prośba o wysłanie wiadomości została odrzucona z powodu nieprawidłowych parametrów;
  • PAYLOAD_TOO_LARGE: prośba o wysłanie wiadomości została odrzucona, ponieważ ładunek przekracza 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łowego czasu TTL.
analytics_label CIĄG ZNAKÓW W przypadku interfejsu HTTP v1 API etykietę analityczną można ustawić podczas wysyłania wiadomości, aby oznaczyć ją do celów analitycznych.

Co można zrobić z wyeksportowanymi danymi?

W sekcjach poniżej znajdziesz przykłady zapytań, które możesz uruchamiać w BigQuery na wyeksportowanych danych 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, do których 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';

Liczba wysłanych wiadomości z powiadomieniem

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

Liczba wysłanych wiadomości zawierających dane

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 związane z wiadomością wysłaną do określonego tematu, zmodyfikuj to zapytanie, zastępując AND message_id != '' ciągiem AND message_id = <your message id>;.

obliczać czas trwania fanoutu dla danego tematu lub kampanii;

Czas rozpoczęcia rozsyłania to moment otrzymania pierwotnego żądania, a czas zakończenia to moment utworzenia ostatniej pojedynczej wiadomości kierowanej do jednej 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;

Obliczanie odsetka 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ń dotyczących 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;

Obliczanie czasu oczekiwania 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;