Check out what’s new from Firebase@ Google I/O 2021, and join our alpha program for early access to the new Remote Config personalization feature. Learn more

Mesaj teslimini anlama

FCM, mesaj teslimi hakkında fikir edinmenize yardımcı olacak araçlar sağlar. FCM, Firebase konsolunda yerleşik olarak bulunan teslim raporları ve bildirim hunisi analizine ek olarak, Google BigQuery'ye kapsamlı veri aktarımı sağlar.

Bu sayfada açıklanan raporlama araçlarının tümü, çalışması için Google Analytics gerektirir. Projeniz için Google Analytics etkinleştirilmemişse, bunu Firebase proje ayarlarınızın entegrasyonlar sekmesinde ayarlayabilirsiniz.

Bu sayfadaki birçok istatistiğin raporlanmasının, analitik verilerinin gruplandırılması nedeniyle 24 saate kadar gecikmelere tabi olduğunu unutmayın.

Mesaj teslim raporları

Gönderdiğiniz mesajların kullanıcılarınıza ulaşıp ulaşmadığını değerlendirebilirsiniz. Firebase konsolundaki Raporlar sekmesinde, Bildirim oluşturucu ve FCM API'leri aracılığıyla gönderilenler de dahil olmak üzere Android veya iOS FCM SDK'larına gönderilen iletiler için aşağıdaki verileri görüntüleyebilirsiniz:

  • Göndermeler — Veri mesajı veya bildirim mesajı teslim için sıraya alındı ​​veya teslim için APN'ler gibi bir üçüncü taraf hizmetine başarıyla iletildi. Daha fazla bilgi için bir mesajın kullanım ömrüne bakın.
  • Alındı ​​(yalnızca Android cihazlarda bulunur) — Veri mesajı veya bildirim mesajı uygulama tarafından alındı. Bu veriler, alıcı Android cihazında FCM SDK 18.0.1 veya üstü yüklü olduğunda kullanılabilir.
  • İzlenimler (yalnızca Android cihazlarda bildirim mesajları için kullanılabilir) — Uygulama arka plandayken ekran bildirimi cihazda görüntülendi.
  • Açılır — Kullanıcı, bildirim mesajını açtı. Yalnızca uygulama arka plandayken alınan bildirimler için raporlanır.

Bu veriler, bildirim yükü olan tüm mesajlar ve tüm etiketli veri mesajları için mevcuttur . Etiketler hakkında daha fazla bilgi edinmek için Mesajlara analiz etiketleri ekleme konusuna bakın.

Mesaj raporlarını görüntülerken, görüntülenen veriler için CSV'ye aktarma seçeneğiyle bir tarih aralığı belirleyebilirsiniz. Ayrıca şu kriterlere göre filtreleme yapabilirsiniz:

  • Platform (iOS veya Android)
  • Uygulama
  • Özel analiz etiketleri

Mesajlara analiz etiketleri ekleme

İletileri etiketlemek, özel analiz için çok kullanışlıdır ve teslim istatistiklerini etiketlere veya etiket kümelerine göre filtrelemenize olanak tanır. İleti nesnesindeki veya platforma özel AndroidFcmOptions veya ApnsFcmOptions alanlarında fcmOptions.analyticsLabel alanını ayarlayarak HTTP v1 API aracılığıyla gönderilen herhangi bir iletiye etiket ekleyebilirsiniz.

Analiz etiketleri, ^[a-zA-Z0-9-_.~%]{1,50}$ biçimindeki metin dizeleridir. Etiketler küçük ve büyük harfler, sayılar ve aşağıdaki sembolleri içerebilir:

  • -
  • ~
  • %

Maksimum uzunluk 50 karakterdir. Günde en fazla 100 benzersiz etiket belirtebilirsiniz; bu sınırın ötesinde eklenen etiketlere sahip mesajlar rapor edilmez.

Firebase konsolu mesajlaşma Raporları sekmesinde, mevcut tüm etiketlerin bir listesini arayabilir ve görüntülenen istatistikleri filtrelemek için bunları tek tek veya birlikte uygulayabilirsiniz.

Bildirim hunisi analizi

Yerleşik bir Bildirimler hunisi analizi, kullanıcılarınızın Firebase konsolundan gönderilen belirli bildirimlere nasıl yanıt verdiğini gösterir. Bu görünüm, şu kategorilerdeki hedeflenen iOS ve Android cihazlar için verileri içerir:

  • Gönderilen bildirimler — İleti teslim edilmek üzere kuyruğa alındı ​​veya teslim için APN'ler gibi bir üçüncü taraf hizmetine başarıyla iletildi. Eski jetonları veya etkin olmayan kayıtları hedeflemenin bu istatistikleri şişirebileceğini unutmayın.
  • Açılan bildirimler — Açılan bildirimlerin sayısı. Yalnızca uygulama arka plandayken alınan bildirimler için raporlanır.
  • Tanımlanmışsa, bir dönüşüm etkinliğini tetikleyen benzersiz kullanıcıların sayısı.

Bildirimler hunisi analizini görmek için:

  1. Bildirim oluşturucusunda, Bildirimler sekmesini seçin.
  2. Mesaj listesinde tamamlanmış veya devam eden bir mesaja tıklayın. Huni analizini içeren genişletilmiş bir görünüm görüntülenir.

Analytics raporları periyodik olarak güncellenir, ancak bir kullanıcının bildirimi açması ile olay verilerinin konsolda mevcut olması arasında biraz gecikme olabilir. Bildirimler sekmesi altındaki bu raporlara ek olarak, uygulamanızdaki bir dizi adımın tamamlanma oranını görselleştirmek için Analytics'te özel huniler de oluşturabilirsiniz.

BigQuery verilerini dışa aktarma

Daha fazla analiz için mesaj verilerinizi BigQuery'ye aktarabilirsiniz . BigQuery, verileri BigQuery SQL kullanarak analiz etmenize, başka bir bulut sağlayıcısına aktarmanıza veya verileri özel makine öğrenimi modelleriniz için kullanmanıza olanak tanır. BigQuery'ye dışa aktarma, mesaj türünden veya mesajın API veya Bildirim oluşturucu aracılığıyla gönderilip gönderilmediğine bakılmaksızın, mesajlar için mevcut tüm verileri içerir.

FCM SDK 20.1.0 veya üzeri ile Android cihazlara gönderilen mesajlar için, uygulamanız için mesaj teslim verilerinin dışa aktarılmasını etkinleştirmek için ek seçeneğiniz vardır. Daha fazla bilgi için Android'de mesaj teslimi verilerini dışa aktarmayı etkinleştirme konusuna bakın.

Başlamak için projenizi BigQuery'ye bağlayın:

  1. Aşağıdaki seçeneklerden birini seçin:

    • Bildirim oluşturucuyu açın, ardından sayfanın alt kısmındaki BigQuery'ye Eriş'i tıklayın.

    • Firebase konsolundaki Entegrasyonlar sayfasından, BigQuery kartında Bağlantı'yı tıklayın.

      Bu sayfa, projedeki tüm FCM özellikli uygulamalar için FCM dışa aktarma seçeneklerini görüntüler.

  2. BigQuery'yi etkinleştirmek için ekrandaki talimatları izleyin.

Daha fazla bilgi için Firebase'i BigQuery'ye Bağlama bölümüne bakın.

Projenizi BigQuery'ye bağladıktan sonra:

  • Firebase , verilerinizi BigQuery'ye aktarır . Verilerin dışa aktarma için ilk yayılımının tamamlanmasının 48 saate kadar sürebileceğini unutmayın.

  • Firebase, verilerinizin Firebase projenizden BigQuery'ye düzenli senkronizasyonlarını ayarlar. Bu günlük dışa aktarma işlemleri saat 4:00 PDT'de başlar ve tamamlanması on saat kadar sürebilir.

  • Varsayılan olarak, projenizdeki tüm uygulamalar BigQuery'ye bağlanır ve daha sonra projeye eklediğiniz tüm uygulamalar otomatik olarak BigQuery'ye bağlanır. Hangi uygulamaların veri gönderdiğini yönetebilirsiniz .

BigQuery dışa aktarmayı devre dışı bırakmak için Firebase konsolunda projenizin bağlantısını kaldırın .

Android'de mesaj teslimi verilerini dışa aktarmayı etkinleştir

FCM SDK 20.1.0 veya sonraki sürümlere sahip Android cihazlar, uygulamalarının mesaj teslimi verilerini dışa aktarmayı etkinleştirebilir. Veri dışa aktarma, uygulama düzeyinde varsayılan olarak devre dışıdır. Uygulama örneği düzeyinde program aracılığıyla etkinleştirilmesi, son kullanıcılardan mesaj teslim verilerini analiz etme izni istemenize olanak tanır (önerilir). Her ikisi de ayarlandığında, uygulama örneği düzeyi değeri, uygulama düzeyi değerini geçersiz kılar.

Bu seçenekleri etkinleştirmeden önce, BigQuery veri dışa aktarma bölümünde açıklandığı gibi projeniz için FCM-BiqQuery bağlantısını oluşturmanız gerekir.

Uygulama örnekleri için teslim verilerini dışa aktarmayı etkinleştir

Çoğu durumda, mesaj teslim verilerinin dışa aktarımını yalnızca uygulama örneği düzeyinde etkinleştirmenizi ve uygulama düzeyinde devre dışı bırakmanızı öneririz.

 FirebaseMessaging.getInstance().setDeliveryMetricsExportToBigQuery(true)

Bir uygulama için teslim verilerini dışa aktarmayı etkinleştir

Eğer uygulama düzeyinde ihraç edilmesini sağlayacak isterseniz, deme emin olun setDeliveryMetricsExportToBigQuery yöntemi ve uygulama manifest'te uygulama nesnesine aşağıdaki özelliği ekleyin:

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

BigQuery'ye hangi veriler aktarılır?

Eski jetonları veya etkin olmayan kayıtları hedeflemenin bu istatistiklerin bazılarını şişirebileceğini unutmayın.

Dışa aktarılan tablonun şeması:

_PARTITIONTIME ZAMAN DAMGAMI Bu sözde sütun, verilerin yüklendiği günün (UTC cinsinden) başlangıcı için bir zaman damgası içerir. YYYYMMDD bölümü için bu sözde sütun TIMESTAMP('YYYY-AA-GG') değerini içerir.
event_timestamp ZAMAN DAMGAMI Sunucu tarafından kaydedildiği şekliyle olay zaman damgası
Proje numarası TAM SAYI Proje numarası, mesajı gönderen projeyi tanımlar.
Mesaj Kimliği STRING Mesaj kimliği bir mesajı tanımlar. Uygulama Kimliği ve zaman damgasından oluşturulan ileti kimliği, bazı durumlarda genel olarak benzersiz olmayabilir.
instance_id STRING Mesajın gönderildiği uygulamanın örnek kimliği (mümkün olduğunda)
mesaj tipi STRING Mesajın türü. Bildirim mesajı veya Veri mesajı olabilir. Konu, bir konu veya kampanya gönderimi için orijinal mesajı tanımlamak için kullanılır; sonraki mesajlar ya bir bildirim ya da veri mesajıdır.
sdk_platform STRING Alıcı uygulamasının platformu
uygulama ismi STRING Android uygulamaları için paket adı veya iOS uygulamaları için paket kimliği
çöküş anahtarı STRING Daraltma anahtarı, daraltılabilecek bir grup mesajı tanımlar. Bir cihaz bağlı olmadığında, nihai teslimat için yalnızca belirli bir daraltma anahtarına sahip son mesaj kuyruğa alınır
öncelik TAM SAYI Mesajın önceliği. Geçerli değerler "normal" ve "yüksek"tir. iOS'ta bunlar APN öncelikleri 5 ve 10'a karşılık gelir
ttl TAM SAYI Bu parametre, cihaz çevrimdışıysa mesajın FCM deposunda ne kadar süreyle (saniye olarak) tutulması gerektiğini belirtir.
konu STRING İletinin gönderildiği konunun adı (varsa)
toplu_kimlik TAM SAYI Toplu kimlik, bir konuya belirli bir gönderme gibi bir grup ilgili iletiyi tanımlar.
Etkinlik STRING Olayın türü. Olası değerler şunlardır:
  • MESSAGE_ACCEPTED: mesaj FCM sunucusu tarafından alındı ​​ve istek geçerli;
  • MESSAGE_DELIVERED: mesaj, cihazdaki uygulamanın FCM SDK'sına teslim edildi. Varsayılan olarak, bu alan yayılmaz. Etkinleştirmek için setDeliveryMetricsExportToBigQuery(boolean) içinde sağlanan talimatları izleyin.
  • MISSING_REGISTRATIONS: eksik kayıt nedeniyle istek reddedildi;
  • UNAUTHORIZED_REGISTRATION: gönderenin kayda gönderme yetkisi olmadığı için mesaj reddedildi;
  • MESSAGE_RECEIVED_INTERNAL_ERROR: mesaj isteği işlenirken belirtilmemiş bir hata oluştu;
  • MISMATCH_SENDER_ID: mesajı gönderen gönderen kimliği ile son nokta için bildirilen kimlik arasındaki uyumsuzluk nedeniyle mesaj gönderme isteği reddedildi;
  • QUOTA_EXCEEDED: yetersiz kota nedeniyle ileti gönderme isteği reddedildi;
  • INVALID_REGISTRATION: geçersiz bir kayıt nedeniyle mesaj gönderme isteği reddedildi;
  • INVALID_PACKAGE_NAME: geçersiz bir paket adı nedeniyle mesaj gönderme isteği reddedildi;
  • INVALID_APNS_CREDENTIAL: geçersiz bir APNS sertifikası nedeniyle mesaj gönderme isteği reddedildi;
  • INVALID_PARAMETERS: geçersiz parametreler nedeniyle mesaj gönderme isteği reddedildi;
  • PAYLOAD_TOO_LARGE: sınırdan daha büyük bir yük nedeniyle mesaj gönderme isteği reddedildi;
  • AUTHENTICATION_ERROR: bir kimlik doğrulama hatası nedeniyle mesaj gönderme isteği reddedildi (mesajı göndermek için kullanılan API Anahtarını kontrol edin);
  • INVALID_TTL: geçersiz bir TTL nedeniyle mesaj gönderme isteği reddedildi.
analytics_label STRING HTTP v1 API ile , mesajı analitik amaçlarla işaretlemek için mesaj gönderilirken analitik etiketi ayarlanabilir

Dışa aktarılan verilerle ne yapabilirsiniz?

Aşağıdaki bölümlerde, dışa aktarılan FCM verilerinize karşı BigQuery'de çalıştırabileceğiniz sorgu örnekleri sunulmaktadır.

Uygulamaya göre gönderilen mesajları sayın

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;

Mesajlar tarafından hedeflenen benzersiz uygulama örneklerini sayın

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

Gönderilen bildirim mesajlarını sayın

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

Gönderilen veri mesajlarını sayın

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

Bir konuya veya kampanyaya gönderilen mesajları sayın

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

Belirli bir konuya gönderilen bir mesajın olaylarını izlemek için, bu sorguyu AND message_id != '' ile AND message_id = <your message id>; ile değiştirecek şekilde değiştirin AND message_id = <your message id>; .

Belirli bir konu veya kampanya için yayma süresini hesaplayın

Yayılma başlangıç ​​zamanı, orijinal isteğin alındığı zamandır ve bitiş zamanı, tek bir örneği hedefleyen son bireysel mesajın oluşturulduğu zamandır.

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;

Teslim edilen mesajların yüzdesi

0aaae9ac040

Belirli bir mesaj kimliği ve örnek kimliği için tüm olayları izleyin

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;

Belirli bir ileti kimliği ve örnek kimliği için hesaplama gecikmesi

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;