Apple, iOS 17’de yinelemelere neden olan bir hatayı kabul etti. Bu iOS 17.3’te düzeltildi. Daha fazla bilgi.
Buradan başlayın
Durumunuza en uygun bölümü seçin:- Sunucunuz başarısız API çağrılarını yeniden deniyor veya backend pipeline’ınız çift gönderim yapıyor olabilir → Aynı mesaj birden çok kez gönderildi
- Uygulamanız OneSignal’ın yanı sıra Firebase veya başka bir push SDK’sı kullanıyor → Üçüncü taraf bildirim işleyicileri
- Android uygulamanız bildirimler için kodda özelleştirme yapıyor (servis uzantısı veya ön plan dinleyicisi) → Android bildirim işleyicileri
- iOS uygulamanız kendi
UNUserNotificationCenterDelegate’ini uyguluyor → iOS ön plan işleyicisi - Yalnızca geliştirme derlemelerinde veya birden fazla kurulumla yineleme görüyorsunuz → Birden fazla uygulama örneği
Aynı mesaj birden çok kez gönderildi
En yaygın neden, OneSignal API aracılığıyla aynı bildirim payload’unun birden fazla kez gönderilmesidir. Yaygın nedenler:- Sunucunuz, ilkinin başarılı olup olmadığını kontrol etmeden istekleri yeniden dener.
- Backend pipeline’ınızdaki mantık aynı bildirimi iki kez gönderir.
- OneSignal’a geçiş yapıyorsunuz ancak önceki bir sağlayıcıdan hala gönderiyorsunuz. Her iki sistemden de aynı anda gönderme yapmaktan kaçının.
Idempotent API istekleri
Yeniden denemelerde idempotency anahtarlarını yeniden kullanarak yinelenen mesajları önleyin.
Üçüncü taraf bildirim işleyicileri
Uygulamanızdaki başka bir kodun OneSignal’ın push payload’unu işleyip OneSignal’ınkine ek olarak kendi bildirimini görüntülemesi durumunda yineleme oluşabilir. Bu şunları içerir:- Aynı payload’u alan diğer uzak push SDK’ları (örneğin, Firebase Cloud Messaging).
- Android’de
FirebaseMessagingServiceveya iOS’taUNUserNotificationCenterDelegategibi, gelen payload’u okuyup ondan yerel bir bildirim oluşturan özel mesaj işleyicileri.
OneSignal bildirimlerini tanımlama
Her OneSignal bildirimi, OneSignal bildirim UUID’sini içereni anahtarıyla bir custom nesnesi içerir:
JSON
Üçüncü taraf işleyicilerinde OneSignal bildirimlerini filtreleme
OneSignal dışı herhangi bir işleyicidecustom.i anahtarını kontrol edin ve mevcut olduğunda erken dönün. OneSignal kendi payload’larını işlerken diğer kodunuz kendi payload’larını işlemeye devam eder.
- Android
- iOS
Özel bir
FirebaseMessagingService veya başka bir uzak mesaj işleyicisinde:Kotlin
Android bildirim işleyicileri
OneSignal, bir bildirim görüntülenmeden önce durdurup özelleştirmenize olanak tanıyan iki Android callback’i sunar:- Bildirim servis uzantısındaki
onNotificationReceived— uygulama arka planda olsa bile her push için çalışır. - Ön plan yaşam döngüsü dinleyicisindeki
onWillDisplay— yalnızca uygulama ön planda olduğunda çalışır.
preventDefault() ve display() kuralı
OneSignal, event.preventDefault() ile bastırılmadıkça her bildirimi otomatik olarak görüntüler. İki yaygın hata yinelemeye neden olur:
event.preventDefault()çağırmadanevent.getNotification().display()çağırmak — bildirimi iki kez gösterir.- OneSignal orijinali de görüntülerken
NotificationManagerCompat.notify()ile ayrı bir bildirim göndermek.
display()’i veya kendi NotificationManagerCompat.notify()’ınız, ikisi birden asla.
onWillDisplay için de geçerlidir:
Kotlin
Callback’lerde asenkron çalışma
Görüntülemeden önce arka plan çalışması (ağ çağrıları, veritabanı aramaları) yapıyorsanız, callback’tepreventDefault() çağrısını eşzamanlı olarak yapın ve display() çağrısını yalnızca asenkron çalışma tamamlandıktan sonra yapın. preventDefault() olmadan callback’ten dönmek OneSignal’ın bildirimi görüntülemesine izin verir ve sonraki bir display() çağrısı yinelemeye neden olur.
iOS ön plan işleyicisi
OneSignal, SDK başlatma sırasında kendiniUNUserNotificationCenterDelegate olarak ayarlar. Uygulamanız da ön plan bildirim işlemeyi uyguluyorsa, bildirim iki kez görüntülenebilir — bir kez OneSignal’dan ve bir kez kodunuzdan.
Yinelemeye neden olan yaygın kalıplar:
- Çağrıları OneSignal’a iletmeden kendi
UNUserNotificationCenterDelegate’inizi uygulamak, ardındancompletionHandler([.banner, .sound])çağırıp aynı metottan özel bir uygulama içi uyarı göstermek. - OneSignal’ın da görüntülemekte olduğu gelen bir push’a yanıt olarak yerel bir bildirim (
UNUserNotificationCenter.current().add(...)) planlamak.
event.preventDefault() çağırın:
Swift
Birden fazla uygulama örneği
- Android
- iOS
- Web
Uygulamanızın hem production hem de development sürümleri yüklü olduğunda yineleme oluşabilir. Her uygulamanın benzersiz bir paket adı vardır ve kendi push token’ını alır.Bildirimi hangi uygulama örneğinin gönderdiğini onaylamak için bildirime uzun basın.
Tanı ipuçları
Yinelemeleri daha hızlı ayıklamak için aşağıdakileri toplayın ve OneSignal desteğine gönderin:- Yineleme alan cihazın OneSignal Abonelik Kimliği
- OneSignal Mesaj Kimliği veya panodaki mesaja bir bağlantı
- Uygulamanızdaki diğer kütüphaneler veya eklentilerin listesi
- Sorunu yeniden üreten hata ayıklama günlüğü
- Ayrıntılı yeniden üretim adımları
SSS
Uygulamamda iki bildirim SDK’sı olursa ne olur?
Her iki SDK de aynı bildirimi bağımsız olarak işleyip görüntüleyebilir. OneSignal kendi bildirimlerini otomatik olarak filtreler, ancak diğer SDK’lar bunu yapmaz.custom.i anahtarını kontrol ederek diğer SDK’nızın işleyicilerinden OneSignal payload’larını filtreleyin. Kod örnekleri için Üçüncü taraf bildirim işleyicileri bölümüne bakın.
Önceki bir sağlayıcıdan ve OneSignal’dan aynı anda push nasıl gönderilir?
Kademeli olarak geçiş yapabilirsiniz, ancak her iki sağlayıcıdan da aynı mesajı göndermekten kaçının.- Android: OneSignal’ı entegre ederken ve uygulamayı yayınlarken eski SDK bildirim işleme kodunu kaldırın. Kullanıcılar güncelledikçe, eski sağlayıcıdan push almayı durduracaklar.
- iOS: Kullanıcılar güncellerken eski sağlayıcıdan geçici olarak göndermeye devam edebilirsiniz. Tamamen geçiş yaptıktan sonra, yinelemeleri önlemek için yalnızca OneSignal’dan gönderin.
Hızlı değişen güncellemeler için birden fazla bildirimi nasıl önlerim?
Bildirimleri üst üste yığmak yerine önceki bildirimleri değiştirmek için Bildirim oluştur API’sinde bircollapse_id kullanın. Birden fazla bildirim aynı collapse_id’yi paylaştığında, her yeni bildirim tepsideki önceki bildirimin yerini alır. Bu, hisse senedi fiyat güncellemeleri, canlı skorlar, teslimat ETA’ları ve benzeri sık güncellemeler için kullanışlıdır.
İlgili sayfalar
Mobil SDK sorun giderme
iOS ve Android’de push bildirimi teslimatıyla ilgili yaygın sorunları çözün.
Web push sorun giderme
Web push aboneliği, service worker ve teslimat sorunlarını ayıklayın.
Uygulama içi mesaj sorun giderme
Uygulama içi mesaj görüntüleme, tetikleyici ve yineleme sorunlarını düzeltin.
Mobil servis uzantıları
iOS ve Android’de görüntülemeden önce push bildirimlerini durdurun ve özelleştirin.
Gösterilmeyen bildirimler (web)
Gönderilen ancak görüntülenmeyen web push bildirimlerini sorun giderin.