Silent Push — суть, фонові завдання та налаштування доставки

Автор: IT Sectr Опубліковано: 2026-03-20 Час читання: 9 хв

Silent Push — це тип push-сповіщення iOS, яке доставляється на пристрій без будь-якого відображення користувачу та без звукового супроводу. Основне призначення тихого сповіщення — фонова синхронізація даних, оновлення контенту та виконання коротких завдань, які не потребують уваги користувача. Згідно з Apple Developer Documentation, 2026, Silent Push активує додаток у фоні на 30 секунд для обробки вхідних даних, після чого система повертає пристрій у сплячий режим для економії заряду батареї.

Головне

  • Фонова активація — Silent Push пробуджує додаток у фоновому режимі на 30 секунд для обробки даних без участі користувача.
  • Ключ content-available — обов’язковий прапорець у пейлоуді APNS зі значенням 1, який відрізняє тихе сповіщення від звичайного.
  • Економія батареї — система оптимізує доставку silent push: при низькому заряді або в режимі енергозбереження доставка може бути відкладена або скасована.
  • Обмеження частоти — iOS не гарантує доставку кожного silent push, особливо при високій частоті відправки або у фоновому режимі додатка.
  • Відсутність UI — тихе сповіщення не відображається в Notification Center, не відтворює звук і не збільшує badge на іконці додатка.

Що таке Silent Push — суть і призначення

Silent Push — це механізм iOS, який доставляє дані на пристрій без будь-якого візуального сповіщення користувачу. На відміну від стандартного push, який показує банер, відтворює звук і потрапляє в Notification Center, silent push “пробуджує” додаток у фоні та передає йому дані для обробки. Користувач ніколи не дізнається про доставку такого сповіщення — результатом стає оновлений контент при наступному відкритті.

Відмінність від звичайних push-сповіщень

Ключова відмінність полягає в JSON-пейлоуді: silent push містить прапорець content-available: 1 і НЕ містить alert, sound або badge. Стандартне сповіщення з alert завжди відображається користувачу, незалежно від content-available. Silent push працює тільки з content-available: 1 і без alert — якщо додати alert, система покаже сповіщення навіть за наявності прапорця фонової доставки.

Коли використовувати Silent Push

Тихі сповіщення незамінні для сценаріїв, де дані повинні бути свіжими на момент відкриття додатка, але користувач не повинен відволікатися. Приклади: оновлення стрічки новин у фоні, синхронізація підписок, завантаження нового контенту для офлайн-доступу, оновлення віджетів, інвалідація кешу. Silent Push також використовується для “прогріву” додатка перед очікуваною дією користувача.

Як працює доставка тихих сповіщень

Доставка Silent Push суттєво відрізняється від звичайних сповіщень і підпорядковується правилам оптимізації енергоспоживання. Система iOS отримує push-запит від APNS, визначає, що це silent push (content-available: 1), і приймає рішення про доставку на основі багатьох факторів: рівень заряду батареї, режим енергозбереження, частота попередніх silent push, активність додатка та поточне завантаження CPU.

Роль Power Nap і фонових режимів

На пристроях з чипом Apple M та iOS 15+ silent push інтегрується з механізмом Power Nap, який періодично пробуджує пристрій для фонових завдань. Power Nap консолідує кілька silent push в один період активності, що знижує загальне енергоспоживання. Розробник не може керувати Power Nap безпосередньо — система приймає рішення автоматично на основі поведінки користувача та історії використання додатка.

Вікно обробки 30 секунд

Коли система доставляє silent push, додаток отримує виклик application(_:didReceiveRemoteNotification:fetchCompletionHandler:) в AppDelegate. Розробник зобов’язаний викликати completion handler протягом 30 секунд, передавши коректний результат (UIBackgroundFetchResult). Якщо обробка не завершилася вчасно, система може обмежити частоту silent push для цього додатка або взагалі припинити їх доставку.

swift
// Обробка 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

Silent Push застосовується в широкому спектрі завдань, де дані повинні бути актуальними без активної участі користувача. Розглянемо найбільш ефективні сценарії використання цього механізму в реальних iOS-додатках.

Оновлення контенту для офлайн-доступу

Новинні додатки, рідери та додатки для подорожей використовують Silent Push для фонового завантаження нового контенту. Коли користувач відкриває додаток, дані вже завантажені та доступні навіть без інтернету. Такий підхід радикально покращує користувацький досвід — зникають порожні екрани завантаження, і контент відображається миттєво. Сервер надсилає silent push при появі нових статей, а додаток у фоні завантажує їх для офлайн-читання.

Синхронізація стану віджетів

iOS WidgetKit оновлює віджети за розкладом, але для миттєвого оновлення після зміни даних на сервері використовується Silent Push. Додаток у фоні обробляє silent push, оновлює локальне сховище даних для віджетів і примусово оновлює timeline через WidgetCenter. Користувач бачить актуальну інформацію на віджеті без відкриття додатка — курс валют, прогноз погоди, статус доставки.

Інвалідація кешу та очищення застарілих даних

Коли сервер оновлює критичні дані (наприклад, правила тарифікації, список доступних функцій для premium-користувачів), Silent Push дозволяє миттєво інвалідувати локальний кеш. При наступному відкритті додаток завантажить свіжі дані з сервера, а не буде використовувати застарілий кеш. Це особливо актуально для додатків з платним контентом або підписками.

Оновлення badge без видимого сповіщення

У деяких сценаріях потрібно оновити badge на іконці додатка без відображення сповіщення. Silent Push з полем badge у пейлоуді дозволяє встановити потрібне значення лічильника, не турбуючи користувача банером. Наприклад, додаток чату може оновлювати badge з кількістю непрочитаних повідомлень, не показуючи кожне нове повідомлення як сповіщення, якщо користувач знаходиться в додатку.

Налаштування silent push: пейлоуд і capabilities

Для коректної роботи Silent Push необхідне налаштування на трьох рівнях: проект Xcode, JSON-пейлоуд на сервері та код обробки в додатку. Кожен рівень критичний: пропуск будь-якого кроку призводить до того, що сповіщення буде доставлено як звичайне або не доставлено взагалі.

Налаштування capabilities в Xcode

У Xcode необхідно включити capability Push Notifications і Background Modes з позначкою Remote notifications. Push Notifications генерує сертифікат для APNS, а Remote notifications в Background Modes дозволяє системі пробуджувати додаток при отриманні silent push. Без Remote notifications silent push буде доставлено, але додаток не активується у фоні, і дані не будуть оброблені.

Структура JSON-пейлоуда

Пейлоуд Silent Push повинен містити ключ aps з content-available: 1 і НЕ містити alert, sound або badge. Кастомні поля передаються на одному рівні з aps і містять дані для обробки: тип операції, ідентифікатори об’єктів, метадані. Пейлоуд без content-available буде оброблено як звичайне сповіщення; з alert — як звичайне, навіть з content-available.

json
{
    "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

Apple рекомендує дотримуватися кількох правил для ефективного використання silent push. Не надсилайте більше 2–3 silent push на годину на один пристрій — перевищення ліміту призводить до блокування. Використовуйте компактний пейлоуд: мінімальний розмір пейлоуда прискорює обробку та знижує навантаження на мережу. Викликайте completionHandler завжди і якомога швидше: чим довше виконується обробка, тим вища ймовірність, що система обмежить silent push у майбутньому.

Альтернативи 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 від звичайного push-сповіщення?

Silent Push не відображається користувачу, не відтворює звук і не потрапляє в Notification Center. Його завдання — активувати додаток у фоні для синхронізації даних. Звичайний push завжди показує банер і може містити звук і badge.

Скільки часу дається на обробку Silent Push?

Додаток отримує 30 секунд на виконання фонового завдання. Після виклику completionHandler система повертає пристрій у сплячий режим. Якщо не викликати completionHandler вчасно, система може перестати доставляти silent push цьому додатку.

Чому Silent Push може не дійти до пристрою?

Система може відкласти доставку при низькому заряді батареї, у режимі енергозбереження, при частому надсиланні silent push або якщо додаток давно не використовувався. Це нормальна поведінка iOS, не пов’язана з помилками в реалізації.

Чи можна надіслати Silent Push разом із звичайним сповіщенням?

Так, можна вказати content-available: 1 разом з alert — у цьому випадку сповіщення відобразиться користувачу, а додаток додатково отримає фонову активацію. Але якщо завдання — лише фонова синхронізація без показу, alert вказувати не можна.

Як перевірити, що Silent Push коректно обробляється?

Використовуйте Console.app на Mac для перегляду логів фонових завдань. Надішліть тестовий silent push через APNS і перевірте, що викликається didReceiveRemoteNotification з правильним completionHandler. У Xcode використовуйте симулятор з імітацією фонового режиму.

Підсумки

  • Silent Push — механізм фонової синхронізації iOS, що доставляє дані без відображення користувачу, активуючи додаток на 30 секунд.
  • Ключ content-available: 1 — обов’язковий прапорець у пейлоуді APNS, що відрізняє тихе сповіщення від звичайного; alert, sound і badge повинні бути відсутні.
  • Доставка не гарантується — iOS оптимізує доставку silent push на основі заряду батареї, частоти та активності додатка; реальна доставка становить 70–80%.
  • Сценарії використання — фонове завантаження контенту, оновлення віджетів, інвалідація кешу, синхронізація підписок, оновлення badge.
  • Обмеження частоти — не більше 2–3 silent push на годину на один пристрій; перевищення призводить до блокування доставки системою.
  • iOS може відкласти або скасувати Silent Push при низькому заряді, у режимі Low Power Mode або при довгому бездіяльності користувача.
  • Silent Push — ефективний інструмент для оптимізації користувацького досвіду, але не повинен використовуватися для критичних або гарантованих сповіщень.

Ми розробимо мобільний застосунок під ключ

IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.

Обговорити проект

Читайте також