Какие знаешь push, которые могут разбудить приложение?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Push-уведомления, способные "разбудить" приложение
В iOS существуют типы push-уведомлений, которые могут активировать ("разбудить") приложение, даже когда оно закрыто, находится в фоновом режиме или устройство заблокировано. Это критически важно для обработки срочных обновлений, фоновых задач и обеспечения функциональности в реальном времени. Ключевым механизмом является Background Execution и специальные флаги в полезной нагрузке (payload) уведомления.
1. Push-уведомления с content-available флагом (Silent Push)
Наиболее распространённый способ — это silent push-уведомления (фоновые), которые не отображаются пользователю и предназначены исключительно для активации приложения в фоне. Они активируют метод application(_:didReceiveRemoteNotification:fetchCompletionHandler:) в AppDelegate.
Полезная нагрузка должна содержать:
{
"aps": {
"content-available": 1,
"sound": ""
},
"custom_data": "value"
}
- content-available: 1 — ключевой флаг, сообщающий системе, что приложение должно получить возможность выполнить фоновую работу.
- sound: "" (пустая строка) — рекомендуется, чтобы уведомление было действительно беззвучным и не тревожило пользователя.
- Внимание: Время на выполнение фоновой задачи ограничено (~30 секунд). По завершении обязательно нужно вызвать
fetchCompletionHandler(.newData)(или другую вариацию).
Пример обработки в AppDelegate (Swift):
func application(_ application: UIApplication,
didReceiveRemoteNotification userInfo: [AnyHashable: Any],
fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
// 1. Проверяем наличие флага
guard let aps = userInfo["aps"] as? [String: Any],
aps["content-available"] as? Int == 1 else {
// Это обычное push-уведомление
completionHandler(.noData)
return
}
// 2. Выполняем фоновую задачу (синхронизация, загрузка данных и т.д.)
DispatchQueue.global().async {
// ... Ваша логика (например, загрузка новых сообщений) ...
// 3. Сигнализируем системе о результате
let success = true // или false
completionHandler(success ? .newData : .failed)
}
}
Важные ограничения:
- Частота таких уведомлений регулируется системой Push Notification Coalescing. iOS может группировать или отбрасывать silent push, чтобы сохранить заряд батареи.
- Приложение не может быть принудительно запущено, если пользователь явно выгрузил его из списка многозадачности.
- Требуется включить фоновый режим Remote notifications в Capabilities проекта.
2. Критические оповещения (Critical Alerts)
Введены в iOS 12. Они игнорируют настройки "Do Not Disturb" и режим блокировки, выводя звук и баннер. Хотя основная цель — показать алерт, они также "будят" приложение для обработки.
Полезная нагрузка:
{
"aps": {
"alert": {
"title": "Критическое оповещение",
"body": "Требуется ваше немедленное внимание"
},
"sound": {
"critical": 1,
"name": "default",
"volume": 1.0
},
"interruption-level": "critical"
}
}
Для их отправки требуется особое разрешение (entitlement) от Apple, запрашиваемое во время ревью приложения. Обычно одобряется только для приложений, связанных с жизнью и здоровьем, безопасностью и другими критически важными сферами.
3. Уведомления с высокой важностью (High Priority / Time-Sensitive)
Начиная с iOS 15, появились уровни прерывания (interruption-level). Уровень time-sensitive позволяет уведомлению появиться на заблокированном экране с высоким приоритетом, даже если включён фокус-режим (Focus).
Полезная нагрузка:
{
"aps": {
"alert": "Срочное обновление",
"interruption-level": "time-sensitive",
"sound": "default"
}
}
Такое уведомление также "будит" приложение для обработки.
Итог и рекомендации
- Для фоновых задач (синхронизация, предзагрузка) используйте silent push (content-available: 1).
- Для критически важных оповещений, требующих гарантированного внимания (медицина, безопасность), запрашивайте право на отправку critical alerts.
- Для срочных, но не критичных уведомлений (например, срочное сообщение в чате) используйте уровень
time-sensitive. - Всегда корректно обрабатывайте
completionHandlerв silent push и учитывайте ограничения фонового выполнения, чтобы избежать падений и неоптимального расхода батареи.
Настройка и тестирование этих типов уведомлений требуют серверной поддержки (формирования правильного payload) и правильной конфигурации сертификатов/ключей APNs.