Silent Push — це тип push-сповіщення iOS, яке доставляється на пристрій без будь-якого відображення користувачу та без звукового супроводу. Основне призначення тихого сповіщення — фонова синхронізація даних, оновлення контенту та виконання коротких завдань, які не потребують уваги користувача. Згідно з Apple Developer Documentation, 2026, Silent Push активує додаток у фоні на 30 секунд для обробки вхідних даних, після чого система повертає пристрій у сплячий режим для економії заряду батареї.
Головне
Silent 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 на годину на один пристрій — перевищення ліміту призводить до блокування. Використовуйте компактний пейлоуд: мінімальний розмір пейлоуда прискорює обробку та знижує навантаження на мережу. Викликайте completionHandler завжди і якомога швидше: чим довше виконується обробка, тим вища ймовірність, що система обмежить silent push у майбутньому.
Для сценаріїв, де потрібна гарантована доставка або більше часу на обробку, розгляньте альтернативи. VoIP push (PushKit) гарантує доставку і дає більше часу, але призначений тільки для VoIP-додатків. Background fetch (UIApplication background fetch) запускається системою за розкладом, але не може бути ініційований сервером. WebSocket підтримує постійне з’єднання, але витрачає більше батареї та не підходить для всіх типів додатків.
Для налагодження Silent Push використовуйте Console.app на Mac і фільтр за назвою додатка. Система логує кожен silent push з позначкою “background task” і вказує, чи була обробка успішною. На пристрої перевірка виконується через Settings → Developer → Background Modes Logging. Серверна сторона відстежується через 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 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.
Читайте також