Silent Push, kullanıcıya herhangi bir görüntüleme ve ses eşliği olmadan cihaza teslim edilen bir iOS push bildirimi türüdür. Sessiz bir bildirimin temel amacı, arka plan veri senkronizasyonu, içerik güncellemesi ve kullanıcının dikkatini gerektirmeyen kısa görevleri gerçekleştirmektir. Apple Developer Documentation, 2026'ya göre, Silent Push, gelen verileri işlemek için uygulamayı arka planda 30 saniye boyunca etkinleştirir, ardından sistem pil tasarrufu için cihazı uyku moduna döndürür.
Önemli noktalar
Silent Push, kullanıcıya herhangi bir görsel bildirim olmadan cihaza veri teslim eden bir iOS mekanizmasıdır. Bir banner gösteren, ses çalan ve Bildirim Merkezi'nde görünen standart bir push'un aksine, silent push uygulamayı arka planda “uyandırır” ve işlemesi için veri iletir. Kullanıcı böyle bir bildirimin teslimatını asla bilmez — sonuç, uygulamayı bir sonraki açışında güncellenmiş içeriktir.
Temel fark JSON yükündedir: bir silent push, content-available: 1 işareti içerir ve alert, sound veya badge içermez. Standart bir bildirim, alert ile birlikte content-available'dan bağımsız olarak her zaman kullanıcıya gösterilir. Silent push yalnızca content-available: 1 ile ve alert olmadan çalışır — alert eklerseniz, sistem arka plan teslimat işareti olsa bile bildirimi gösterecektir.
Sessiz bildirimler, kullanıcı uygulamayı açtığında verilerin güncel olması gereken ancak kullanıcının dikkatinin dağıtılmaması gereken senaryolar için vazgeçilmezdir. Örnekler: haber akışını arka planda güncelleme, abonelikleri senkronize etme, çevrimdışı erişim için yeni içerik indirme, widget'ları güncelleme, önbelleği geçersiz kılma. Silent Push ayrıca beklenen bir kullanıcı eyleminden önce uygulamayı “ısıtmak” için de kullanılır.
Silent Push teslimatı, normal bildirimlerden önemli ölçüde farklıdır ve güç optimizasyonu kurallarına uyar. iOS sistemi, APNS'den push isteğini alır, bunun bir silent push (content-available: 1) olduğunu belirler ve birden çok faktöre göre teslim edilip edilmeyeceğine karar verir: pil seviyesi, güç tasarrufu modu, önceki silent push'ların sıklığı, uygulama etkinliği ve mevcut CPU yükü.
Apple M çipli ve iOS 15+ cihazlarda, silent push, arka plan görevleri için cihazı periyodik olarak uyandıran Power Nap mekanizmasıyla entegre olur. Power Nap, birden çok silent push'u tek bir etkinlik döneminde birleştirerek genel güç tüketimini azaltır. Geliştirici Power Nap'ı doğrudan kontrol edemez — sistem, kullanıcı davranışı ve uygulama kullanım geçmişine göre otomatik olarak kararlar alır.
Sistem bir silent push teslim ettiğinde, uygulama AppDelegate'de application(_:didReceiveRemoteNotification:fetchCompletionHandler:) çağrısını alır. Geliştirici, 30 saniye içinde completion handler'ı çağırmalı ve doğru sonucu (UIBackgroundFetchResult) iletmelidir. İşleme zamanında tamamlanmazsa, sistem bu uygulama için silent push sıklığını sınırlayabilir veya tamamen teslimatı durdurabilir.
// AppDelegate'de Silent Push işleme
func application(
_ application: UIApplication,
didReceiveRemoteNotification userInfo: [AnyHashable: Any],
fetchCompletionHandler completionHandler:
@escaping (UIBackgroundFetchResult) -> Void
) {
guard let type = userInfo["sync-type"] as? String
else {
completionHandler(.failed)
return
}
if type == "news-feed" {
NewsFeedSyncService().sync { success in
completionHandler(success ? .newData : .failed)
}
} else if type == "cache-invalidate" {
CacheManager.shared.invalidateAll()
completionHandler(.newData)
} else {
completionHandler(.noData)
}
}
Apple, silent push'lar arasındaki kesin aralıkları yayımlamaz, ancak testlere ve belgelere dayanarak, cihaz başına saatte 2–3 sessiz bildirimden fazla gönderilmemesi önerilir. Daha sık gönderildiğinde, sistem silent push'ları görmezden gelmeye başlar ve veriler teslim edilmez. Daha sık senkronizasyon gerekiyorsa, arka plan yapılandırmasıyla URLSession veya VoIP push kullanmayı düşünün.
Silent Push, kullanıcının aktif katılımı olmadan verilerin güncel olması gereken geniş bir görev yelpazesinde kullanılır. Bu mekanizmanın gerçek iOS uygulamalarındaki en etkili kullanım durumlarına bakalım.
Haber uygulamaları, okuyucular ve seyahat uygulamaları, arka planda yeni içerik indirmek için Silent Push kullanır. Kullanıcı uygulamayı açtığında, veriler zaten yüklenmiştir ve internet bağlantısı olmadan bile kullanılabilir. Bu yaklaşım, kullanıcı deneyimini önemli ölçüde iyileştirir — boş yükleme ekranları kaybolur ve içerik anında görüntülenir. Yeni makaleler geldiğinde sunucu bir silent push gönderir ve uygulama bunları çevrimdışı okuma için arka planda indirir.
iOS WidgetKit, widget'ları bir programa göre günceller, ancak sunucu tarafındaki veri değişikliklerinden sonra anlık güncellemeler için Silent Push kullanılır. Arka plandaki uygulama silent push'u işler, widget'lar için yerel veri deposunu günceller ve WidgetCenter aracılığıyla zaman çizelgesini zorla yeniler. Kullanıcı, uygulamayı açmadan widget'ta güncel bilgileri görür — döviz kurları, hava durumu tahmini, teslimat durumu.
Sunucu kritik verileri güncellediğinde (örneğin, fiyatlandırma kuralları, premium kullanıcılar için kullanılabilir özellikler), Silent Push yerel önbelleği anında geçersiz kılmayı sağlar. Bir sonraki açılışta, uygulama eski önbelleği kullanmak yerine sunucudan yeni verileri yükleyecektir. Bu, özellikle ücretli içerik veya abonelikleri olan uygulamalar için önemlidir.
Bazı senaryolarda, uygulama simgesindeki rozetin bir bildirim göstermeden güncellenmesi gerekir. Yükte rozet alanı olan bir Silent Push, kullanıcıyı bir banner ile rahatsız etmeden istenen sayaç değerini ayarlamaya olanak tanır. Örneğin, bir sohbet uygulaması, kullanıcı zaten uygulamadaysa her yeni mesajı bildirim olarak göstermeden okunmamış mesaj sayısıyla rozeti güncelleyebilir.
Silent Push'un doğru çalışması için üç düzeyde yapılandırma gerekir: Xcode projesi, sunucudaki JSON yükü ve uygulamadaki işleme kodu. Her düzey kritiktir: herhangi bir adımı atlamak, bildirimin normal olarak teslim edilmesine veya hiç teslim edilmemesine neden olur.
Xcode'da, Push Notifications yeteneğini ve Remote notifications onay kutusu işaretli Background Modes'u etkinleştirmeniz gerekir. Push Notifications, APNS için bir sertifika oluştururken, Background Modes'daki Remote notifications, silent push alındığında sistemin uygulamayı uyandırmasına izin verir. Remote notifications olmadan, silent push teslim edilir ancak uygulama arka planda etkinleştirilmez ve veriler işlenmez.
Bir Silent Push yükü, content-available: 1 ile aps anahtarını içermeli ve alert, sound veya badge içermemelidir. Özel alanlar, aps ile aynı düzeyde iletilir ve işleme için veri içerir: işlem türü, nesne tanımlayıcıları, meta veriler. content-available olmayan bir yük, normal bildirim olarak işlenir; alert ile, content-available olsa bile normal olur.
{
"aps": {
"content-available": 1
},
"sync-type": "news-feed",
"last-article-id": "article_8521",
"priority": "high"
}
Bir silent push alındığında, iOS uygulama görünür hale gelmeden önce application(_:didReceiveRemoteNotification:fetchCompletionHandler:) çağrısını yapar. Bu yöntemde, userInfo'yı analiz etmeniz, gerekli işi yapmanız (ağ istekleri, Core Data yazmaları, önbellek güncellemeleri) ve 30 saniye içinde doğru sonuçla completionHandler'ı çağırmanız gerekir. CompletionHandler'ı çağırmamak, sistem tarafından bir hata olarak kabul edilir ve gelecekteki silent push'ların sıklığını etkiler.
Silent Push, kritik işlemler için güvenilir bir veri teslimat kanalı değildir — bu bir optimizasyon mekanizmasıdır, garantili senkronizasyon değildir. Geliştirici sınırlamaları anlamalı ve sistemi, uygulamanın silent push ile ve silent push olmadan doğru çalışacağı şekilde tasarlamalıdır.
iOS, her silent push'un teslimatını garanti etmez. Sistem, pil zayıf olduğunda (%20'nin altında), düşük güç modundayken, sık silent push'lardan sonra veya uygulama uzun süre kullanılmadıysa teslimatı geciktirebilir veya iptal edebilir. Apple'a göre ortalama teslimat istatistikleri: silent push'ların yaklaşık %70–80'i 5 dakika içinde teslim edilir, geri kalanı gecikebilir veya kaybolabilir.
Apple, etkili silent push kullanımı için birkaç kuralı izlemeyi önerir. Cihaz başına saatte 2–3'ten fazla silent push göndermeyin — limiti aşmak engellemeye neden olur. Kompakt bir yük kullanın: minimum yük boyutu işlemeyi hızlandırır ve ağ yükünü azaltır. CompletionHandler'ı her zaman mümkün olduğunca çabuk çağırın: işleme ne kadar uzun sürerse, sistemin gelecekte silent push'ları kısıtlama olasılığı o kadar yüksek olur.
Garantili teslimat veya daha fazla işleme süresi gerektiren senaryolar için alternatifleri değerlendirin. VoIP push (PushKit) teslimatı garanti eder ve daha fazla süre verir, ancak yalnızca VoIP uygulamaları içindir. Background fetch (UIApplication background fetch) sistem tarafından bir programa göre başlatılır, ancak sunucu tarafından başlatılamaz. WebSocket kalıcı bir bağlantıyı sürdürür ancak daha fazla pil tüketir ve tüm uygulama türleri için uygun değildir.
Silent Push'ta hata ayıklamak için Mac'te Console.app'i kullanın ve uygulama adına göre filtreleyin. Sistem her silent push'u “background task” etiketiyle kaydeder ve işlemenin başarılı olup olmadığını belirtir. Bir cihazda, Ayarlar → Geliştirici → Background Modes Logging üzerinden kontrol edin. Sunucu tarafı izleme, teslim edilmeyen bildirimleri belirlemek için APNS Feedback Service aracılığıyla yapılır.
Sıkça sorulan sorular
Silent Push kullanıcıya görüntülenmez, ses çalmaz ve Bildirim Merkezi'nde görünmez. Amacı, veri senkronizasyonu için uygulamayı arka planda etkinleştirmektir. Normal bir push her zaman bir banner gösterir ve ses ve rozet içerebilir.
Uygulama, arka plan görevini tamamlamak için 30 saniye alır. CompletionHandler çağrıldıktan sonra sistem cihazı uyku moduna döndürür. CompletionHandler zamanında çağrılmazsa, sistem bu uygulamaya silent push teslimatını durdurabilir.
Sistem, pil zayıf olduğunda, güç tasarrufu modundayken, sık silent push gönderiminden sonra veya uygulama uzun süre kullanılmadıysa teslimatı geciktirebilir. Bu normal iOS davranışıdır, uygulama hatalarıyla ilgili değildir.
Evet, alert ile birlikte content-available: 1 ekleyebilirsiniz — bu durumda bildirim kullanıcıya gösterilir ve uygulama ek olarak arka plan etkinleştirmesi alır. Ama görev yalnızca gösterim olmadan arka plan senkronizasyonuysa, alert eklenemez.
Mac'te Console.app kullanarak arka plan görev günlüklerini görüntüleyin. APNS üzerinden bir test silent push'u gönderin ve didReceiveRemoteNotification'ın doğru completionHandler ile çağrıldığını kontrol edin. Xcode'da, arka plan modu simülasyonu ile simülatörü kullanın.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun