Informacje na temat dostarczania wiadomości

Aby rozwiązać problemy z bieżącymi niepowodzeniami dostarczania wiadomości, skorzystaj z narzędzia do rozwiązywania problemów z FCM i przeczytaj ten artykuł na blogu, aby poznać różne przyczyny, dla których możesz nie widzieć wiadomości. Możesz też otworzyć panel stanu FCM, aby sprawdzić, czy występują przerwy w działaniu usługi FCM.

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

  • Firebase raportów dostarczania wiadomości w konsoli,
  • Dane zbiorcze dotyczące wyświetlania pakietu SDK na Androida z interfejsu Data APIFirebase Cloud Messaging
  • Kompleksowy eksport danych do Google BigQuery

Eksport danych do BigQuery i karta RaportyFirebasekonsoliGoogle Analytics wymagają do działania. Jeśli Google Analytics nie jest włączona w Twoim projekcie, możesz ją skonfigurować na karcie Integracje w ustawieniach projektu Firebase. Zagregowane dane o dostawie 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 dostarczania wiadomości

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

  • Wysłano – wiadomość z danymi lub powiadomienie zostało umieszczone w kolejce do dostarczenia lub zostało prawidłowo 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 okres ważności wiadomości.
  • Odebrano (dostępne tylko na urządzeniach z Androidem) – wiadomość z danymi lub powiadomienie zostało odebrane przez aplikację. Te dane są dostępne, gdy na urządzeniu z Androidem jest zainstalowany FCMpakiet SDK 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ń otrzymywanych, gdy aplikacja działa w tle.

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

Podczas wyświetlania raportów o wiadomościach możesz ustawić zakres dat dla wyświetlanych danych, a także wyeksportować je do pliku CSV. Możesz też filtrować według tych kryteriów:

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

Dodawanie etykiet Analytics do wiadomości

Oznaczanie wiadomości etykietami jest bardzo przydatne w przypadku analizy niestandardowej, ponieważ umożliwia filtrowanie statystyk dostarczania według etykiet lub zestawów etykiet. Etykietę możesz dodać 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 specyficznych dla 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. Nie są raportowane wiadomości z etykietami dodanymi po przekroczeniu tego limitu.

Na karcie Firebasekomunikatów w konsoliRaporty możesz wyszukać listę wszystkich istniejących etykiet i zastosować je pojedynczo lub w kombinacji, aby filtrować wyświetlane statystyki.

zagregowane dane o dostarczaniu za pomocą interfejsu FCM Data API,

Interfejs Firebase Cloud Messaging Data API umożliwia pobieranie informacji, które mogą pomóc w zrozumieniu wyników żądań wysyłania wiadomości kierowanych do aplikacji na Androida. Interfejs API udostępnia dane zbiorcze ze wszystkich urządzeń z Androidem, na których w projekcie włączono zbieranie danych. Obejmuje to szczegółowe informacje o procentowym udziale wiadomości dostarczonych bez opóźnień, a także o liczbie wiadomości opóźnionych lub utraconych w warstwie transportowej Androida. Ocena tych danych może ujawnić ogólne trendy w dostarczaniu wiadomości i pomóc Ci znaleźć skuteczne sposoby na zwiększenie skuteczności próśb o wysłanie. Informacje o zakresach dat dostępnych w raportach znajdziesz w artykule Harmonogramy danych zbiorczych.

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

Jak dane są podzielone?

Dane o dostawie 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 androidDeliveryData obiekt JSON 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
    }
  }

Interpretowanie danych

Dane o dostarczaniu zawierają odsetek wiadomości, które spełniają poszczególne kryteria: Może się zdarzyć, że jedna wiadomość pasuje do kilku rodzajów danych. Ze względu na ograniczenia w sposobie zbierania danych i poziom szczegółowości, na którym agregowaliśmy dane, niektóre wyniki wiadomości nie są w ogóle uwzględniane w danych, więc podane poniżej wartości procentowe nie sumują się do 100%.

Zliczanie zaakceptowanych wiadomości

Jedyną liczbą uwzględnioną w zbiorze danych jest 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 danych diagnostycznych na swoich urządzeniach.

Odsetki wyników wiadomości

Pola zawarte 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 utratę wiadomości?”.

Na przykład wysoka wartość w polu droppedTooManyPendingMessages może sygnalizować, że instancje aplikacji otrzymują dużą liczbę wiadomości, których nie można zwinąć, przekraczającą limit 100 oczekujących wiadomości w przypadku parametru 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 odsetki w przypadku droppedDeviceInactive mogą sygnalizować konieczność zaktualizowania tokenów rejestracji na serwerze, usunięcia nieaktualnych tokenów i wyrejestrowania ich z tematów. Więcej informacji o sprawdzonych metodach w tym zakresie znajdziesz w artykule Zarządzanie FCM tokenami rejestracji.

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.

Procentowe statystyki wiadomości

Ten obiekt zawiera dodatkowe informacje o wszystkich wysłanych wiadomościach. Pole priorityLowered wyraża 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 zawsze wyświetlaj powiadomienie, gdy wysyłana jest wiadomość o wysokim priorytecie. Więcej informacji znajdziesz w 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 akceptowania 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 BigQuery znajdziesz w następnej sekcji.

Natomiast interfejs Firebase Cloud Messaging Data API udostępnia zagregowane informacje o tym, co dzieje się konkretnie w warstwie transportowej Androida (czyli w kroku 3 architektury FCM). Te dane dostarczają informacji o dostarczaniu wiadomości z backendów FCM do pakietu SDK na Androida. Jest to szczególnie przydatne do wyświetlania trendów dotyczących przyczyn opóźnień lub odrzucenia wiadomości podczas przesyłania.

W niektórych przypadkach te 2 zbiory danych mogą się nie zgadzać dokładnie z powodu:

  • Dane zbiorcze obejmują tylko próbkę wszystkich wiadomości.
  • Zagregowane dane 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 zwróci dane historyczne z 7 dni, ale będą one 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. Dane są też dostarczane z możliwie największą dokładnością. W przypadku przerwy w dostawie danych FCM będzie pracować nad rozwiązaniem problemu, ale nie uzupełni danych wstecznie po jego rozwiązaniu. W przypadku większych awarii dane mogą być niedostępne przez tydzień lub dłużej.

Zakres danych

Dane udostępniane przez interfejs Firebase Cloud Messaging Data API mają na celu dostarczanie informacji o ogólnych trendach w zakresie dostarczania wiadomości. Nie zapewniają one jednak 100% pokrycia wszystkich scenariuszy wiadomości. Te scenariusze to znane wyniki, które nie są odzwierciedlone w danych.

Wygasłe wiadomości

Jeśli czas TTL wygaśnie po zakończeniu danego dnia w dacie logowania, wiadomość nie zostanie uwzględniona 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 ścieżki danych, którą pokonują. Może to prowadzić do błędnych obliczeń w polach droppedDeviceInactivepending.

Wiadomości do urządzeń z określonymi ustawieniami użytkownika

W zgodzie z preferencjami użytkowników nie będziemy uwzględniać w naszych obliczeniach wiadomości od użytkowników, którzy wyłączyli zbieranie informacji o użytkowaniu i danych diagnostycznych na swoich urządzeniach.

Zaokrąglanie i wartości minimalne

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

Eksportowanie danych z BigQuery

Dane wiadomości możesz eksportować 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 używanie ich w modelach ML. Eksport do BigQuery obejmuje wszystkie dostępne dane o wiadomościach, niezależnie od ich typu i sposobu wysyłania (przez interfejs API lub w kompozytorze powiadomień).

W przypadku wiadomości wysyłanych na urządzenia z tymi FCMminimalnymi wersjami pakietu SDK możesz dodatkowo włączyć eksportowanie danych o dostarczaniu wiadomości w swojej aplikacji:

  • Androida w wersji 20.1.0 lub nowszej.
  • iOS 8.6.0 lub nowszy
  • Firebase Web SDK w wersji 9.0.0 lub nowszej

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

  1. Wybierz jedną z tych opcji:

    • Otwórz edytor powiadomień, a następnie u dołu strony kliknij Dostęp do BigQuery.

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

      Na tej stronie wyświetlane są FCM opcje eksportu dla wszystkich aplikacji w projekcie, w których włączono FCM.

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

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

Gdy włączysz eksportowanie BigQuery w przypadku Cloud Messaging:

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

  • Gdy zbiór danych zostanie 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 regularne synchronizacje danych z projektu Firebase z BigQuery. Codzienne operacje eksportu rozpoczynają się o 4:00 rano czasu pacyficznego i zwykle kończą 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ć eksportowanie BigQuery, odłącz projekt w konsoli Firebase.

Włączanie eksportowania danych o dostarczaniu wiadomości

iOS+

Na urządzeniach z iOS z FCM SDK w wersji 8.6.0 lub nowszej można włączyć eksportowanie danych o dostarczaniu wiadomości z aplikacji. FCM obsługuje eksportowanie 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 programowo na poziomie instancji aplikacji umożliwia poproszenie 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 BigQueryFCM z projektem zgodnie z opisem w sekcji Eksport danych do BigQuery.

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

Ponieważ tylko powiadomienia z alertami mogą wywoływać rozszerzenia aplikacji usługi powiadomień, 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 na temat 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.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 HTTP API w wersji 1, w obiekcie ładunku określ `mutable-content = 1`.

Włączanie eksportu danych o dostarczaniu w przypadku powiadomień w tle

W przypadku wiadomości w tle otrzymywanych, gdy aplikacja działa na pierwszym planie lub w tle, możesz wywołać interfejs API eksportu danych w obsłudze 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.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

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 programowo na poziomie instancji aplikacji umożliwia poproszenie użytkowników o zgodę na analizowanie danych o dostarczaniu wiadomości (zalecane). Jeśli obie wartości są ustawione, wartość na poziomie instancji aplikacji zastępuje wartość na poziomie aplikacji.

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

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

W większości przypadków zalecamy włączenie eksportowania 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ć eksport na poziomie aplikacji, nie wywołuj metody setDeliveryMetricsExportToBigQuery i dodaj tę właściwość do obiektu aplikacji w pliku manifestu aplikacji:

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

Sieć

FCM Pakiet SDK na potrzeby internetu w wersji 9.0.0 udostępnia wersję alfa eksportu danych o dostawie. Eksport danych jest domyślnie wyłączony na poziomie aplikacji. Włączenie go programowo na poziomie instancji aplikacji umożliwia proszenie użytkowników o zgodę na analizowanie danych o dostarczaniu wiadomości (zalecane). Jeśli obie wartości są ustawione, wartość na poziomie instancji aplikacji zastępuje wartość na poziomie aplikacji. Gdy użytkownik wyrazi zgodę na zbieranie danych lub odrzuci taką możliwość, aplikacja powinna ustawić eksperymentalną flagę włączania lub wyłączania dla każdej instancji aplikacji w sposób pokazany poniżej:

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

const messaging = getMessagingInSw(app);

experimentalSetDeliveryMetricsExportedToBigQuery(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, z którego została wysłana wiadomość.
message_id CIĄG ZNAKÓW Identyfikator wiadomości określa wiadomość. Identyfikator wiadomości jest generowany na podstawie identyfikatora aplikacji i sygnatury czasowej, więc w niektórych przypadkach może nie być globalnie unikalny.
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ść z danymi. Temat służy do identyfikowania oryginalnej wiadomości wysłanej do 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 Nazwa 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, w kolejce do dostarczenia jest tylko ostatni komunikat z danym kluczem collapse_key.
rekrutacja priorytetowa LICZBA CAŁKOWITA Priorytet wiadomości. 5 to priorytet „normalny”, a 10 – „wysoki”.
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 offline.
temat CIĄG ZNAKÓW Nazwa tematu, do którego wysłano wiadomość (w stosownych przypadkach).
bulk_id LICZBA CAŁKOWITA Identyfikator zbiorczy określa grupę powiązanych wiadomości, np. konkretną wysyłkę do tematu.
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 SDK FCM aplikacji na urządzeniu. Domyślnie to pole nie jest propagowane. Aby włączyć tę funkcję, 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: prośba o wysłanie wiadomości została odrzucona 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: żądanie wysłania wiadomości zostało odrzucone 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: żą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, 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 życia.
analytics_label CIĄG ZNAKÓW Za pomocą interfejsu HTTP API w wersji 1 możesz ustawić etykietę analityczną podczas wysyłania wiadomości, aby oznaczyć ją na potrzeby analizy.

Co można zrobić z wyeksportowanymi danymi?

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

Zliczanie 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 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 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 dotyczące wiadomości wysłanej do konkretnego tematu, zmodyfikuj to zapytanie, zastępując AND message_id != '' ciągiem AND message_id = <your message id>;.

Obliczanie czasu trwania rozsyłania 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 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;

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 opóźnienia 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;