Android'de alt akış iletilerine yayınlanma önceliği atamak için iki seçeneğiniz vardır: normal ve yüksek öncelik. Normal ve yüksek öncelikli mesajların teslimatı şu şekilde gerçekleşir:
Normal öncelikli. Bu, veri ve bildirim mesajları için varsayılan önceliktir. Normal öncelikli mesajlar, cihaz uyku modunda değilken hemen teslim edilir. Cihaz Doz modundayken, pil tasarrufu için cihaz doz modundan çıkana kadar teslimat gecikebilir. Yeni e-posta bildirimleri, kullanıcı arayüzünüzü senkronize tutma veya uygulama verilerini arka planda senkronize etme gibi zamana duyarlı olmayan mesajlar için normal yayınlanma önceliğini seçin.
Yüksek öncelik.FCM, yüksek öncelikli mesajları hemen teslim etmeye çalışır. Bu sayede FCM, gerektiğinde uyku modundaki bir cihazı uyandırabilir ve bazı sınırlı işlemleri (çok sınırlı ağ erişimi dahil) çalıştırabilir. Yüksek öncelikli mesajlar genellikle kullanıcının uygulamanızla veya bildirimleriyle etkileşim kurmasını sağlamalıdır.
Yüksek ve normal öncelikli mesajlar arasında karar verme
Normal öncelikli mesajlar genel güncellemeler için uygundur. Acil konular veya işlemler için hemen teslimat sağlamanız gerektiğinde yüksek önceliği seçin. Normal öncelikli mesajların teslim süresi Doze modundan etkilenebileceğinden, kullanıcıların görebileceği bildirimlerinizin çoğunu yüksek öncelikli olarak ayarlarsanız bu bildirimlerin zamanında teslim edilmesini sağlayabilirsiniz. Örneğin, sohbet mesajları, hesapla ilgili sorunlar veya yemek teslimatı güncellemeleri gibi bildirimler yüksek öncelikli olarak ayarlanmalıdır.
Yüksek ve normal öncelikli iletiler için ileti işleme
Android cihazlarda alınan hem yüksek öncelikli hem de normal öncelikli mesajlar için onMessageReceived işleyicisinde mesaj yükünü işlemek üzere birkaç saniye verilir. Yüksek öncelikli mesajlara normal öncelikli mesajlara kıyasla biraz daha fazla zaman ayrılır. Bu sürenin yalnızca bildirimin hemen oluşturulması için yeterli olması beklenir. Cihaz depolama alanından resim yükleme veya ek içerik toplamak için sunucularınızı çağırma gibi ek işlemler yapmanız gerekiyorsa ek adımlar uygulamanız gerekir.
onMessageReceived yöntemi ayrı bir çalışan iş parçacığında çağrılır. En iyi uygulama olarak, ileti yükünü işleyip onMessageReceived yönteminde hemen bir bildirim göstermeniz gerekir. onMessageReceived yönteminde ayrı bir iş parçacığında ek eşzamansız ağ çağrıları yapmamanız veya yük işleme yapmamanız gerekir. Aksi takdirde, yük tam olarak işlenmeden önce uygulamanız geçerli bir işlem yaşam döngüsünün dışında kalabilir. Bu durumda, gönderilen bazı FCM mesajlarının bildirimlerinin geciktiğini veya eksik olduğunu görebilirsiniz.
Mesajınızın işlenmesi için ek süreye ihtiyacınız varsa (ör. mesaj yükünüzde bulunan bir imageUrl öğesini getirmek için) uygulama yaşam döngüsünü uzatmak üzere WorkManager veya ön plan hizmeti gibi bir yapı kullanmanız gerekir. Bildirimlerinizin tamamen işlendiğini doğrulamak için onMessageReceived yöntemini geçersiz kılarken aşağıdaki yönergeleri kullanmanız gerekir.
- Yüksek öncelikli bildirimler için: Android
WorkManagerkullanarak yüksek öncelikli iş başlatın. Böylece, yüksek öncelikli bildiriminizin öncelikli işleme süresi aldığını ve bildirim oluşturma işleminin tamamlandığını doğrulayabilirsiniz. İyi haber şu ki, yüksek öncelikli FCM işleme nedeniyle hızlandırılmış iş kotalarının tükenmesinden endişelenmenize gerek yok. Yüksek öncelikli bir FCMonMessageReceivedgönderildikten hemen sonra planlanan hızlandırılmış işler için kısa süreli bir muafiyet vardır. - Normal öncelikli bildirimler için: Android
WorkManagerkullanarak normal birWorkRequestbaşlatın. Bu sayede, bildiriminizi işlemek için gereken ek çalışma, öncelikli işleme kullanılmadan ve gereksiz pil kullanımı sorunlarına neden olmadan işlenir.
İletilere öncelik verme
Admin SDK, FCM REST API'si ve Firebase konsolunu kullanarak kullanıcılarınıza bildirim gönderebilirsiniz. Admin SDK ve FCM REST API'den öncelik ayarınızı değiştirmek için mesaj JSON yükünü güncellemeniz gerekir. Önceliği nasıl yüksek olarak ayarlayacağınızı görmek için aşağıdaki kod örneğini kullanabilirsiniz. Konsoldan gönderilen bildirimler için Android'e özel bildirim alanlarının ayarlanması desteklenmez.
{
"message": {
"notification": {
"body": "Purchase exceeding $500 detected",
"title": "Credit card purchase"
},
"data": {
"purchaser": "Your child",
"items": "Gravity Defier Sneakers"
},
"android": {
"priority": "high"
},
"apns": {
"headers": {
"apns-priority": "5"
}
}
}
}
Yüksek öncelikli bildirimlerinizi Doze modunda test etme
Yüksek öncelikli bildirimlerinizin kullanıcı tarafından alındığında doğru şekilde alındığından ve işlendiğinden emin olmak için bildirimlerinizi test etmek üzere aşağıdaki talimatları uygulayın:
- Uygulamanızı Doze ile test etme bölümündeki talimatları uygulayarak cihazınızı Doze moduna ayarlayın.
- Test cihazındaki uygulamanızdan FCM kayıt jetonunuza erişin. Jetonu nasıl alacağınız hakkında daha fazla bilgi için Arka plan uygulamasına test mesajı gönderme başlıklı makaleyi inceleyin.
- FCM jetonunu aldıktan sonra, FCM bildirim gönderme kodunuzu veya yüksek öncelikli bildiriminizle eşleşen yapılandırma parametrelerine sahip bir cURL komutunu kullanarak yüksek öncelikli bildiriminizi test cihazına gönderin.
Android'de yüksek öncelikli FCM için önceliği kaldırma
Android'deki yüksek öncelikli mesajlar, zamana duyarlı ve kullanıcı tarafından görülebilen içerikler için tasarlanmıştır ve kullanıcıya yönelik bildirimlere yol açmalıdır. FCM, mesajların kullanıcılara yönelik bildirimlerle sonuçlanmadığı bir kalıp algılarsa mesajlarınızın önceliği normal önceliğe düşürülebilir veya Google Play Hizmetleri tarafından işlenmek üzere yetki verilebilir.
FCM, mesajların önceliğini düşürüp düşürmeyeceğini veya mesajları proxy'ye yönlendirip yönlendirmeyeceğini belirlerken 7 günlük mesaj davranışını kullanır. Bu belirlemeyi uygulamanızın her örneği için bağımsız olarak yapar. Yüksek öncelikli mesajlara yanıt olarak bildirimler kullanıcıya görünür şekilde gösteriliyorsa gelecekteki yüksek öncelikli mesajlarınız etkilenmez.
Google Play Hizmetleri ile bildirim temsilcisi
Belirli ölçütleri karşılayan yüksek öncelikli bildirim iletileri, önceliği düşürülmek yerine Google Play Hizmetleri tarafından proxy'lenir. Bu, bildirimlerin Google Play Hizmetleri tarafından uygulama adına, uygulamayı başlatmaya gerek kalmadan gösterildiği anlamına gelir. Bu, Android cihazlarda daha iyi bir genel kullanıcı deneyimi sağlamak için yapılır.
Proxy bildirim mesajlarının, alınan mesajlarla ilgili analizlerin raporlanma şeklinde değişikliklere yol açtığını unutmayın:
- Proxy'li bildirimlerle ilgili analizlerin raporlanabilmesi için uygulamanızın FCM SDK'sının 24.0.0 veya sonraki bir sürümünü kullanması gerekir.
- Alınan mesaj sayısında, proxy bildirimlerin kullanıma sunulmasından önceki sayıya kıyasla gecikmeler veya düşüşler görebilirsiniz. Bunun nedeni, proxy bildirimleriyle ilgili analizlerin yalnızca uygulamanız başlatıldığında raporlanması ve bildirim, uygulamanın açılmasıyla sonuçlanmazsa hiç raporlanmamasıdır.
Bildirim mesajlarının bu şekilde proxy'lenmesi, Android Q ve sonraki sürümler ile Google Play Hizmetleri'nin 19054000 veya sonraki sürümlerini kullanan uygulamalar için varsayılan davranıştır. HTTP v1 API üzerinden gönderilen mesajlar proxy'den geçirilir ancak Firebase Konsolu veya eski API'ler üzerinden gönderilen mesajlar proxy'den geçirilmez. Bu özelliğin şu anda Beta sürümünde olduğunu ve değişikliğe tabi olduğunu unutmayın.
Cihazın pili ve belleği üzerindeki faydaları nedeniyle temsilci atama özelliğini etkin bırakmanızı önemle tavsiye etsek de bu davranışı aşağıdaki yöntemlerden herhangi biriyle devre dışı bırakabilirsiniz:
- Uygulama düzeyinde: Uygulama manifest dosyanıza
<meta-data android:name= "delivery_metrics_exported_to_big_query_enabled" android:value="false"/>yönergesini ekleyin. - Uygulama örneği bazında: Uygulama örneği için, belirli kullanım alanına bağlı olarak uygulamanızın kullanıcı arayüzü akışında
fun setNotificationDelegationEnabled(disable: Boolean): Task<Void!>değerini ayarlayın. - İleti bazında: Gönderme isteği için
proxyanahtarınıAndroidNotificationnesnesindeDENYolarak ayarlayın.
Android'de mesaj önceliğinin düşürülmesini ölçme
Bireysel Mesajlar. Teslimat sırasında, getPriority() ile elde edilen yayınlanma önceliğini getOriginalPriority() ile elde edilen orijinal önceliğiyle karşılaştırarak tek bir mesajın önceliğinin düşürülüp düşürülmediğini belirleyebilirsiniz.
Tüm Mesajlar FCM Toplu Teslim Verileri API'si, Android'e gönderdiğiniz tüm mesajların ne kadarının önceliğinin düşürüldüğünü bildirebilir. Bazı mesajlar birleştirilmiş veri raporlarına dahil edilmeyebilir ancak genel olarak bu raporlar, mesaj önceliğini düşürme oranlarına dair genel bir görünüm sunar. API'ye sorgu gönderme hakkında daha fazla bilgi ve örnek kod için toplu yayın verileri hakkındaki makalemize göz atın. Bu makaleyi API Gezgini'ndan da inceleyebilirsiniz.
Proxy bildirimleri. Proxy bildirimleri mevcut FCM veya GA yayınlama metriklerine dahil edilmez. Bu nedenle, bildirim yayınlama metriklerinde% 15'e varan bir düşüş yaşayabilirsiniz. Proxy'si oluşturulmuş mesajları raporlamak için FCM Aggregate Delivery Data API'yi kullanın.
ProxyNotificationInsightPercents, başarıyla proxy'lenen bildirimlerin yüzdesini ve başarıyla proxy'lenemeyen mesajlarla ilgili ayrıntıları bildirir.
Bildirim Gecikmeleriyle İlgili Sorunları Giderme
Uygulama örneğinizde bildirimlerin etkinleştirildiğinden emin olun. Kullanıcı, uygulamanız için bildirim iznini devre dışı bıraktıysa bildirimleriniz yayınlanmaz ve mesajlarınızın önceliği düşürülür. Bir uygulama örneğine yüksek öncelikli mesajlar göndermeden önce bildirimlerin etkinleştirildiğini doğrulamanız gerekir.
Bildiriminizi işlerken ek ağ çağrıları yapmaktan kaçının. Android mobil kullanıcılarının küçük bir kısmı yüksek gecikmeli ağlarda olduğundan, bildirim göstermeden önce sunucularınızla bağlantı açmaktan kaçının. İzin verilen işleme süresi sona ermeden önce sunucuyu geri aramak, yüksek gecikmeli ağlardaki kullanıcılar için riskli olabilir.
Bunun yerine, bildirim içeriğini FCM mesajına ekleyin ve hemen gösterin. Android'de ek uygulama içi içeriklerin senkronize edilmesi gerekiyorsa bu işlemi arka planda gerçekleştirmek için WorkManager ile bir görev planlayabilirsiniz.