FCM mesajın teslimi fikir sahibi olmak yardım araçları üç set sağlamaktadır:
- Firebase konsol mesajı iletim raporları
- Firebase Bulut Mesajlaşma Veri API Toplanan Android SDK teslim ölçümlerini
- Google BigQuery'ye Kapsamlı veri ihracat
bu sayfada açıklanan raporlama araçları tüm işleve amacıyla Google Analytics gerektirir. Google Analytics proje için etkin değilse, sen bunu ayarlayabilirsiniz entegrasyonlar da Firebase proje ayarlarının sekme.
Bu sayfadaki istatistiklerin birçok raporlanması nedeniyle analitik verilerin harmanlanmasından 24 saat gecikmeleri konuyu olduğunu unutmayın.
İleti iletim raporları
Gelen Raporlar Firebase konsolunda sekmesi, size Bildirimler besteci ve FCM API'ler üzerinden bu gönderilenle dahil Android veya Apple platformu FCM SDK'larıyla, gönderilen mesajlar için aşağıdaki verileri görüntüleyebilir:
- Gönderir - veri mesajı veya bildirim mesajı teslimatı için kuyruğa edilmiş veya başarılı teslimat için APN gibi bir üçüncü taraf hizmetine geçirildi. Bkz Bir mesajın ömrünü daha fazla bilgi için.
- (Sadece Android cihazlarda kullanılabilecek) Alındı - veri mesajı veya bildirim mesajı uygulaması tarafından alınmıştır. alıcı Android cihazı FCM SDK 18.0.1 sahiptir ya da daha yüksek yüklü olduğunda bu veriler mevcuttur.
- (Yalnızca Android cihazlarda bildirim mesajları için kullanılabilir) Gösterimler - Uygulama arka planda açıkken ekran bildirim cihazda gösterilmiştir.
- Açılış - kullanıcı bildirim mesajı açtı. yalnızca uygulama arka planda olduğunda alınan bildirimler için bildirilmiş.
Bu veriler, bir bildirim yükü ve etiketli tüm mesajlar için kullanılabilir veri mesajlarının . Bkz Etiketler hakkında daha fazla bilgi edinmek için iletilere analitik etiketleri ekleme .
mesajı Raporları görüntülerken veri CSV olarak dışa seçeneğiyle birlikte görüntülenen için, bir tarih aralığı ayarlayabilirsiniz. Ayrıca bu kriterlere göre filtreleme yapabilirsiniz:
- Platformu (iOS veya Android)
- Uygulama
- Özel analitiği etiketler
analitik ekleme iletilere etiketler
mesajları etiketlemek, etiket veya etiket kümeleri tarafından yayınlanma istatistiklerini filtrelemek için izin özel analiz için çok yararlıdır. Sen ayarlayarak HTTP v1 API yoluyla gönderilen herhangi iletiye etiket ekleyebilirsiniz fcmOptions.analyticsLabel
alanına mesajı nesne veya platforma özel AndroidFcmOptions
veya ApnsFcmOptions
alanlar.
Analytics etiketleri biçiminde metin dizeleri ^[a-zA-Z0-9-_.~%]{1,50}$
. Etiketler alt ve üst harf, sayı ve aşağıdaki simgeleri içerebilir:
-
-
-
~
-
%
Maksimum uzunluk 50 karakterdir. Günde 100 benzersiz etiket belirtebilirsiniz; bu sınırın ötesine eklenen etiketlerle mesajlar bildirilmez.
Raporlar sekmesini mesajlaşma Firebase konsolunda, var olan tüm etiketlerin listesini arama ve tek veya istatistik görüntülenen filtrelemek için birlikte uygulayabilirsiniz.
FCM Veri API üzerinden bir araya toplanan iletim verileri
Firebase Bulut Mesajlaşma Data API Eğer Android uygulamaları hedeflenebilir mesaj isteklerinin sonuçları anlamanıza yardımcı olabilir bilgilerini almak sağlar. API projedeki tüm veri toplama özellikli Android cihazdaki verileri toplanan sağlar. Kaç ileti gecikmesine veya içinde bırakılan yanı sıra bu gecikmeden teslim mesajların yüzde hakkındaki ayrıntılar bulunuyor Android Taşıma Katmanı . Bu verileri değerlendiren mesajı teslimat ve size gönderme istekleri performansını artırmak için etkili yollar bulmak yardım geniş eğilimleri ortaya çıkarabilir.
API belirli bir uygulama için kullanılabilir tüm veri sağlar. Bkz API referans belgeleri .
Nasıl veri bozuldu?
Teslim veri uygulaması, tarih ve tarafından bozuldu analiz etiket . API çağrısı tarih, uygulama ve analiz etiketin her kombinasyon için verileri döndürür. Örneğin, tek bir androidDeliveryData
JSON nesnesi şu şekilde görünecektir:
{
"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
}
}
Ölçümleri'ni yorumlama nasıl
Teslimat verileri aşağıdaki ölçümlerin her birini uygun mesajların yüzde özetliyor. Tek bir mesaj birden çok ölçü uyuyor olması mümkündür. Yüzdeler aşağıda toplamının% 100 olmaz bu yüzden veri ve biz ölçümleri toplanmış hangi ayrıntı düzeyini toplamak nasıl sınırlamalarından dolayı, bazı mesaj sonuçları, hiç metriklerdeki temsil edilmemektedir.
Sayım Mesajları Kabul
Sadece veri kümesi dahil sayısı Android cihazlar teslim edilmek üzere FCM tarafından kabul edildi mesajların sayısıdır. Bütün yüzdeler payda olarak bu değeri kullanın. Bu sayım cihazlarında kullanım toplama ve teşhis bilgilerini devre dışı bırakan kullanıcılara hedeflenen iletileri içermez unutmayın.
İleti Sonuç Yüzdeler
Bulunan alanların MessageOutcomePercents
mesajı isteklerinin sonuçları hakkında bilgi vermek nesnesi. kategorileri tüm dışlar. Bu "İletilerimin teslim ediliyor?" Gibi sorulara cevap verebilir ve "Ne iletileri neden olan kesilmesini?"
Örneğin, için yüksek bir değer droppedTooManyPendingMessages
alan uygulama örnekleri hacimleri almalarını sinyal olabilir katlanamayan mesajları 100 bekleyen mesaj FCM sınırını aşan. Bu azaltmak için, mutlaka uygulama kolları çağrı yapmak onDeletedMessages
ve katlanabilir mesaj gönderme düşünün. Benzer şekilde, yüksek yüzdeler droppedDeviceInactive
bayat belirteçleri çıkarmadan ve konular onları aboneliği iptal, sunucu üzerinde güncelleme kaydı jeton bir sinyal olabilir. Bkz FCM kayıt belirteçleri Yönetme bu alanda en iyi uygulamalar için.
Teslim Performans okta
Alanlar DeliveryPerformancePercents
başarıyla teslim edildi mesajları hakkında bilgi vermek nesnesi. Bu "İletilerimin gecikmeli mıydı?" Gibi sorulara cevap verebilir ve "Neden mesajlar gecikiyor?" Örneğin, için yüksek bir değer delayedMessageThrottled
açıkça aşan olduğunu işaret eder cihaz başına azami limitleri ve mesaj göndermek hızlarını ayarlamak gerekir.
İleti Insight Percentagess
Bu nesne tüm mesaj gönderir konusunda ek bilgi sağlar. priorityLowered
alan öncelik gelen indirdi kabul mesajların yüzdesini ifade HIGH
için NORMAL
. Bu değer yüksek ise, daha az yüksek öncelikli mesajlar göndermeyi deneyin veya yüksek öncelikli mesajı gönderildiğinde her zaman bir bildirim görüntüler emin olun. Bkz fazla bilgi için mesaj önceliği bizim belgelere
Bu nasıl veri BigQuery'e ihraç verilerden farklıdır?
BigQuery verme cihaz (Aşama 2 ve 4 SDK'sında FCM arka ucu tarafından mesaj kabul ve mesaj teslimatı ile ilgili tek bir ileti günlükleri içerir FCM Mimarisi ). Bu veri kabul ve teslim edildi tek tek mesajları sağlanması için yararlıdır. Hakkında daha fazlasını okuyun BigQuery veri ihracat sonraki bölümde.
Buna karşılık, Firebase Bulut Mesajlaşma Veri API Android Taşıma Katmanı (veya Adım 3'te özellikle ne olduğu hakkında ayrıntı toplanmış sağlar FCM Mimarlık ). Bu veriler özellikle Android SDK FCM backends gelen mesajların iletimine ilişkin bilgi sağlar. Bu mesajlar gecikmiş veya bu taşıma esnasında düştü neden olarak eğilimleri göstermek için özellikle yararlıdır.
Bazı durumlarda, iki veri kümesi nedeniyle aşağıdakilere tam aynı olmayabilir mümkündür:
- birleştirilmiş ölçümler yalnızca tüm mesajların bir kısmını örnek
- birleştirilmiş metrikleri yuvarlatılmış
- Biz bir gizlilik eşiğinin altında değil, mevcut ölçümlerini yapmak
- mesajı sonuçların bir kısmı biz trafiğin büyük hacimli yönetmek nasıl optimizasyonlar nedeniyle eksik.
API sınırlamaları
Veri Gecikme
Bu API tarafından döndürülen veri 5 güne kadar geciktirilir edilecektir. Örneğin, 10 Ocak'ta, 5 Ocak için veriler olmayabilir, ama 6 Ocak için ya da geç olacaktır. Ayrıca, veri iyi çaba sağlanmaktadır. Bir veri kaybı durumunda, FCM öne düzeltmek için çalışacak ve dolgu koyulduktan sonraki veriler sabittir olmayacaktır. Daha büyük kesintileri, veri bir hafta veya daha uzun süre kullanım dışı olabilir.
Veri Kapsamı
Firebase Bulut Mesajlaşma Veri API tarafından sağlanan ölçümlerini mesaj teslimat geniş eğilimleri hakkında fikir sağlamak içindir. Ancak, hepsi mesaj senaryoları% 100 kapsama vermeyin. Aşağıdaki senaryolar sonuçlar bilinen metrik yansıtılmaz.
Daraltılmış Mesajlar
Edilmiş mesajlar çöktü başka mesajla veri kümesi görünmüyor.
İnaktif cihazlara iletiler
inaktif cihazlara gönderilen mesajlar veya aldıkları hangi veri yolu bağlı veri kümesi gösterilmez veya olmayabilir. Bu bazı yanlış sayma yol açabilir droppedDeviceInactive
ve pending
alanları.
Belirli kullanıcı tercihlerine sahip cihazlara iletiler
kullanım ve cihazlarında teşhis bilgilerinin toplanmasını devre dışı bırakan kullanıcılar, mesajlarının tercihlerine uygun olarak, bizim sayma dahil olmayacaktır.
Yuvarlama ve Minimumları
FCM kasten mermi ve dışlayan hacimleri yeterince büyük olmayan sayar.
BigQuery veri ihracat
Sen içine mesaj veri verebilirsiniz BigQuery'e daha fazla analiz için. BigQuery Eğer BigQuery SQL kullanarak verileri analiz başka bir bulut sağlayıcısına dışa veya özel ML modelleri için veri kullanmak için izin verir. BigQuery'ye bir ihracat bakılmaksızın mesaj tipi veya mesaj API veya Bildirimler besteci yoluyla gönderilen olsun, mesajlar için mevcut tüm verileri içerir.
Aşağıdaki FCM SDK asgari sürümleri ile cihazlara gönderilen mesajlar için uygulamanız için mesaj iletim veri aktarımını mümkün kılmak için ek seçenek var:
- Android 20.1.0 veya üstü.
- IOS 8.6.0 ya da daha yüksek
- Firebase Web SDK 9.0.0 ya da daha yüksek
Veri etkinleştirerek ilgili ayrıntılar için aşağıya bakın Android ve iOS .
Başlamak için BigQuery'ye projenizi bağlantı:
Aşağıdaki seçeneklerden birini seçin:
Aç Bildirimler besteci , ardından sayfanın alt kısmında Erişim BigQuery'yi tıklayın.
Gönderen Entegrasyonları Firebase konsolundaki sayfasında, BigQuery kartta Linki tıklayın.
projedeki tüm FCM özellikli uygulamalara yönelik Bu sayfa görüntüler FCM ihracat seçenekleri.
BigQuery'yi etkinleştirmek için ekrandaki talimatları izleyin.
Bakınız BigQuery'ye Bağlantı Firebase fazla bilgi için.
Ne zaman Cloud Messaging için BigQuery ihraç edilmesini sağlayacak:
Firebase verilerinizi ihraç BigQuery'ye. İhracat ilk veri dağıtılmasının 48 saat kadar sürebilir.
- Şunları yapabilirsiniz elle zamanlama verileri Dolgularda son 30 gün up.
Veri kümesi oluşturulduktan sonra, konum değiştirilemez, ancak farklı bir konuma veri kümesi kopyalamak veya elle farklı bir konumda (oluşturmanızı) veri kümesi taşıyabilirsiniz. Daha fazla bilgi için bkz değiştir veri kümesi konumu .
BigQuery'ye senin Firebase projesinden verilerinizin düzenli senkronizasyon kadar Firebase setleri. Bu günlük ihracat operasyonları 04:00 Pasifik Saati başlar ve genellikle 24 saat içinde bitirmek.
Varsayılan olarak, projedeki tüm uygulamalar BigQuery'ye bağlantılı ve herhangi daha sonra otomatik BigQuery'ye bağlantılıdır projeye eklediğiniz uygulamalar vardır. Sen edebilirsiniz uygulamalar veri göndermek hangi yönetmek .
BigQuery ihracat devre dışı bırakmak için, projenizi bağlantısını kaldırmak Firebase konsolunda.
mesajın gönderilmesi veri ihracat etkinleştirme
FCM SDK 8.6.0 veya daha yüksek olan iOS cihazlar onların uygulamanın mesaj iletim veri ihracat etkinleştirebilirsiniz. FCM hem uyarı ve arka plan bildirimleri için veri dışarıdan alır. Açıklandığı gibi bu seçenekleri etkinleştirmeden önce, ilk olarak proje için FCM-BiqQuery bağlantı oluşturmak gerekir BigQuery veri ihracat .
uyarı bildirimleri için yayınlanma verileri ihracat etkinleştirme
Sadece uyarı bildirimleri bildirim hizmeti uygulama uzantıları tetikleyebilir Çünkü, uygulamanız bir bildirim servisi uzantısı eklemek ve ekran mesajı takibini sağlamak için bir servis uzantısı içinde bu API çağırmalıdır. Apple'ın belgelerine bakın Yeni Teslim bildirimleri değiştirme İçeriğine .
Aşağıdaki çağrı alınan her bildirimde yapılmalıdır:
Süratli
// 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
Kullandığınız gönderme isteklerini bina varsa, HTTP v1 API belirtmek için emin olun mutable-content = 1
de yük nesnesi .
arka plan bildirimleri için teslimat veri ihracat etkinleştirme
Uygulamanın ön veya arka planda olduğunda arka plan mesajları alınan için, ana uygulama verileriniz mesajı işleyicisi içinde veri ihracat API çağırabilirsiniz. Bu çağrı alınan her bildirimde yapılmalıdır:
Süratli
// 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
Hangi veriler BigQuery'ye ihraç edilmektedir?
bayat jetonları veya etkin olmayan kayıtları hedef alan bu istatistiklerin bazılarını şişirmek olabileceğini unutmayın.
ihraç tablonun şeması yer almaktadır:
_PARTITIONTIME | TIMESTAMP | Bu sözde sütun veri yüklenmiştir ki burada (UTC) Gün başlaması için bir zaman damgası içerir. YYYYMMDD'NIN bölümü için, bu sözde sütun değeri ZAMAN ( 'YYYY-AA-DD) içerir. |
event_timestamp | TIMESTAMP | Sunucu tarafından kaydedildiği şekliyle Olay damgası |
Proje numarası | INTEGER | proje numarası mesajı gönderen projeyi tanımlayan |
Mesaj Kimliği | SİCİM | Mesaj Kimliği Mesaj tanımlar. App ID ve zaman damgası Elde Edilen, mesaj kimliği, bazı durumlarda, genel olarak benzersiz olmayabilir. |
instance_id | SİCİM | mesajı gönderilir uygulamanın benzersiz kimlik (varsa). Bir örnek numarası veya Firebase yükleme kimliği olabilir. |
mesaj tipi | SİCİM | mesajın türü. Bildirim mesajı veya Veri mesajı olabilir. Konuda bir konu veya kampanya gönderme için orijinal mesajı tanımlamak için kullanılır; takip eden mesajlar, ya bir bildirim veya veri mesajı. |
sdk_platform | SİCİM | Alıcı uygulamanın platformu |
uygulama ismi | SİCİM | Android için paket adı uygulamaları veya iOS uygulamaları için paket kimliği |
collapse_key | SİCİM | çökme anahtar katlanabilir mesajların bir grubu tanımlar. Bir aygıt bağlı değilse, belirli bir kapatma anahtarına sahip sadece son mesajı nihai teslimat için sıraya alındı |
öncelik | INTEGER | İletinin önceliği. Geçerli değerler "normal" ve "yüksek". iOS'ta APN bu karşılık gelir öncelikleri 5 ve 10 |
ttl | INTEGER | Cihaz çevrimdışı ise mesaj FCM depolama tutulmalıdır ne kadar (saniye cinsinden) Bu parametre belirtir |
başlık | SİCİM | Bir ileti gönderildiği adrese konunun adı (varsa) |
bulk_id | INTEGER | kütle numarası gibi bir konuya özel bir gönderme gibi ilgili mesajları, bir grubunu tarif etmektedir |
Etkinlik | SİCİM | Olayın türü. Olası değerler şunlardır:
|
analytics_label | SİCİM | İle HTTP v1 API analiz amaçlı mesaj işaretlemek için, mesaj gönderirken, analitik etiket kümesi olabilir |
Dışa verilerle ne yapabilir?
Aşağıdaki bölümlerde aktarılan FCM verilerine karşı BigQuery'de çalışabileceği sorgu örnekleri sunuyoruz.
Uygulama tarafından 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 hedeflediği için 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';
Sayım bildirim mesajları gönderdi
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 konu 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 konu gönderilen bir mesaj için olayları takip etmek için değiştirmek için bu sorguyu değiştirin AND message_id != ''
VE message_id ile AND message_id = <your message id>;
.
belirli bir konu ya da kampanya için Compute ikiye bölme süresi
Orijinal istek alındığında ikiye bölme başlangıç zamanı ve bitiş zamanı tek bir örneğini hedefleyen son bireysel mesajı oluşturulur 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;
gelen mesaj yüzdesini Sayısı
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;
Verilen mesaj kimliği ve örnek kimliği için tüm olayları takip
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;
Verilen mesaj kimliği ve örnek kimliği için gecikme hesaplayın
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;