Mesaj önceliğini belirleme ve yönetme

Android'de alt akış iletilerine teslimat önceliği atamak için iki seçeneğiniz vardır: normal ve yüksek öncelik. Normal ve yüksek öncelikli iletilerin teslimi şu şekilde çalışır:

  • Normal öncelik Bu, veri ve bildirim mesajları için varsayılan önceliktir. Normal öncelikli iletiler, cihaz uyku modunda değilken hemen teslim edilir. Cihaz Doze modundayken, cihaz Doze modundan çıkana kadar pilden tasarruf etmek için teslimat gecikebilir. Yeni e-posta bildirimleri, kullanıcı arayüzünüzü senkronize tutma veya uygulama verilerini arka planda senkronize etme gibi daha az zamana duyarlı iletiler için normal teslimat önceliğini seçin.

  • Yüksek öncelikli.FCM, yüksek öncelikli mesajları hemen teslim etmeye çalışır. Bu sayede FCM, gerektiğinde uyuyan bir cihazı uyandırabilir ve sınırlı işlemeler (çok sınırlı ağ erişimi dahil) gerçekleştirebilir. Yüksek öncelikli mesajlar genellikle kullanıcının uygulamanızla veya bildirimleriyle etkileşimde bulunmasına neden olmalıdır.

Yüksek ve normal öncelikli iletiler arasında karar verme

Normal öncelikli iletiler genel güncellemeler için uygun olsa da acil konular veya işlemler için anında 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 cihazda alınan hem yüksek öncelikli hem de normal öncelikli iletiler için, ileti yükünün onMessageReceived işleyicisinde işlenmesi için birkaç saniye verilir. Yüksek öncelikli iletiler için normal öncelikli iletilere göre biraz daha fazla süre ayrılır. Bu sürenin yalnızca bildirimin anında 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öntemi içinde ek eşzamansız ağ çağrıları yapmamalı veya ayrı bir iş parçacığında yük işleme gerçekleştirmemelisiniz. Aksi takdirde, yük tam olarak işlenmeden önce uygulamanızın geçerli bir işlem yaşam döngüsünün dışında kalmasına neden olabilirsiniz. Bu durumda, gönderilen belirli FCM mesajlarının bildirimleri gecikebilir veya eksik olabilir.

İletinizi işlemek için ek süreye ihtiyacınız varsa (ör. ileti 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: Yüksek öncelikli bildiriminize öncelikli işlem süresi verildiğini doğrulamak üzere Android WorkManager kullanarak hızlandırılmış bir iş başlatın. Böylece bildiriminizin oluşturulmasının tamamlandığı doğrulanır. Yüksek öncelikli FCM işleme nedeniyle hızlandırılmış iş kotalarının tükenmesinden endişeleniyorsanız endişelenmenize gerek yok. Yüksek öncelikli bir FCM onMessageReceived gö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: Bunun yerine Android WorkManager kullanarak normal WorkRequest başlatın. Bu işlem, bildiriminizin işlenmesi için gereken ek çalışmanın, öncelikli işleme kullanılmadan ve gereksiz pil kullanımı sorunlarına neden olmadan sonunda işlenmesini sağlar.

İletilerin önceliğini ayarlama

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 yüksek olarak ayarlamayı görmek için aşağıdaki kod örneğini kullanabilirsiniz. Konsoldan gönderilen bildirimler için Android'e özgü 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ılar tarafından alındığında doğru şekilde alınmasını ve işlenmesini sağlamak için bildirimlerinizi test etmek üzere aşağıdaki talimatları uygulayın:

  1. Test your app with Doze (Uygulamanızı Doze ile test etme) bölümündeki talimatları kullanarak cihazınızı Doze moduna ayarlayın.
  2. Test cihazındaki uygulamanızdan FCM kayıt jetonunuza erişin. Jetonun nasıl kullanılacağı hakkında daha fazla bilgi için Arka plan uygulamasına test mesajı gönderme başlıklı makaleyi inceleyin.
  3. FCM jetonunu aldıktan sonra, FCM bildirim gönderme kodunuzu veya yüksek öncelikli bildiriminize uygun yapılandırma parametrelerine sahip bir cURL komutu kullanarak yüksek öncelikli bildiriminizi test cihazına gönderin.

Android'de yüksek öncelikli FCM öğesinin önceliğini düşürme

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, iletilerin kullanıcıya yönelik bildirimlere yol açmadığı bir kalıp tespit ederse iletilerinizin önceliği normal önceliğe düşürülebilir veya Google Play Hizmetleri tarafından işlenmek üzere devredilebilir.

FCM, iletilerin önceliğini düşürüp düşürmeyeceğini veya iletilere proxy uygulayıp uygulamayacağını belirlerken 7 günlük ileti 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ı tarafından görülebilecek şekilde gösteriliyorsa gelecekteki yüksek öncelikli mesajlarınız etkilenmez.

Google Play Hizmetleri ile bildirim temsilciliği

Belirli ölçütleri karşılayan yüksek öncelikli bildirim mesajları, önceliği düşürülmek yerine Google Play Hizmetleri tarafından proxy'lenir. Bu, uygulamayı başlatmaya gerek kalmadan Google Play Hizmetleri tarafından uygulama adına bildirimlerin gösterilmesi anlamına gelir. Bu işlem, Android cihazlarda genel olarak daha iyi bir kullanıcı deneyimi sağlamak için yapılır.

Proxy'li bildirim mesajlarının, alınan mesajlarla ilgili analizlerin nasıl raporlandığında değişikliklere neden olduğunu unutmayın:

  • Proxy'li bildirimlerle ilgili analizlerin raporlanması için uygulamanızın FCM SDK'sının 24.0.0 veya sonraki bir sürümünü kullanması gerekir.
  • Proxy'li bildirimler kullanıma sunulmadan önceki sayıya kıyasla, alınan mesaj sayısında gecikmeler veya düşüşler fark edebilirsiniz. Bunun nedeni, proxy'li bildirimlerin analizlerinin yalnızca uygulamanız başlatıldıktan sonra raporlanması ve bildirim uygulamanın açılmasına neden olmazsa hiç raporlanmamasıdır.

Bildirim mesajlarının bu şekilde proxy'lenmesi, Android Q+ ve 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'lenir ancak Firebase konsolu veya eski API'ler üzerinden gönderilen mesajlar proxy'lenmez. Bu özelliğin şu anda beta sürümünde olduğunu ve değişikliğe tabi olduğunu lütfen unutmayın.

Cihazın pili ve belleği açısından faydaları nedeniyle temsilci erişimini 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 manifestinize <meta-data android:name= "delivery_metrics_exported_to_big_query_enabled" android:value="false"/> yönergesini ekleyin.
  • Uygulama örneği temelinde: 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!> ayarını yapın.
  • İleti bazında: Gönderme isteği için AndroidNotification nesnesinde proxy anahtarını DENY olarak ayarlayın.

Android'de iletilerin önceliğinin düşürülmesini ölçme

  • Bireysel Mesajlar. Teslimat sırasında, getPriority() işlevinden alınan teslim edilen önceliği getOriginalPriority() işlevinden alınan orijinal önceliğiyle karşılaştırarak tek bir iletinin ö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ı iletiler toplu veri raporlarına dahil edilmeyebilir ancak genel olarak iletilerin önceliğinin düşürülme oranları hakkında genel bir görünüm sunarlar. API'yi sorgulamak için daha fazla bilgi ve örnek kod için toplu yayın verileri hakkındaki makalemize bakın. Bu veriler API Explorer'dan da incelenebilir.

  • Proxy uygulanan bildirimler. Proxy'li bildirimler mevcut FCM veya GA teslim metriklerinde sayılmaz. Bu nedenle, bildirim teslim metriklerinde% 15'e kadar düşüş yaşayabilirsiniz. Proxy'li iletilerle ilgili rapor oluşturmak 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 iletilerle ilgili ayrıntıları bildirir.

Bildirimlerdeki gecikmelerle ilgili sorunları giderme

  • Uygulama örneğinizde bildirimlerin etkinleştirildiğinden emin olun. Kullanıcı, uygulamanızın 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ğ aramaları 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 çağırmak, 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örüntüleyin. Android'de uygulama içi ek içerikler için senkronizasyon yapmanız gerekiyorsa bu işlemi arka planda gerçekleştirmek üzere WorkManager ile bir görev planlayabilirsiniz.