Skip to main content
Push bildirimlerinizin bir cihazda görüntülendikten sonra başına gelenleri anlamak ve kontrol etmek için bu kılavuzu kullanın: tıklama ve kapatmanın ne yaptığı, Android’in bildirimleri ne zaman yeniden görüntülediği, rozetlerin nasıl senkronize kaldığı ve hangi SDK araçlarının tepsiyi uygulama kodunuzdan yönetmenize olanak tanıdığı. Bu sayfa mobil push’u (Android ve iOS) kapsar. Web push davranışı için Web push bildirim davranışı sayfasına bakın.

Tepsideki bildirim yaşam döngüsü

Bir cihazda görüntülenen her OneSignal bildirimi SDK tarafından izlenir. Sonrasında ne olduğu, bildirimin bir daha yeniden görünüp görünemeyeceğini belirler:
Android’de bildirimleri her zaman Android’in yerel NotificationManager.cancel() veya cancelAll() yöntemleri yerine OneSignal SDK yöntemleriyle temizleyin. Yerel API’lerle iptal edilen bildirimler kapatıldı olarak işaretlenmez, bu nedenle SDK uygulama bir sonraki yeniden başlatıldığında onları geri yükler.

Tıklama ve kapatma davranışı

Bir bildirime tıklamak, uygulamanızı (veya bildirimin launch URL’sini) açar, bildirimi tepsiden kaldırır ve bildirim payload’u ile tıklanan eylem düğmesi ID’siyle birlikte addClickListener() callback’ini tetikler. Tıklanan bildirim bir gruba aitse, SDK grup özetini günceller veya kaldırır. Tıklanan bildirimler asla geri yüklenmez. Bir bildirimi kapatmak (kaydırarak silmek veya tepside Tümünü temizle’ye dokunmak), bildirimi kapatıldı olarak işaretler ve rozet sayısını ile varsa grup özetini günceller. Kapatılan bildirimler asla geri yüklenmez. SDK bir kapatma dinleyicisi sağlamaz; kapatma dahili olarak izlenir. Uygulamanız ön plandayken görüntülenen bildirimler önce, görüntülemeyi engelleyebileceğiniz ön plan yaşam döngüsü dinleyicisinden geçer.

Geri yüklenen bildirimler (Android)

Android, bildirimleri kullanıcı eylemi olmadan zorla kaldırabilir: cihaz yeniden başlatıldığında, uygulama güncellendiğinde ve zorla kapatıldığında (bazı cihazlardaki agresif pil yöneticileri dahil). Android SDK, etkilenen bildirimleri uygulamanın bir sonraki soğuk başlatmasında otomatik olarak yeniden görüntüler (geri yükler), böylece kullanıcının hiç görmediği veya kapatmadığı teslim edilmiş mesajlar kaybolmaz. Geri yüklenen bildirimler, düşük önemli Restored kategorisinde sessizce yeniden görünür. Yalnızca tıklanmamış veya kapatılmamış, TTL’si içinde olan ve son 7 gün içinde alınan bildirimler geri yüklenir; en fazla 49 bildirim. Tam uygunluk kuralları ve kontroller Geri yüklenen bildirimler (Android) sayfasındadır. Geri yüklemeleri azaltmak için gönderirken daha kısa bir ttl kullanın veya tüketilen bildirimleri aşağıdaki SDK yöntemleriyle temizleyin. iOS’ta geri yükleme davranışı yoktur.

Rozet davranışı

iOS’ta rozetler bildirim payload’u tarafından ayarlanır (ios_badgeType ve ios_badgeCount) ve servis uzantısının sayıları doğru şekilde güncelleyebilmesi için bir App Group gerektirir. Varsayılan olarak SDK, uygulama açıldığında rozeti temizler. Android’de uygulama simgesi rozeti, tepsideki etkin OneSignal bildirimlerinin sayısını yansıtır ve bildirim kategorileri aracılığıyla yönetilir. SDK, bildirimler görüntülendiğinde, kapatıldığında, tıklandığında veya temizlendiğinde sayıyı otomatik olarak günceller ve clearAllNotifications() çağırdığınızda 0’a sıfırlar. Kurulum, platform başına seçenekler ve sorun giderme Rozetler sayfasında ele alınmıştır.

Bildirimleri programatik olarak temizleme

Bildirimleri, uygulama yaşam döngüsü olaylarında değil, içerikleri uygulamanızda tüketildiğinde temizleyin. Yaygın kalıplar:
  • İçerik tüketimi senkronizasyonu: kullanıcı, bildirimlerin işaret ettiği ekranı (bir gelen kutusu, mesaj merkezi veya etkinlik akışı) açar, bu nedenle bildirimler artık gereksizdir. Hepsini temizleyin veya yalnızca bir kısmı tüketildiyse hedefli yöntemleri kullanın.
  • Çıkış yapma: önceki kullanıcının bildirimlerinin bir sonraki kullanıcıya görünmemesi için her şeyi temizleyin.
“Tepsiyi temiz tutmak” için her uygulama başlatmasında veya ön plana geçişte temizlemekten kaçının. Tepsideki bildirimler yeniden etkileşimi sağlar ve onları temizlemek bu giriş noktasını ortadan kaldırır. Bildirim birikimini yönetiyorsanız, bildirimleri üst üste yığmak yerine değiştirmek için gönderirken collapse_id kullanın veya teslim edilmeyenlerin süresinin dolması için daha kısa bir TTL kullanın.

clearAllNotifications()

Uygulamanızın bildirimlerini tepsiden kaldırır ve rozet sayısını 0’a sıfırlar. Android’de bu, yalnızca OneSignal tarafından oluşturulan bildirimleri kaldırır ve geri yüklenmemeleri için onları kapatıldı olarak işaretler. iOS’ta bu, yerel bildirimler ve diğer sağlayıcılardan gelen push’lar dahil olmak üzere uygulamanızın teslim edilmiş tüm bildirimlerini kaldırır. Tam yöntem referansına bakın.
Geri yüklenen bildirimleri önlemek için uygulama başlatmasında temizliyorsanız, cross-platform uygulamalarda çağrıyı Android ile sınırlandırın. iOS’ta bu çağrı, yerel bildirimleri ve diğer sağlayıcılardan gelen push’ları da kaldırır.

removeNotification() ve removeGroupedNotifications() (Android)

Android bildirim ID’sine göre tek bir bildirimi veya grup anahtarına göre bir gruptaki tüm bildirimleri kaldırın. Kaldırılan bildirimler kapatıldı olarak işaretlenir ve geri yüklenmez. Bunları, birkaç konuşmadan yalnızca biri gibi, tepsi içeriğinin yalnızca bir kısmı tüketildiğinde kullanın. Yöntem referansına bakın.

Bildirimleri bir gecikme sonrasında otomatik olarak kapatma

Görüntülenen bir bildirimi belirli bir süre sonra kaldıran gönderim zamanı parametresi yoktur. Mümkün olanlar platforma göre farklılık gösterir:
  • Android 8.0 (API 26) ve üzeri: bir bildirim servis uzantısında setTimeoutAfter() kullanarak bir zaman aşımı ayarlayın. Zaman aşımı dolduğunda Android bildirimi gölgeden kaldırır. API 26’nın altındaki cihazlarda çağrı yoksayılır ve bildirim kullanıcı onunla etkileşime girene kadar kalır.
  • iOS: desteklenmez. iOS’un teslim edilmiş bir bildirimin süresini otomatik olarak sona erdirme yöntemi yoktur. En yakın seçenekler, collapse_id aracılığıyla onu daha yeni bir bildirimle değiştirmek veya daha sonraki bir push geldiğinde Apple’ın removeDeliveredNotifications(withIdentifiers:) yöntemiyle bir Notification Service Extension’dan kaldırmaktır.
Zaman aşımını kodda sabit olmak yerine mesaj başına yapmak için, süreyi additionalData içinde gönderin ve servis uzantınızda olaydan okuyun.
setTimeoutAfter() ile kaldırılan bir bildirim sistem tarafından kapatılır, bu nedenle OneSignal SDK’sı onu geri yüklemez. Bunu, teslim edilmemiş bir mesajın çevrimdışı bir cihazı ne kadar süre bekleyeceğini kontrol eden ve görüntülenen bir bildirimi asla kaldırmayan ttl ile karıştırmayın.

Bildirimleri servis uzantılarıyla özelleştirme

Servis uzantıları, bir bildirim görüntülenmeden önce çalışarak görünümünü değiştirmenize, arka plan verisi almanıza veya görüntülemeyi tamamen engellemenize olanak tanır:
  • Android’de INotificationServiceExtension uygulayın ve NotificationCompat seçeneklerini değiştirmek için setExtender() kullanın veya görüntülemeyi bastırmak için event.preventDefault() çağırın.
  • iOS’ta zengin medya, rozet artırmaları ve onaylı teslimat için bir UNNotificationServiceExtension (kurulum sırasında oluşturulan OneSignalNotificationServiceExtension) kullanın.
Android’de servis uzantınız geri yüklenen bildirimler için de çalışır. onNotificationReceived içindeki yan etkiler (analitik çağrıları, API istekleri, veritabanı yazmaları) bildirimler geri yüklendiğinde yeniden çalışır ve setChannelId() gibi extender değişiklikleri geri yüklemelere de uygulanır, bu da onların sesli uyarı vermesine neden olabilir. Uzantınızı, uyarı seçeneklerinin yalnızca yeni teslim edilen bildirimlere uygulanacağı şekilde tasarlayın.

SSS

Uygulama Android’de açıldığında eski bildirimler neden yeniden görünüyor?

Android SDK, cihaz yeniden başlatma, uygulama güncellemesi veya zorla kapatma sonrasında olduğu gibi, tepsiden zorla kaldırılan bildirimleri geri yükler. Kullanıcının kapattığı veya tıkladığı bildirimler geri yüklenmez. Uygunluk kuralları ve kontroller için Geri yüklenen bildirimler (Android) sayfasına bakın.

TTL süresi dolduğunda bildirimi tepsiden kaldırır mı?

Hayır. TTL, teslim edilmemiş bir mesajın çevrimdışı bir cihazı ne kadar süre bekleyeceğini kontrol eder ve Android’de hangi bildirimlerin geri yüklenebileceğini de sınırlar. Tepside zaten görüntülenen bir bildirimi asla kaldırmaz. Görüntülenen bildirimleri kaldırmak için temizleme yöntemlerini kullanın. Android’de belirli bir süre sonra kaldırmak için Bildirimleri bir gecikme sonrasında otomatik olarak kapatma bölümüne bakın.

Tepsiyi temizlemeden rozeti temizleyebilir miyim?

iOS’ta evet: rozet, uygulama açıldığında (devre dışı bırakılmadıysa) otomatik olarak temizlenir ve tepsi içeriği yerinde kalır. Android’de rozet tepsideki etkin bildirimleri yansıtır, bu nedenle onlardan bağımsız olarak ayarlanamaz. Rozetler sayfasına bakın.

Kullanıcı bir bildirimi kapattığında tetiklenen bir dinleyici var mı?

Hayır. SDK, kapatılan bildirimlerin geri yüklenmesini önlemek için kapatmayı dahili olarak izler, ancak bir kapatma olayı sunmaz. Tıklama dinleyicisi yalnızca tıklamaları kapsar.

Mobil SDK referansı

Bildirim yöntemleri ve dinleyicileri için tam referans.

OSNotification payload

Payload alanları ve geri yüklenen bildirim kuralları.

Mobil servis uzantıları

Görüntülemeden önce bildirimleri durdurun ve özelleştirin.