Silent Push to typ push-uwagi iOS dostarczanej na urządzenie bez jakiegokolwiek wyświetlania użytkownikowi i bez dźwięku. Głównym przeznaczeniem cichego powiadomienia jest synchronizacja danych w tle, aktualizacja treści i wykonywanie krótkich zadań, które nie wymagają uwagi użytkownika. Według Apple Developer Documentation, 2026, Silent Push aktywuje aplikację w tle na 30 sekund w celu przetworzenia przychodzących danych, po czym system przywraca urządzenie w tryb uśpienia w celu oszczędzania baterii.
Najważniejsze
Silent Push (ciche powiadomienie push) to mechanizm iOS, który dostarcza dane na urządzenie bez jakiegokolwiek wizualnego powiadomienia użytkownika. W przeciwieństwie do standardowego push, które wyświetla baner, odtwarza dźwięk i trafia do Notification Center, silent push „budzi” aplikację w tle i przekazuje jej dane do przetworzenia. Użytkownik nigdy nie dowiaduje się o dostarczeniu takiego powiadomienia — efektem jest zaktualizowana treść przy następnym otwarciu.
Kluczowa różnica polega na pładunku JSON: silent push zawiera flagę content-available: 1 i NIE zawiera alert, sound ani badge. Standardowe powiadomienie z alert zawsze wyświetla się użytkownikowi, niezależnie od content-available. Silent push działa tylko z content-available: 1 i bez alert — jeśli dodać alert, system pokaże powiadomienie nawet z flagą dostarczania w tle.
Ciche powiadomienia są niezastąpione w scenariuszach, w których dane muszą być aktualne do momentu otwarcia aplikacji, ale użytkownik nie powinien być rozpraszany. Przykłady: aktualizacja kanału wiadomości w tle, synchronizacja subskrypcji, pobieranie nowej treści do dostępu offline, aktualizacja widgetów, unieważnianie pamięci podręcznej. Silent Push jest również używany do „rozgrzania” aplikacji przed oczekiwanym działaniem użytkownika.
Dostarczanie Silent Push znacząco różni się od zwykłych powiadomień i podlega zasadom optymalizacji zużycia energii. System iOS otrzymuje żądanie push od APNS, określa, że jest to silent push (content-available: 1) i podejmuje decyzję o dostarczeniu na podstawie wielu czynników: poziom naładowania baterii, tryb oszczędzania energii, częstotliwość poprzednich silent push, aktywność aplikacji i bieżące obciążenie CPU.
Na urządzeniach z czipem Apple M i iOS 15+ silent push integruje się z mechanizmem Power Nap, który okresowo budzi urządzenie do zadań w tle. Power Nap konsoliduje kilka silent push w jeden okres aktywności, co zmniejsza całkowite zużycie energii. Deweloper nie może zarządzać Power Nap bezpośrednio — system podejmuje decyzję automatycznie na podstawie zachowania użytkownika i historii użytkowania aplikacji.
Gdy system dostarczy silent push, aplikacja otrzymuje wywołanie application(_:didReceiveRemoteNotification:fetchCompletionHandler:) w AppDelegate. Deweloper ma obowiązek wywołać completion handler w ciągu 30 sekund, przekazując poprawny wynik (UIBackgroundFetchResult). Jeśli przetwarzanie nie zakończy się na czas, system może ograniczyć częstotliwość silent push dla tej aplikacji lub całkowicie zaprzestać ich dostarczania.
// Обработка на Silent Push в AppDelegate
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 nie publikuje dokładnych odstępów między silent push, ale na podstawie testów i dokumentacji zaleca się wysyłanie nie więcej niż 2–3 cichych powiadomień na godzinę na jedno urządzenie. Przy częstszym wysyłaniu system zaczyna ignorować silent push, a dane przestają być dostarczane. Jeśli wymagana jest częstsza synchronizacja, rozważ użycie URLSession z konfiguracją w tle lub VoIP push.
Silent Push znajduje zastosowanie w szerokim spektrum zadań, w których dane muszą być aktualne bez aktywnego udziału użytkownika. Przyjrzyjmy się najskuteczniejszym scenariuszom użycia tego mechanizmu w rzeczywistych aplikacjach iOS.
Aplikacje informacyjne, czytniki i aplikacje podróżnicze używają Silent Push do pobierania nowej treści w tle. Gdy użytkownik otwiera aplikację, dane są już pobrane i dostępne nawet bez internetu. Takie podejście radykalnie poprawia doświadczenie użytkownika — znikają puste ekrany ładowania, a treść wyświetla się natychmiastowo. Serwer wysyła silent push przy pojawieniu się nowych artykułów, a aplikacja w tle pobiera je do czytania offline.
iOS WidgetKit aktualizuje widgety zgodnie z harmonogramem, ale do natychmiastowej aktualizacji po zmianie danych na serwerze używany jest Silent Push. Aplikacja w tle przetwarza silent push, aktualizuje lokalne przechowywanie danych dla widgetów i wymusza aktualizację timeline przez WidgetCenter. Użytkownik widzi aktualne informacje na widżecie bez otwierania aplikacji — kurs walut, prognozę pogody, status dostawy.
Gdy serwer aktualizuje krytyczne dane (na przykład zasady taryfikacji, listę dostępnych funkcji dla użytkowników premium), Silent Push pozwala natychmiast unieważnić lokalną pamięć podręczną. Przy następnym otwarciu aplikacja pobierze świeże dane z serwera, zamiast używać nieaktualnej pamięci podręcznej. Jest to szczególnie istotne w aplikacjach z płatną treścią lub subskrypcjami.
W niektórych scenariuszach wymagana jest aktualizacja badge’a na ikonie aplikacji bez wyświetlania powiadomienia. Silent Push z polem badge w pładunku pozwala ustawić odpowiednią wartość licznika, nie niepokojąc użytkownika banerem. Na przykład aplikacja czatu może aktualizować badge liczbą nieprzeczytanych wiadomości, nie pokazując każdej nowej wiadomości jako powiadomienia, jeśli użytkownik znajduje się w aplikacji.
Do poprawnego działania Silent Push wymagana jest konfiguracja na trzech poziomach: projekt Xcode, pładunek JSON na serwerze i kod przetwarzania w aplikacji. Każdy poziom jest krytyczny: pominięcie dowolnego kroku powoduje, że powiadomienie zostanie dostarczone jako zwykłe lub nie zostanie dostarczone wcale.
W Xcode należy włączyć capability Push Notifications oraz Background Modes z zaznaczoną opcją Remote notifications. Push Notifications generuje certyfikat dla APNS, a Remote notifications w Background Modes zezwala systemowi na budzenie aplikacji po otrzymaniu silent push. Bez Remote notifications silent push zostanie dostarczony, ale aplikacja nie aktywuje się w tle, a dane nie zostaną przetworzone.
Pładunek Silent Push musi zawierać klucz aps z content-available: 1 i NIE zawierać alert, sound ani badge. Pola niestandardowe są przekazywane na tym samym poziomie co aps i zawierają dane do przetworzenia: typ operacji, identyfikatory obiektów, metadane. Pładunek bez content-available będzie przetworzony jako zwykłe powiadomienie; z alert — jako zwykłe, nawet z content-available.
{
"aps": {
"content-available": 1
},
"sync-type": "news-feed",
"last-article-id": "article_8521",
"priority": "high"
}
Po otrzymaniu silent push iOS wywołuje application(_:didReceiveRemoteNotification:fetchCompletionHandler:) zanim aplikacja stanie się widoczna. W tej metodzie należy przeanalizować userInfo, wykonać niezbędną pracę (żądania sieciowe, zapis do Core Data, aktualizację pamięci podręcznej) i obowiązkowo wywołać completionHandler z poprawnym wynikiem w ciągu 30 sekund. Niewywołanie completionHandler jest traktowane przez system jako błąd i wpływa na częstotliwość przyszłych silent push.
Silent Push nie jest niezawodnym kanałem dostarczania danych do krytycznych operacji — to mechanizm optymalizacji, a nie gwarantowanej synchronizacji. Deweloper musi rozumieć ograniczenia i projektować system tak, aby aplikacja działała poprawnie zarówno z silent push, jak i bez niego.
iOS nie gwarantuje dostarczenia każdego silent push. System może opóźnić lub anulować dostarczenie przy niskim poziomie naładowania baterii (poniżej 20%), w trybie Low Power Mode, przy wysokiej częstotliwości poprzednich silent push, a także jeśli aplikacja nie była długo używana przez użytkownika. Średnia statystyka dostarczania według Apple: około 70–80% silent push jest dostarczanych w ciągu 5 minut, pozostałe mogą być opóźnione lub utracone.
Apple zaleca przestrzeganie kilku zasad efektywnego korzystania z silent push. Nie wysyłaj więcej niż 2–3 silent push na godzinę na jedno urządzenie — przekroczenie limitu prowadzi do blokady. Używaj compact payload: minimalny rozmiar pładunku przyspiesza przetwarzanie i zmniejsza obciążenie sieci. Wywołuj completionHandler zawsze i jak najszybciej: im dłużej trwa przetwarzanie, tym większe prawdopodobieństwo, że system ograniczy silent push w przyszłości.
W scenariuszach wymagających gwarantowanego dostarczenia lub więcej czasu na przetwarzanie rozważ alternatywy. VoIP push (PushKit) gwarantuje dostarczenie i daje więcej czasu, ale jest przeznaczony tylko dla aplikacji VoIP. Background fetch (UIApplication background fetch) jest uruchamiany przez system zgodnie z harmonogramem, ale nie może być zainicjowany przez serwer. WebSocket utrzymuje stałe połączenie, ale zużywa więcej baterii i nie nadaje się dla wszystkich typów aplikacji.
Do debugowania Silent Push używaj Console.app na Mac z filtrem według nazwy aplikacji. System loguje każdy silent push z adnotacją „będzie, która łączy się z aktywnością użytkownika i sygnalizuje, czy przetwarzanie było udane. Na urządzeniu sprawdzenie wykonuje się przez Ustawienia → Programista → Rejestrowanie trybów tła. Strona serwerowa jest monitorowana przez APNS Feedback Service do wykrywania niedostarczonych powiadomień.
Często zadawane pytania
Silent Push nie wyświetla się użytkownikowi, nie odtwarza dźwięku i nie trafia do Notification Center. Jego zadaniem jest aktywowanie aplikacji w tle do synchronizacji danych. Zwykły push zawsze wyświetla baner i może zawierać dźwięk i badge.
Aplikacja otrzymuje 30 sekund na wykonanie zadania w tle. Po wywołaniu completionHandler system przywraca urządzenie w tryb uśpienia. Jeśli nie wywołasz completionHandler na czas, system może zaprzestać dostarczania silent push tej aplikacji.
System może opóźnić dostarczenie przy niskim poziomie naładowania baterii, w trybie oszczędzania energii, przy częstym wysyłaniu silent push lub jeśli aplikacja nie była długo używana. To normalne zachowanie iOS, niezwiązane z błędami w implementacji.
Tak, można podać content-available: 1 razem z alert — w tym przypadku powiadomienie wyświetli się użytkownikowi, a aplikacja dodatkowo otrzyma aktywację w tle. Ale jeśli zadaniem jest tylko synchronizacja w tle bez wyświetlania, alert nie może być podany.
Użyj Console.app na Mac do przeglądania logów zadań w tle. Wyślij testowy silent push przez APNS i sprawdź, czy wywoływane jest didReceiveRemoteNotification z prawidłowym completionHandler. W Xcode użyj symulatora z imitacją trybu tła.
Podsumowanie
Ще разработим мобилно приложение под ключ
IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също