Memahami pengiriman pesan

FCM menyediakan berbagai fitur untuk membantu Anda mendapatkan insight tentang pengiriman pesan. Selain laporan pengiriman dan analisis funnel notifikasi yang merupakan fitur built-in di Firebase console, FCM menyediakan fitur ekspor data yang komprehensif ke Google BigQuery.

Laporan pengiriman pesan

Anda dapat mengevaluasi apakah pesan yang Anda kirim sampai ke pengguna atau tidak. Pada tab Laporan di Firebase console, Anda dapat melihat data berikut untuk pesan yang dikirim ke FCM SDK, termasuk yang dikirim melalui Notification Composer dan FCM API:

  • Mengirim - Pesan data atau pesan notifikasi telah masuk anteran pengiriman atau telah berhasil diteruskan ke layanan pihak ketiga seperti APN untuk dikirimkan. Lihat masa aktif pesan untuk informasi lebih lanjut.
  • Tayangan (khusus pesan notifikasi di perangkat Android) - Notifikasi tampilan yang memberitahukan bahwa pesan telah ditampilkan di perangkat.
  • Membuka - Pengguna telah membuka pesan notifikasi.

Anda dapat menetapkan rentang tanggal untuk data yang ditampilkan, dengan opsi untuk mengekspor ke file CSV.

Analisis funnel Notifications

Analisis funnel Notifcations merupakan fitur built-in dan menunjukkan cara pengguna merespons notifikasi tertentu yang dikirim dari Firebase console, dengan data untuk:

  • Notifikasi terkirim — Pesan telah masuk anteran pengiriman atau telah berhasil diteruskan ke layanan pihak ketiga seperti APN untuk dikirimkan.
  • Notifikasi dibuka — Jumlah notifikasi yang telah dibuka.
  • Jumlah pengguna unik yang telah memicu peristiwa konversi, jika ditentukan.

Untuk melihat Analisis funnel Notifications:

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

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 Notifikasi, Anda juga dapat membuat funnel kustom di Analytics untuk memvisualisasikan rasio penyelesaian rangkaian langkah dalam aplikasi Anda.

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. Baca halaman Menautkan Firebase ke BigQuery untuk mendapatkan informasi lebih lanjut.

  1. Untuk memulai, gunakan salah satu opsi berikut:

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

    • Dari halaman Integrasi di Firebase console, klik Tautkan 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.

Saat menautkan project ke BiqQuery:

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

Data apa yang diekspor ke BigQuery?

Skema dari 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 satu pesan unik
instance_id STRING ID instance aplikasi penerima pesan (jila tersedia)
message_type STRING Jenis pesannya. Dapat berupa Pesan notifikasi atau Pesan data. Topik digunakan untuk mengidentifikasi topik atau kampanye yang dikirim pada pesan asli; 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 "tinggi". Pada iOS, nilai 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
device_recently_active BOOLEAN Parameter ini BENAR jika perangkat telah tersambung baru-baru ini
event STRING Jenis peristiwa. Kemungkinan nilainya adalah:
  • MESSAGE_ACCEPTED: pesan diterima oleh server FCM dan permintaan valid;
  • MESSAGE_DELIVERED: pesan telah dikirim ke perangkat;
  • MESSAGE_DELIVERED_ON_RECONNECT: pesan dikirim ke perangkat saat perangkat tersambung kembali;
  • MISSING_REGISTRATIONS: permintaan ditolak karena pendaftaran tidak ada;
  • MESSAGE_EXPIRED: masa berlaku pesan habis sebelum perangkat tersambung, dan pesan bisa jadi telah dikirimkan;
  • MESSAGE_DELAYED_DOZE: pengiriman pesan ke perangkat ditunda karena perangkat berada dalam mode istirahat;
  • UNAUTHORIZED_REGISTRATION: pesan ditolak karena pengirim tidak memiliki otorisasi untuk mengirim pesan ke pendaftaran;
  • MESSAGE_COLLAPSED: pesan digantikan dengan pesan yang lebih baru dengan kunci penciutan yang sama sebelum dapat dikirimkan;
  • MESSAGE_RECEIVED_INTERNAL_ERROR: terjadi error yang belum ditetapkan saat memproses permintaan pesan;
  • MESSAGE_DELAYED_THROTTLED: pengiriman pesan ke perangkat ditunda karena adanya throttling tombol penciutannya;
  • MISMATCH_SENDER_ID: permintaan untuk mengirim pesan ditolak karena ada ketidakcocokan antara ID pengirim yang mengirim pesan, dan ID pengirim yang dinyatakan 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;
  • DEVICE_NOT_FOUND: permintaan untuk mengirim pesan ditolak karena perangkat tidak ditemukan di database kami;
  • 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.

Apa yang dapat dilakukan dengan data yang diekspor?

Menghitung pesan yang dikirim oleh aplikasi

SELECT app_name, COUNT(1)
FROM [<project name>: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 ditargetkan oleh pesan

SELECT COUNT(DISTINCT instance_id)
FROM [<project name>: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 name>: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 name>: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 suatu topik atau kampanye dari konsol Notifications

SELECT COUNT(1)
FROM [<project name>:firebase_messaging.data]
WHERE
  _PARTITIONTIME = TIMESTAMP('<date as YYYY-MM-DD>')
  AND event = 'MESSAGE_ACCEPTED'
  AND bulk_id = <your bulk id> AND 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 menargetkan 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 name>: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 name>: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 name>: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 name>:firebase_messaging.data]
    WHERE
      _PARTITIONTIME = TIMESTAMP('<date as YYYY-MM-DD>')
      AND (event = 'MESSAGE_DELIVERED' OR event = 'MESSAGE_DELIVERED_ON_RECONNECT')
      AND message_id
      IN (
        SELECT message_id FROM [<project name>: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 name>: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 name>: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 name>: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' OR event = 'MESSAGE_DELIVERED_ON_RECONNECT')
  ) delivered;

Kirim masukan tentang...

Butuh bantuan? Kunjungi halaman dukungan kami.