Android'de aşağı akış mesajlarına 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, cihaz dozdan çıkana kadar pil tasarrufu yapmak için 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 teslimat süresi Doze modundan etkilenebileceğinden, kullanıcı tarafından görülebilen bildirimlerinizin çoğunu yüksek öncelikli olarak ayarlamak, bunların zamanında teslim edilmesini sağlar. Ö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 mesajlar için mesaj 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 bir bildirimi hemen oluşturmaya yetecek kadar uzun 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şlemeli ve onMessageReceived yönteminde hemen bir bildirim göstermelisiniz. 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ı işlemek 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 amacıyla WorkManager gibi bir yapı veya ön plan hizmeti kullanmanız gerekir. Bildirimlerinizin tamamen işlendiğini doğrulamak için onMessageReceived yöntemini geçersiz kıldığınızda aşağıdaki kılavuzu 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. Yüksek öncelikli FCM işleme nedeniyle yüksek öncelikli iş kotalarını tüketmekten endişeleniyorsanız endişelenmenize gerek yok. Yüksek öncelikli bir FCMonMessageReceivedgönderildikten hemen sonra planlanan yüksek öncelikli işler için kısa 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.
Mesajlar için öncelik ayarlama
Admin SDK, FCM REST API 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 yüksek olarak ayarlamak 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 plandaki bir uygulamaya 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 önceliğinin düşürülmesi
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ılara yönelik bildirimlerle sonuçlanmalı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 yetkilendirilebilir.
FCM, mesajların önceliğini düşürme veya proxy'ye alma kararı verirken 7 günlük mesaj davranışını kullanır. Bu kararı, uygulamanızın her örneği için bağımsız olarak verir. 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 yetkilendirmesi
Belirli ölçütleri karşılayan yüksek öncelikli bildirim mesajları, öncelikleri düşürülmek yerine Google Play Hizmetleri tarafından proxy'ye yönlendirilir. Bu, bildirimlerin uygulama başlatılmadan Google Play Hizmetleri tarafından uygulama adına gösterildiği anlamına gelir. Bu, Android cihazlarda genel olarak daha iyi bir kullanıcı deneyimi sunmak 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.
Yetki devrini, cihazın piline ve belleğine sağladığı avantajlar nedeniyle etkin durumda bırakmanızı önemle tavsiye ederiz. Ancak bu davranışı devre dışı bırakmak isterseniz aşağıdaki yöntemlerden birini kullanabilirsiniz:
- 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
AndroidNotificationnesnesindeproxyanahtarınıDENYolarak ayarlayın.
Android'de mesaj önceliğini düşürme oranını ö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 Aggregate Delivery Data API, Android'e gönderdiğiniz tüm mesajların yüzde kaçının önceliğinin düşürüldüğünü raporlayabilir. 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. Daha fazla bilgi ve API'yi sorgulamak için örnek kod için toplu yayın verileri hakkındaki makalemize bakın. Bu verileri API Gezgini'nden de 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 bildirimlerinizin hiçbiri yayınlanmaz. Bu nedenle, 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şlem 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çerikleri senkronize etmeniz gerekiyorsa bu işlemi arka planda gerçekleştirmek için WorkManager ile bir görev planlayabilirsiniz.