← Назад к вопросам

Какие знаешь типы push-уведомлений в iOS?

1.0 Junior🔥 201 комментариев
#Работа с сетью

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Типы 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.
  • Для улучшения UXRich Notifications.
  • Для жизненно важных событий (медицинские, безопасность) — Critical (с одобрением Apple).
  • Для gradual onboarding пользователей — Provisional.

Технологические детали реализации: Все современные уведомления работают через UserNotifications framework (iOS 10+). Для VoIP рекомендуется PushKit, но с ограничениями. Важно правильно обрабатывать токены устройств (обновляются при переустановке приложения, изменении версии iOS). Также следует учитывать фокус-режимы и настройки пользователя, которые могут фильтровать уведомления.

Каждый тип требует своего подхода к payload, обработке на устройстве и интерактивности. В сложных приложениях часто комбинируются несколько типов для разных сценариев.

Какие знаешь типы push-уведомлений в iOS? | PrepBro