Silent Push је тип iOS push обавештења које се испоручује на уређај без икаквог приказивања кориснику и без звучне пратње. Основна намена тихог обавештења је синхронизација података у позадини, ажурирање садржаја и извршавање кратких задатака који не захтевају пажњу корисника. Према Apple Developer Documentation, 2026, Silent Push активира апликацију у позадини на 30 секунди за обраду приспелих података, након чега систем враћа уређај у режим мировања ради штедње батерије.
Главно
Silent Push (тихо push обавештење) је iOS механизам који испоручује податке на уређај без икаквог визуелног обавештења корисника. За разлику од стандардног push-а, који приказује банер, репродукује звук и доспева у Notification Center, silent push "буди" апликацију у позадини и преноси јој податке за обраду. Корисник никад не сазнаје за испоруку таквог обавештења — резултат је ажурирани садржај при следећем отварању.
Кључна разлика лежи у JSON пакету: silent push садржи флаг content-available: 1 и НЕ садржи alert, sound или badge. Стандардно обавештење са alert увек се приказује кориснику, без обзира на content-available. Silent push ради само са content-available: 1 и без alert — ако се дода alert, систем ће приказати обавештење чак и са флагом позадинске испоруке.
Тиха обавештења су незаменљива за сценарије где подаци морају бити свежи у тренутку отварања апликације, али корисник не треба да буде ометен. Примери: ажурирање феда вести у позадини, синхронизација претплата, преузимање новог садржаја за офлајн приступ, ажурирање производа, инвалидирање кеша. Silent Push се такође користи за "загревање" апликације пре очекиване радње корисника.
Испорука Silent Push-а се значајно разликује од обичних обавештења и подлеже правилима оптимизације потрошње енергије. iOS систем прима push захтев од APNS-а, утврђује да је то silent push (content-available: 1) и доноси одлуку о испоруци на основу више фактора: нивоа напуњености батерије, режима штедње енергије, учесталости претходних silent push-а, активности апликације и тренутног оптерећења CPU-а.
На уређајима са Apple M чипом и iOS 15+, silent push се интегрише са механизмом Power Nap, који повремено буди уређај за позадинске задатке. Power Nap консолидује више silent push-а у један период активности, што смањује укупну потрошњу енергије. Програмер не може директно да управља Power Nap-ом — систем доноси одлуку аутоматски на основу понашања корисника и историјата коришћења апликације.
Када систем испоручи silent push, апликација добија позив application(_:didReceiveRemoteNotification:fetchCompletionHandler:) у AppDelegate-у. Програмер је дужан да позове completion handler у року од 30 секунди, проследивши исправан резултат (UIBackgroundFetchResult). Ако обрада није завршена на време, систем може да ограничи учесталост silent push-а за ову апликацију или да потпуно обустави њихову испоруку.
// Обрада 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 не објављује тачне интервале између silent push-а, али на основу тестова и документације препоручује се да шаљете не више од 2–3 тиха обавештења на сат на један уређај. При чешћем слању, систем почиње да игнорише silent push-ове, и подаци престају да се испоручују. Ако је потребна чешћа синхронизација, размотрите коришћење URLSession са позадинском конфигурацијом или VoIP push-а.
Silent Push се примењује у широком опсегу задатака у којима подаци морају бити ажурни без активног учешћа корисника. Погледајмо најефикасније сценарије коришћења овог механизма у реалним iOS апликацијама.
Новинске апликације, читачи и путовалице користе Silent Push за преузимање новог садржаја у позадини. Када корисник отвори апликацију, подаци су већ преузети и доступни чак и без интернета. Овакав приступ радикално побољшава корисничко искуство — нестају празни екрани учитавања, а садржај се приказује тренутно. Сервер шаље silent push када се појаве нови чланци, а апликација у позадини преузима их за офлајн читање.
iOS WidgetKit ажурира производе по распореду, али за тренутно ажурирање након промене података на серверу користи се Silent Push. Апликација у позадини обрађује silent push, ажурира локално складиште података за производе и принудно ажурира timeline путем WidgetCenter-а. Корисник види ажурне информације на производу без отварања апликације — курс валута, прогнозу времена, статус испоруке.
Када сервер ажурира критичне податке (на пример, правила тарификације, листу доступних функција за premium кориснике), Silent Push омогућава тренутно инвалидирање локалног кеша. При следећем отварању апликација ће учитати свеже податке са сервера, уместо да користи застарели кеш. Ово је посебно важно за апликације са плаћеним садржајем или претплатама.
У неким сценаријима потребно је ажурирати badge на иконици апликације без приказивања обавештења. Silent Push са пољем badge у пакету омогућава постављање потребне вредности бројача, не узнемиравајући корисника банером. На пример, апликација за ћаскање може да ажурира badge бројем непрочитаних порука, не приказујући сваку нову поруку као обавештење, ако се корисник налази у апликацији.
За исправан рад Silent Push-а потребно је подешавање на три нивоа: Xcode пројекту, JSON пакету на серверу и коду обраде у апликацији. Сваки ниво је критичан: изостављање било ког корака доводи до тога да се обавештење испоручује као обично или се уопште не испоручује.
У Xcode-у је потребно укључити capability Push Notifications и Background Modes са штиклираном опцијом Remote notifications. Push Notifications генерише сертификат за APNS, а Remote notifications у Background Modes дозвољава систему да буди апликацију при пријему silent push-а. Без Remote notifications, silent push ће бити испоручен, али апликација се неће активирати у позадини, и подаци неће бити обрађени.
Пакет Silent Push-а мора да садржи кључ aps са content-available: 1 и НЕ садржи alert, sound или badge. Прилагођена поља се преносе на истом нивоу са aps-ом и садрже податке за обраду: тип операције, идентификаторе објеката, метаподатке. Пакет без content-available биће обрађен као обично обавештење; са alert — као обично, чак и са content-available.
{
"aps": {
"content-available": 1
},
"sync-type": "news-feed",
"last-article-id": "article_8521",
"priority": "high"
}
При пријему silent push-а, iOS позива application(_:didReceiveRemoteNotification:fetchCompletionHandler:) пре него што апликација постане видљива. У овој методи потребно је анализирати userInfo, обавити потребан посао (мрежне захтеве, упис у Core Data, ажурирање кеша) и обавезно позвати completionHandler са исправним резултатом у року од 30 секунди. Изостављање позива completionHandler-а сматра се код грешке и утиче на учесталост будућих silent push-а.
Silent Push није поуздан канал за испоруку података за критичне операције — то је механизам оптимизације, а не гарантоване синхронизације. Програмер мора да разуме ограничења и да пројектује систем тако да апликација исправно ради како са silent push-ом, тако и без њега.
iOS не гарантује испоруку сваког silent push-а. Систем може да одложи или откаже испоруку при ниском пуњењу батерије (испод 20%), у режиму Low Power Mode, при високој учесталости претходних silent push-а, као и ако апликација није дуго коришћена. Просечна статистика испоруке према Apple-у: око 70–80% silent push-а се испоручи у року од 5 минута, остали могу бити одложени или изгубљени.
Apple препоручује придржавање неколико правила за ефикасно коришћење silent push-а. Не шаљите више од 2–3 silent push-а на сат на један уређај — прекорачење лимита доводи до блокаде. Користите compact payload: минимална величина пакета убрзава обраду и смањује оптерећење мреже. Увек позовите completionHandler и што пре могуће: што обрада дуже траје, већа је вероватноћа да ће систем ограничити silent push-ове у будућности.
За сценарије који захтевају гарантовану испоруку или више времена за обраду, размотрите алтернативе. VoIP push (PushKit) гарантује испоруку и даје више времена, али је намењен само за VoIP апликације. Background fetch (UIApplication background fetch) покреће систем по распореду, али га сервер не може покренути. WebSocket одржава сталну везу, али троши више батерије и није погодан за све типове апликација.
За отклањање грешака Silent Push-а користите Console.app на Mac-у са филтером по називу апликације. Систем бележи сваки silent push са ознаком "позадински задатак" и наводи да ли је обрада била успешна. На уређају провера се врши кроз Подешавања → Програмер → Евиденција позадинских режима. Серверска страна се надзире путем APNS Feedback Service за откривање неиспоручених обавештења.
Често постављана питања
Silent Push се не приказује кориснику, не репродукује звук и не доспева у Notification Center. Његов задатак је да активира апликацију у позадини за синхронизацију података. Обичан push увек приказује банер и може да садржи звук и badge.
Апликација добија 30 секунди за извршавање позадинског задатка. Након позива completionHandler-а, систем враћа уређај у режим мировања. Ако се completionHandler не позове на време, систем може да престане да испоручује silent push-ове овој апликацији.
Систем може да одложи испоруку при ниском пуњењу батерије, у режиму штедње енергије, при честом слању silent push-а или ако апликација није дуго коришћена. То је нормално понашање iOS-а, које није повезано са грешкама у имплементацији.
Да, може се навести content-available: 1 заједно са alert — у овом случају обавештење ће се приказати кориснику, а апликација ће добити додатну позадинску активацију. Али ако је задатак само позадинска синхронизација без приказивања, alert се не сме наводити.
Користите Console.app на Mac-у за преглед евиденције позадинских задатака. Пошаљите тестни silent push кроз APNS и проверите да ли се didReceiveRemoteNotification позива са исправним completionHandler-ом. У Xcode-у користите симулатор са имитацијом позадинског режима.
Резиме
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође