Какие знаешь типы push-уведомлений в iOS?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Типы Push-уведомлений в iOS
В iOS система push-уведомлений делится на несколько категорий, которые определяются их типом содержимого, способом отправки и возможностями взаимодействия. Вот основные типы, которые я использую в разработке:
1. Remote Notifications (Удалённые уведомления)
Это классические push-уведомления, отправляемые через сервер приложения (например, через APNs — Apple Push Notification service).
Типы содержимого Remote Notifications:
- Alert — стандартное уведомление с заголовком, подзаголовком и текстом. Показывает интерфейс уведомления на устройстве.
// Пример payload для Alert { "aps": { "alert": { "title": "Новое сообщение", "body": "Привет! Как дела?", "subtitle": "От Ивана" }, "sound": "default", "badge": 1 } } - Background — уведомление, которое не показывает интерфейс, но запускает обработку в фоне. Используется для тихой передачи данных (например, синхронизация).
// Payload для Background уведомления { "aps": { "content-available": 1 // Ключевой флаг для фоновой обработки }, "custom_data": {"sync": true} } - Location — специальные уведомления, связанные с изменением геопозиции (требуют соответствующих разрешений).
- VoIP — уведомления для VoIP приложений, которые могут запускать приложение в фоне для обработки звонков (сейчас рекомендуется заменять на CallKit и PushKit).
2. Local Notifications (Локальные уведомления)
Уведомления, которые создаются и планируются непосредственно на устройстве, без участия сервера.
Основные сценарии использования:
- Планирование по времени — например, напоминание каждую пятницу в 18:00.
let content = UNMutableNotificationContent() content.title = "Планерка" content.body = "Не забудь подготовить отчет" content.sound = .default let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 86400, repeats: true) let request = UNNotificationRequest(identifier: "weeklyMeeting", content: content, trigger: trigger) UNUserNotificationCenter.current().add(request) - Планирование по календарю — более точные даты/время.
- Планирование по локации — уведомление при входе/выходе из геозоны (используется CLRegion).
3. Silent Notifications (Тихие уведомления)
Это подвид Remote Notifications, который не показывает пользователю интерфейс, но вызывает фоновое выполнение приложения для обработки данных.
Ключевые особенности:
- Пользователь не видит никакого UI.
- Приложение получает до 30 секунд фонового времени для обработки.
- Требует наличие
content-available: 1в payload и соответствующей реализации вAppDelegate.// Обработка в AppDelegate func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) { // Проверяем, является уведомление тихим if let aps = userInfo["aps"] as? [String: Any], aps["content-available"] as? Int == 1 { // Выполняем фоновую работу: синхронизация, загрузка данных syncData() completionHandler(.newData) } }
4. Service Extension Notifications (Уведомления с расширением службы)
Позволяют модифицировать содержимое уведомления перед его показом пользователю. Используются для:
- Шифрования/дешифрования содержимого.
- Загрузки дополнительных данных (например, изображения для богатого уведомления).
- Персонализации текста на основе данных пользователя.
Техническая реализация:
- Создается отдельный target Notification Service Extension.
- Расширение имеет до 30 секунд для обработки перед показом.
// NotificationServiceExtension class NotificationService: UNNotificationServiceExtension { override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) { let modifiedContent = request.content.mutableCopy() as! UNMutableNotificationContent // Модифицируем содержимое: добавляем изображение if let imageUrl = request.content.userInfo["image_url"] as? String { // Загружаем и прикрепляем изображение modifiedContent.attachments = [try UNNotificationAttachment(identifier: "image", url: imageUrl)] } contentHandler(modifiedContent) } }
5. Rich Notifications (Богатые уведомления)
Уведомления с расширенным UI: изображения, видео, аудио, интерактивные кнопки.
Компоненты богатых уведомлений:
- Attachments — медиафайлы (максимум 10MB, определенные форматы).
- Custom UI через Notification Content Extension — полностью кастомный интерфейс уведомления.
- Action Buttons — интерактивные кнопки с категориями действий.
// Создание категории с действиями let action1 = UNNotificationAction(identifier: "like", title: "👍 Лайк", options: []) let action2 = UNNotificationAction(identifier: "reply", title: "📝 Ответить", options: [.foreground]) let category = UNNotificationCategory(identifier: "socialActions", actions: [action1, action2], intentIdentifiers: [], options: []) UNUserNotificationCenter.current().setNotificationCategories([category])
6. Critical Notifications (Критические уведомления)
Введены в iOS 15 для очень важных уведомлений, которые обходят фокус-режимы и настройки звука.
Условия использования:
- Требуют специальное разрешение от Apple (запрос через портал разработчика).
- Работают даже если устройство в фокус-режиме или звук выключен.
- Имеют особый payload-флаг.
{ "aps": { "alert": { ... }, "sound": { "critical": 1, "name": "critical.mp3", "volume": 1.0 }, "interruption-level": "critical" } }
7. Provisional Notifications (Предварительные уведомления)
Также появились в iOS 15 — система тихого пробного периода для уведомлений. Пользователь получает уведомления без явного разрешения сначала в фокус-режиме, а потом может выбрать "продолжать" или "остановить".
Использование в коде:
// Запрос разрешения с provisional вариантом
UNUserNotificationCenter.current().requestAuthorization(options: [.provisional, .sound, .badge]) { granted, error in
// Если granted, уведомления сначала будут приходить тихо в фокус-режиме
}
Практические рекомендации по выбору типа
- Для информирования пользователя в реальном времени — Remote Alert.
- Для фоновой синхронизации данных — Silent/Background.
- Для планируемых локальных событий (напоминания) — Local.
- Для конфиденциальности или персонализации — Service Extension.
- Для улучшения UX — Rich Notifications.
- Для жизненно важных событий (медицинские, безопасность) — Critical (с одобрением Apple).
- Для gradual onboarding пользователей — Provisional.
Технологические детали реализации: Все современные уведомления работают через UserNotifications framework (iOS 10+). Для VoIP рекомендуется PushKit, но с ограничениями. Важно правильно обрабатывать токены устройств (обновляются при переустановке приложения, изменении версии iOS). Также следует учитывать фокус-режимы и настройки пользователя, которые могут фильтровать уведомления.
Каждый тип требует своего подхода к payload, обработке на устройстве и интерактивности. В сложных приложениях часто комбинируются несколько типов для разных сценариев.