Silent Push — это тип push-уведомления iOS, которое доставляется на устройство без какого-либо отображения пользователю и без звукового сопровождения. Основное назначение тихого уведомления — фоновая синхронизация данных, обновление контента и выполнение коротких задач, не требующих внимания пользователя. По данным 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 с пометкой "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 года. Мы проконсультируем вас и предложим наилучшее решение.
Читайте также