Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Memahami pengiriman pesan

FCM menyediakan tiga rangkaian alat untuk membantu Anda mendapatkan insight tentang pengiriman pesan:

  • Laporan pengiriman pesan dan analisis funnel notifikasi Firebase console
  • Gabungan metrik pengiriman Android SDK dari Firebase Cloud Messaging Data API
  • Ekspor data komprehensif ke Google BigQuery

Alat pelaporan yang dijelaskan di halaman ini memerlukan Google Analytics agar berfungsi. Jika Google Analytics tidak diaktifkan untuk project Anda, Anda dapat menyiapkannya di tab integrasi pada setelan project Firebase Anda.

Perhatikan bahwa pelaporan banyak statistik di halaman ini berpotensi mengalami penundaan hingga 24 jam karena pengelompokan data analisis.

Laporan pengiriman pesan

Di tab Laporan di Firebase console, Anda dapat melihat data berikut untuk pesan yang dikirim ke Android atau iOS FCM SDK, termasuk yang dikirim melalui Notifications composer dan FCM API:

  • Mengirim — Pesan data atau pesan notifikasi telah masuk antrean pengiriman atau telah berhasil diteruskan ke layanan pihak ketiga seperti APN untuk dikirimkan. Lihat masa aktif pesan untuk informasi lebih lanjut.
  • Diterima (hanya tersedia di perangkat Android) - Pesan data atau pesan notifikasi telah diterima oleh aplikasi. Data ini tersedia saat perangkat Android penerima memiliki FCM SDK 18.0.1 atau versi yang lebih baru.
  • Tayangan (hanya tersedia untuk pesan notifikasi di perangkat Android) — Notifikasi tampilan telah ditampilkan di perangkat saat aplikasi berada di latar belakang.
  • Membuka — Pengguna telah membuka pesan notifikasi. Dilaporkan hanya untuk notifikasi yang diterima ketika aplikasi berada di latar belakang.

Data ini tersedia untuk semua pesan dengan payload notifikasi dan semua pesan data berlabel. Untuk mempelajari label lebih lanjut, baca bagian Menambahkan label analisis ke pesan.

Saat melihat laporan pesan, Anda dapat menetapkan rentang tanggal untuk data yang ditampilkan, dengan opsi untuk mengekspor file ke CSV. Anda juga dapat melakukan pemfilteran berdasarkan kriteria berikut:

  • Platform (iOS atau Android)
  • Aplikasi
  • Label analisis kustom

Menambahkan label analisis ke pesan

Memberi label pada pesan sangat berguna untuk analisis kustom, sehingga Anda dapat memfilter statistik pengiriman berdasarkan label atau sekumpulan label. Anda dapat menambahkan label ke pesan yang dikirim melalui HTTP v1 API dengan menyetel kolom fcmOptions.analyticsLabel di objek pesan, atau di kolom AndroidFcmOptions atau ApnsFcmOptions platform yang bersangkutan.

Label analisis adalah string teks dalam format ^[a-zA-Z0-9-_.~%]{1,50}$. Label dapat meliputi huruf besar dan kecil, angka, serta simbol berikut:

  • -
  • ~
  • %

Panjang maksimal adalah 50 karakter. Anda dapat menentukan hingga 100 label unik per hari. Pesan dengan label yang ditambahkan di luar batas tersebut tidak akan dilaporkan.

Di tab Laporan pengiriman pesan di Firebase console, Anda dapat menelusuri daftar semua label yang ada dan menerapkannya sendiri-sendiri atau bersama-sama untuk memfilter statistik yang ditampilkan.

Analisis funnel notifikasi

Analisis funnel pada Notifications merupakan fitur bawaan yang dapat memperlihatkan cara pengguna merespons notifikasi tertentu yang dikirim dari Firebase console. Tampilan ini meliputi data untuk perangkat iOS dan Android yang ditarget dalam kategori ini:

  • Notifikasi terkirim — Pesan telah masuk antrean pengiriman atau telah berhasil diteruskan ke layanan pihak ketiga seperti APN untuk dikirimkan. Perhatikan bahwa penargetan token yang sudah tidak relevan atau pendaftaran tidak aktif dapat meningkatkan statistik ini.
  • Notifikasi dibuka — Jumlah notifikasi yang telah dibuka. Dilaporkan hanya untuk notifikasi yang diterima ketika aplikasi berada di latar belakang.
  • Jumlah pengguna unik yang telah memicu peristiwa konversi, jika ditentukan.

Untuk melihat Analisis funnel Notifications:

  1. Di Notifications Composer, pilih tab Notifications.
  2. Klik pesan yang telah selesai atau sedang diproses dalam daftar pesan. Tampilan yang diperluas yang menyertakan Analisis funnel akan muncul.

Laporan Analytics diperbarui secara berkala, tetapi kemungkinan ada penundaan antara saat pengguna membuka notifikasi dan saat data peristiwa tersedia di konsol. Selain berbagai laporan pada tab Notifications, Anda juga dapat membuat funnel kustom di Analytics untuk memvisualisasikan rasio penyelesaian rangkaian langkah dalam aplikasi Anda.

Gabungan data pengiriman melalui FCM Data API

Dengan Firebase Cloud Messaging Data API, Anda dapat mengambil informasi yang dapat membantu Anda memahami hasil permintaan pesan yang ditargetkan ke aplikasi Android. API menyediakan data gabungan lintas perangkat Android yang mendukung pengumpulan data dalam sebuah project. API ini mencakup detail tentang persentase pesan yang dikirim tanpa penundaan serta berapa banyak pesan yang tertunda atau dihapus dalam Android Transport Layer. Evaluasi data ini dapat mengungkap tren pengiriman pesan secara garis besar, dan membantu Anda menemukan cara yang efektif untuk meningkatkan performa permintaan pengiriman.

API menyediakan semua data yang tersedia untuk aplikasi tertentu. Baca dokumentasi referensi API.

Bagaimana cara pengelompokan data?

Data pengiriman dikelompokkan berdasarkan aplikasi, tanggal, dan label analisis. Panggilan ke API akan menampilkan data untuk setiap kombinasi tanggal, aplikasi, dan label analisis. Misalnya, objek JSON androidDeliveryData tunggal akan terlihat seperti ini:

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

Cara Menafsirkan Metrik

Data pengiriman menguraikan persentase pesan yang sesuai dengan setiap metrik berikut. Ada kemungkinan bahwa satu pesan sesuai dengan beberapa metrik. Karena keterbatasan kami dalam pengumpulan data dan tingkat perincian penggabungan metrik, beberapa hasil pesan sama sekali tidak diwakili dalam metrik, sehingga persentase di bawah tidak akan berjumlah 100%.

Jumlah Pesan yang Diterima

Satu-satunya jumlah yang disertakan dalam set data adalah jumlah pesan yang diterima oleh FCM untuk dikirim ke perangkat Android. Semua persentase menggunakan nilai ini sebagai penyebut. Perlu diingat bahwa jumlah ini tidak akan menyertakan pesan yang ditargetkan ke pengguna yang telah menonaktifkan pengumpulan informasi penggunaan dan diagnostik di perangkatnya.

Persentase Hasil Pesan

Kolom yang disertakan dalam objek MessageOutcomePercents memberikan informasi tentang hasil permintaan pesan. Semua kategori bersifat eksklusif satu sama lain. Alat ini dapat menjawab pertanyaan seperti "Apakah pesan saya dikirim?" dan "Apa yang menyebabkan pesan dihapus?"

Misalnya, nilai tinggi untuk kolom droppedTooManyPendingMessages dapat menandakan bahwa instance aplikasi menerima volume pesan yang tidak dapat diciutkan yang melebihi batas FCM, yaitu 100 pesan tertunda. Untuk mengurangi hal ini, pastikan aplikasi Anda menangani panggilan ke onDeletedMessages, dan pertimbangkan untuk mengirim pesan yang dapat diciutkan. Demikian pula, persentase tinggi untuk droppedDeviceInactive dapat menandakan bahwa token pendaftaran di server Anda perlu diperbarui, sehingga menghapus token yang sudah tidak relevan dan menghentikan langganan topiknya. Lihat Mengelola token pendaftaran FCM untuk mengetahui praktik terbaik di area ini.

Persentase Performa Penayangan

Kolom dalam objek DeliveryPerformancePercents memberikan informasi tentang pesan yang berhasil dikirim. Alat ini dapat menjawab pertanyaan seperti "Apakah pesan saya tertunda?" dan "Mengapa pesan tertunda?" Misalnya, nilai tinggi untuk delayedMessageThrottled akan menunjukkan dengan jelas bahwa Anda melebihi batas maksimum per perangkat, dan harus menyesuaikan rasio pengiriman pesan.

Persentase Insight Pesan

Objek ini memberikan informasi tambahan tentang semua pengiriman pesan. Kolom priorityLowered menunjukkan persentase pesan yang diterima dengan prioritas yang lebih rendah, dari HIGH menjadi NORMAL, karena bucket aplikasi standby. Jika nilai ini tinggi, coba kirim lebih sedikit pesan berprioritas tinggi atau pastikan Anda selalu menampilkan notifikasi saat pesan prioritas tinggi dikirim.

Apa perbedaan data ini dengan data yang diekspor ke BigQuery?

Ekspor BigQuery menyediakan log pesan individual tentang penerimaan pesan oleh backend FCM dan pengiriman pesan di SDK pada perangkat (Langkah 2 dan 4 pada Arsitektur FCM). Data ini berguna untuk memastikan setiap pesan diterima dan terkirim. Baca selengkapnya tentang ekspor data BigQuery di bagian berikutnya.

Sebaliknya, Firebase Cloud Messaging Data API menyediakan detail gabungan tentang apa yang terjadi secara khusus di Android Transport Layer (atau Langkah 3 pada Arsitektur FCM). Data ini secara khusus memberikan insight tentang pengiriman pesan dari backend FCM ke Android SDK. Hal ini sangat berguna untuk menampilkan tren terkait alasan pesan tertunda atau dihapus selama pengiriman ini.

Dalam beberapa kasus, dua set data tersebut mungkin tidak sama persis karena hal berikut:

  • Metrik gabungan hanya merupakan sampel sebagian pesan
  • Metrik gabungan dibulatkan
  • Kami tidak menampilkan metrik di bawah nilai minimum privasi
  • Sebagian hasil pesan tidak akan ditampilkan karena alasan pengoptimalan dalam cara kami mengelola volume traffic yang besar.

Keterbatasan API

Penundaan Data

Data yang ditampilkan oleh API ini akan tertunda hingga 5 hari. Misalnya, pada tanggal 10 Januari, data untuk tanggal 5 Januari akan tersedia, tetapi tidak tersedia untuk tanggal 6 Januari atau setelahnya. Selain itu, data disediakan berdasarkan upaya terbaik. Jika terjadi gangguan data, FCM akan berupaya memperbaikinya dan tidak akan mengisi ulang data setelah masalah diperbaiki. Untuk gangguan yang lebih besar, data mungkin tidak tersedia selama seminggu atau lebih.

Cakupan Data

Metrik yang disediakan oleh Firebase Cloud Messaging Data API dimaksudkan untuk memberikan insight tentang tren pengiriman pesan secara garis besar. Namun, metrik tersebut tidak memberikan cakupan 100% untuk semua skenario pesan. Skenario berikut adalah hasil yang diketahui yang tidak ditunjukkan dalam metrik.

Pesan yang Diciutkan

Pesan yang telah diciutkan oleh pesan lain tidak muncul dalam set data.

Pesan ke perangkat yang tidak aktif

Pesan yang dikirim ke perangkat yang tidak aktif mungkin muncul atau tidak muncul dalam set data, bergantung pada jalur data yang digunakan. Hal ini dapat menyebabkan salah hitung di kolom "Perangkat Tidak Aktif yang Dihapus" dan "Tertunda".

Pesan ke perangkat dengan preferensi pengguna tertentu

Pesan untuk pengguna yang telah menonaktifkan pengumpulan informasi penggunaan dan diagnostik di perangkatnya tidak akan disertakan dalam penghitungan kami, sesuai dengan preferensinya.

Pembulatan dan Minimum

FCM sengaja membulatkan dan mengecualikan jumlah jika volumenya tidak cukup besar.

Ekspor data BigQuery

Anda dapat mengekspor data pesan ke BigQuery untuk dianalisis lebih lanjut. Dengan BigQuery, Anda dapat menganalisis data menggunakan BigQuery SQL, mengekspornya ke penyedia cloud lain, atau menggunakan data tersebut untuk model ML kustom Anda. Ekspor ke BigQuery mencakup semua data yang tersedia untuk pesan, terlepas dari jenis pesan atau apakah pesan dikirim melalui API atau Notifications Composer.

Untuk pesan yang dikirim ke perangkat dengan versi minimum FCM SDK berikut, Anda memiliki opsi tambahan untuk mengaktifkan ekspor data pengiriman pesan untuk aplikasi Anda:

  • Android 20.1.0 atau yang lebih tinggi.
  • iOS 8.6.0 atau yang lebih tinggi

Lihat di bawah untuk mengetahui detail cara mengaktifkan ekspor data untuk Android dan iOS.

Untuk memulai, tautkan project Anda ke BigQuery:

  1. Pilih salah satu opsi berikut:

    • Buka Notifications Composer, lalu klik Akses BigQuery di bagian bawah halaman.

    • Dari halaman Integrasi di Firebase console, klik Link di kartu BigQuery.

      Halaman ini menampilkan opsi ekspor FCM untuk semua aplikasi yang dilengkapi FCM dalam project.

  2. Ikuti petunjuk di layar untuk mengaktifkan BigQuery.

Baca bagian Menautkan Firebase ke BigQuery untuk mendapatkan informasi lebih lanjut.

Setelah Anda menautkan project ke BigQuery:

  • Firebase akan mengekspor data Anda ke BigQuery. Perhatikan bahwa proses penerapan data awal untuk ekspor mungkin memakan waktu hingga 48 jam.

  • Firebase akan menyiapkan sinkronisasi reguler data Anda dari project Firebase ke BigQuery. Operasi ekspor harian ini dimulai pada pukul 04.00 PDT dan prosesnya dapat memakan waktu hingga sepuluh jam.

  • Secara default, semua aplikasi di project Anda akan ditautkan ke BigQuery, dan semua aplikasi yang Anda tambahkan nanti ke project akan otomatis ditautkan ke BigQuery. Anda dapat mengelola aplikasi yang akan mengirimkan data.

Untuk menonaktifkan ekspor ke BigQuery, batalkan tautan project Anda di Firebase console.

Mengaktifkan ekspor data pengiriman pesan di Android

Perangkat Android dengan FCM SDK 20.1.0 atau yang lebih tinggi dapat mengaktifkan ekspor data pengiriman pesan di aplikasinya. Ekspor data dinonaktifkan secara default di tingkat aplikasi. Dengan mengaktifkannya secara terprogram pada tingkat instance aplikasi, Anda dapat meminta izin kepada pengguna akhir untuk menganalisis data pengiriman pesan miliknya (direkomendasikan). Jika keduanya ditetapkan, nilai tingkat instance aplikasi akan menggantikan nilai tingkat aplikasi.

Sebelum mengaktifkan opsi ini, Anda harus terlebih dahulu membuat link FCM-BiqQuery untuk project Anda seperti yang dijelaskan dalam Ekspor data BigQuery.

Mengaktifkan ekspor data pengiriman untuk instance aplikasi

Untuk sebagian besar kasus, sebaiknya Anda mengaktifkan ekspor data pengiriman pesan hanya pada tingkat instance aplikasi dan membiarkannya dinonaktifkan di tingkat aplikasi.

 FirebaseMessaging.getInstance().setDeliveryMetricsExportToBigQuery(true)

Mengaktifkan ekspor data pengiriman untuk aplikasi

Jika Anda memilih untuk mengaktifkan ekspor di tingkat aplikasi, pastikan untuk tidak memanggil metode setDeliveryMetricsExportToBigQuery, dan menambahkan properti berikut ke objek aplikasi di manifes aplikasi Anda:

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

Mengaktifkan ekspor data pengiriman pesan di iOS

Perangkat iOS dengan FCM SDK 8.6.0 atau lebih tinggi dapat mengaktifkan ekspor data pengiriman pesan di aplikasinya. FCM mendukung ekspor data untuk notifikasi pemberitahuan dan latar belakang. Sebelum mengaktifkan opsi ini, Anda harus terlebih dahulu membuat link FCM-BiqQuery untuk project Anda seperti yang dijelaskan dalam Ekspor data BigQuery.

Mengaktifkan ekspor data pengiriman untuk notifikasi pemberitahuan

Karena hanya notifikasi pemberitahuan yang dapat memicu ekstensi aplikasi layanan notifikasi, Anda harus menambahkan ekstensi layanan notifikasi ke aplikasi Anda dan memanggil API ini di dalam ekstensi layanan untuk mengaktifkan pelacakan pesan layar. Lihat dokumentasi Apple terkait Memodifikasi Konten di Notifikasi yang Baru Dikirimkan.

Panggilan berikut harus dilakukan untuk setiap notifikasi yang diterima:

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

Jika Anda membuat permintaan kirim menggunakan HTTP v1 API, pastikan untuk menentukan mutable-content = 1 dalam objek payload.

Mengaktifkan ekspor data pengiriman untuk notifikasi latar belakang

Untuk pesan latar belakang yang diterima saat aplikasi berada di latar depan atau latar belakang, Anda dapat memanggil API ekspor data di dalam UIApplicationDelegate application:didReceiveRemoteNotification:fetchCompletionHandler: pengendali pesan data aplikasi utama. Panggilan ini harus dilakukan untuk setiap notifikasi yang diterima:

Swift

// For background notifications, call the API inside the UIApplicationDelegate 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 method:
@implementation AppDelegate
- (void)application:(UIApplication *)application
    didReceiveRemoteNotification:(NSDictionary *)userInfo
          fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
  [[FIRMessaging extensionHelper] exportDeliveryMetricsToBigQueryWithMessageInfo:userInfo];
@end

Data apa yang diekspor ke BigQuery?

Perhatikan bahwa penargetan token yang sudah tidak relevan atau pendaftaran tidak aktif dapat meningkatkan beberapa statistik ini.

Skema tabel yang diekspor adalah:

_PARTITIONTIME TIMESTAMP Kolom pseudo ini memuat stempel waktu untuk awal hari (dalam UTC), yaitu saat data dimuat. Untuk partisi YYYYMMDD, kolom pseudo ini berisi nilai TIMESTAMP('YYYY-MM-DD').
event_timestamp TIMESTAMP Stempel waktu peristiwa seperti yang dicatat oleh server
project_number INTEGER Nomor project mengidentifikasi project yang mengirim pesan
message_id STRING ID pesan mengidentifikasi pesan. Dalam beberapa kasus, ID pesan yang dibuat dari ID Aplikasi dan stempel waktu mungkin bukanlah ID unik global (GUID).
instance_id STRING ID instance aplikasi penerima pesan (jika tersedia)
message_type STRING Jenis pesan. Dapat berupa pesan Notifikasi atau pesan Data. Topik digunakan untuk mengidentifikasi pesan asli yang dikirim ke topik atau kampanye; pesan berikutnya berupa pesan notifikasi atau data.
sdk_platform STRING Platform aplikasi penerima
app_name STRING Nama paket untuk aplikasi Android atau ID paket untuk aplikasi iOS
collapse_key STRING Kunci penciutan mengidentifikasi sekelompok pesan yang dapat diciutkan. Ketika perangkat tidak tersambung, hanya pesan terakhir dengan kunci penciutan tertentu yang dimasukkan antrean untuk akhirnya dikirim
priority INTEGER Prioritas pesan. Nilai yang valid adalah "normal" dan "high". Di iOS, ini sama dengan prioritas APN 5 dan 10
ttl INTEGER Parameter ini menetapkan berapa lama (dalam detik) pesan harus disimpan dalam penyimpanan FCM jika perangkat sedang offline
topic STRING Nama topik penerima pesan (jika ada)
bulk_id INTEGER ID massal mengidentifikasi sekelompok pesan terkait, seperti pengiriman tertentu ke suatu topik
event STRING Jenis peristiwa. Kemungkinan nilainya adalah:
  • MESSAGE_ACCEPTED: pesan diterima oleh server FCM dan permintaan valid;
  • MESSAGE_DELIVERED: pesan telah dikirim ke FCM SDK aplikasi di perangkat. Secara default, kolom ini tidak diterapkan. Untuk mengaktifkan, ikuti petunjuk di setDeliveryMetricsExportToBigQuery(boolean).
  • MISSING_REGISTRATIONS: permintaan ditolak karena pendaftaran tidak ada;
  • UNAUTHORIZED_REGISTRATION: pesan ditolak karena pengirim tidak memiliki otorisasi untuk mengirim pesan ke pendaftaran;
  • MESSAGE_RECEIVED_INTERNAL_ERROR: terjadi error yang belum ditetapkan saat memproses permintaan pesan;
  • MISMATCH_SENDER_ID: permintaan untuk mengirim pesan ditolak karena ada ketidakcocokan antara ID pengirim yang mengirim pesan, dan ID pengirim yang dideklarasikan untuk endpoint;
  • QUOTA_EXCEEDED: permintaan untuk mengirim pesan ditolak karena kuota tidak mencukupi;
  • INVALID_REGISTRATION: permintaan untuk mengirim pesan ditolak karena pendaftaran tidak valid;
  • INVALID_PACKAGE_NAME: permintaan untuk mengirim pesan ditolak karena nama paket tidak valid;
  • INVALID_APNS_CREDENTIAL: permintaan untuk mengirim pesan ditolak karena sertifikat APN tidak valid;
  • INVALID_PARAMETERS: permintaan untuk mengirim pesan ditolak karena parameter tidak valid;
  • PAYLOAD_TOO_LARGE: permintaan untuk mengirim pesan ditolak karena payload melampaui batas;
  • AUTHENTICATION_ERROR: permintaan untuk mengirim pesan ditolak karena terjadi error autentikasi (periksa Kunci API yang digunakan untuk mengirim pesan);
  • INVALID_TTL: permintaan untuk mengirim pesan ditolak karena TTL tidak valid.
analytics_label STRING Dengan HTTP v1 API, label analisis dapat disetel saat mengirim pesan guna menandai pesan untuk tujuan analisis

Apa yang dapat dilakukan dengan data hasil ekspor?

Bagian berikut memperlihatkan contoh kueri yang dapat dijalankan di BigQuery terhadap data yang diekspor dari FCM.

Menghitung pesan yang dikirim oleh aplikasi

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;

Menghitung instance aplikasi unik yang ditarget oleh pesan

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

Menghitung pesan notifikasi yang terkirim

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

Menghitung pesan data yang terkirim

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

Menghitung pesan yang dikirim ke topik atau kampanye

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

Guna melacak peristiwa untuk pesan yang dikirim ke topik tertentu, ubah kueri ini untuk mengganti AND message_id != '' dengan AND message_id = <your message id>;.

Menghitung durasi fanout untuk topik atau kampanye tertentu

Waktu mulai fanout adalah ketika permintaan asli diterima, dan waktu berakhirnya adalah ketika pesan individual terakhir yang menarget satu instance dibuat.

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;

Menghitung persentase pesan yang terkirim

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;

Melacak semua peristiwa untuk ID pesan dan ID instance tertentu

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;

Menghitung latensi untuk ID pesan dan ID instance tertentu

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;