Rich Notification: что это, медиа-контент и создание уведомлений

Автор: IT Sectr Опубликовано: 2026-03-20 Время чтения: 8 мин

Rich Notification — это расширенный формат push-уведомлений iOS, который включает медиа-вложения, интерактивные кнопки и кастомные интерфейсы для улучшения пользовательского опыта. В отличие от стандартных текстовых уведомлений, Rich Notification может отображать изображения, видео и аудио прямо в баннере или на экране блокировки. По данным Apple Developer Documentation, 2026, UNNotificationAttachment поддерживает до 10 файлов в одном уведомлении и автоматически масштабирует их для оптимального отображения на всех устройствах.

Главное

  • Медиа-вложения — Rich Notification поддерживает изображения (JPEG, PNG, GIF), видео (MP4, MOV до 30 секунд) и аудио (MP3, AAC, WAV) через UNNotificationAttachment.
  • Интерактивность — кнопки и текстовый ввод добавляются через UNNotificationAction и UNTextInputNotificationAction, привязанные к категориям уведомлений.
  • Service Extension — обязательный компонент для загрузки медиа: именно он скачивает вложение по URL из пейлоуда и добавляет его в контент.
  • Content Extension — создаёт полностью кастомный интерфейс уведомления с произвольным UI, анимациями и обработкой жестов.
  • Лимиты — максимальный размер вложения 10 MB, ограничение памяти расширения 50 MB, время обработки до 30 секунд.

Что такое Rich Notification

Rich Notification — это push-уведомление iOS, которое содержит не только текст, но и медиа-вложения, интерактивные элементы и кастомизированный интерфейс. Термин "rich" (богатый) отражает возможность включать в уведомление изображения, видео, аудио, кнопки действий и текстовый ввод, что превращает простое оповещение в полноценный интерактивный элемент.

Эволюция уведомлений в iOS

Apple внедрила поддержку Rich Notification в iOS 10 вместе с фреймворком UserNotifications. До этого push-уведомления могли содержать только текст, звук и badge. iOS 10 представила UNNotificationServiceExtension и UNNotificationContentExtension, которые открыли возможность модификации контента и создания кастомных интерфейсов. В более поздних версиях добавилась поддержка SwiftUI в Content Extension, анимированных GIF и улучшенное масштабирование медиа.

Преимущества перед стандартными уведомлениями

Rich Notification значительно повышает вовлечённость пользователей. Исследования Apple показывают, что уведомления с изображениями получают на 30–40% больше взаимодействий по сравнению с текстовыми. Изображение товара, превью видео или кнопка быстрого ответа позволяют пользователю принять решение прямо из уведомления, не открывая приложение. Это сокращает путь до целевого действия и улучшает пользовательский опыт.

Типы медиа-вложений и их форматы

UNNotificationAttachment поддерживает три категории медиа: изображения, видео и аудио. Каждый тип имеет свои ограничения по формату, размеру и продолжительности. Система автоматически масштабирует изображения под размер уведомления и ограничивает длительность видео 30 секундами для оптимизации производительности.

Тип медиаПоддерживаемые форматыМаксимальный размер
ИзображенияJPEG, PNG, GIF, TIFF10 MB на файл
ВидеоMPEG, MP4, MOV10 MB, до 30 секунд
АудиоMP3, AAC, WAV, CAF10 MB

Изображения и анимированные GIF

Изображения автоматически обрезаются и масштабируются системой для отображения в компактном и расширенном виде уведомления. Анимированные GIF поддерживаются начиная с iOS 12 и воспроизводятся автоматически при просмотре уведомления. Рекомендуемый размер изображения — 1024x1024 пикселей, что обеспечивает чёткое отображение на всех устройствах, включая iPad с большим экраном.

Видео и аудио вложения

Видео в Rich Notification воспроизводится без звука по умолчанию — пользователь может включить звук через кнопку в плеере. Максимальная длительность видео составляет 30 секунд, после чего воспроизведение останавливается. Аудио-вложения могут использоваться для голосовых сообщений или звуковых превью и воспроизводятся при нажатии на уведомление в расширенном виде.

Интерактивные кнопки и действия

Интерактивные действия позволяют пользователю выполнять операции прямо из уведомления без открытия приложения. Действия регистрируются через UNNotificationCategory и UNNotificationAction при запуске приложения. Каждое действие может быть фоновым (без открытия приложения) или форграундным (открывает приложение для завершения операции).

UNNotificationAction и UNTextInputNotificationAction

UNNotificationAction представляет собой кнопку с заголовком и опциональными модификаторами, такими как requiresAuthentication (требуется Face ID/Touch ID) или destructive (выделяется красным цветом). UNTextInputNotificationAction расширяет эту возможность, добавляя текстовое поле для ввода — идеально для быстрого ответа на сообщение или комментарий. Действия отображаются при длительном нажатии на уведомление или смахивании вниз.

Регистрация категорий и действий

Категории уведомлений связывают тип контента с набором доступных действий. Процесс регистрации выполняется в AppDelegate при запуске приложения через UNUserNotificationCenter.current().setNotificationCategories. Категория указывается на сервере в поле category JSON-пейлоуда, и система автоматически применяет соответствующий набор действий к уведомлению.

Обработка нажатий на действия

Когда пользователь нажимает кнопку или отправляет текст, система вызывает делегат UNUserNotificationCenterDelegate с методом didReceive response. UNNotificationResponse содержит идентификатор действия и введённый текст (для UNTextInputNotificationAction). На основе этой информации приложение выполняет соответствующую бизнес-логику: отправляет сообщение, подтверждает действие или открывает определённый экран.

Реализация Rich Notification на Swift

Рассмотрим полный цикл создания Rich Notification: от регистрации категорий в AppDelegate до обработки в Service Extension и отображения. AppDelegate регистрирует категорию с кнопками, сервер отправляет уведомление с URL изображения, Service Extension загружает медиа, и Content Extension отображает кастомный интерфейс с кнопками.

swift
// AppDelegate — регистрация категорий и действий
func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions:
    [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {

    let replyAction = UNTextInputNotificationAction(
        identifier: "reply",
        title: "Ответить",
        options: [.authenticationRequired])

    let likeAction = UNNotificationAction(
        identifier: "like",
        title: "Нравится",
        options: [])

    let category = UNNotificationCategory(
        identifier: "social_post",
        actions: [replyAction, likeAction],
        intentIdentifiers: [],
        options: [])

    UNUserNotificationCenter.current()
        .setNotificationCategories([category])
    return true
}

Service Extension для загрузки изображения

После получения push-уведомления с категорией "social_post" и URL изображения в кастомном поле, активируется Service Extension. Расширение загружает изображение по сети, создаёт UNNotificationAttachment с уникальным идентификатором и добавляет его в контент. Важно проверять размер загруженного файла — если он превышает 10 MB, attachment не создастся, и система покажет уведомление без медиа.

swift
class NotificationService: UNNotificationServiceExtension {

    override func didReceive(
        _ request: UNNotificationRequest,
        withContentHandler contentHandler:
        @escaping (UNNotificationContent) -> Void
    ) {
        let content = (request.content.mutableCopy()
            as! UNMutableNotificationContent)
        guard let urlString = content.userInfo["media-url"]
            as? String,
            let url = URL(string: urlString)
        else { contentHandler(request.content); return }

        URLSession.shared.downloadTask(with: url) {
            location, _, _ in
            guard let location = location else {
                contentHandler(content); return }
            let attachment = try! UNNotificationAttachment(
                identifier: "media", url: location,
                options: [UNNotificationAttachmentOptionsTypeHintKey:
                    "jpg"])
            content.attachments = [attachment]
            contentHandler(content)
        }.resume()
    }
}

Тестирование Rich Notification

Для тестирования Rich Notification без сервера используйте симулятор iOS и отправляйте push через терминал с помощью xcrun simctl push. В пейлоуде обязательно укажите mutable-content: 1 для активации Service Extension и category для отображения действий. Команда запускает push с JSON-файла прямо на выбранный симулятор, что позволяет быстро итерировать без настройки серверной инфраструктуры.

Content Extension и кастомный интерфейс

UNNotificationContentExtension позволяет полностью заменить стандартный интерфейс уведомления на произвольный UIKit или SwiftUI view. Расширение активируется, когда пользователь расширяет уведомление (force touch или смахивание вниз) и может содержать кнопки, слайдеры, анимации и любые другие UI-компоненты. Размер интерфейса адаптируется под контент с помощью Auto Layout.

Storyboard и SwiftUI в Content Extension

Content Extension базируется на storyboard с представлением, наследующим UIViewController. SwiftUI View интегрируется через UIHostingController начиная с iOS 16, что позволяет использовать современные подходы к построению интерфейса. Для обратной совместимости с iOS 14–15 рекомендуется использовать UIKit с xib-файлами. Интерфейс получает модифицированный контент от Service Extension через UNNotificationContent.

Обработка пользовательских действий

Content Extension реализует протокол UNNotificationContentExtension с методом didReceive response. UNNotificationResponse содержит информацию о нажатой кнопке или введённом тексте. Расширение может обновить интерфейс без закрытия уведомления или вызвать completion handler для его закрытия. Это позволяет создавать сценарии быстрого взаимодействия, например, "лайк" с визуальной обратной связью прямо в уведомлении.

Рекомендации по дизайну

Apple рекомендует делать Content Extension лаконичным и функциональным, избегая избыточных элементов. Максимальная высота расширенного уведомления — около 400 точек, после чего контент скроллится. Используйте системные шрифты и отступы для единообразия с другими уведомлениями. Тестируйте на разных размерах экрана, чтобы убедиться, что интерфейс корректно отображается как на iPhone, так и на iPad.

Часто задаваемые вопросы

Какой максимальный размер изображения в Rich Notification?

Максимальный размер одного медиа-вложения — 10 MB. При превышении лимита UNNotificationAttachment не создаётся, и уведомление отображается без медиа. Рекомендуется оптимизировать изображения до 1–3 MB для быстрой загрузки в Service Extension.

Работают ли Rich Notification на всех моделях iPhone?

Rich Notification поддерживаются на всех устройствах с iOS 10 и выше, включая iPhone 5s и новее. Content Extension с кастомным UI доступен с iOS 12. SwiftUI в Content Extension — с iOS 16. На более старых версиях уведомление отображается в стандартном виде.

Можно ли использовать GIF в Rich Notification?

Да, анимированные GIF поддерживаются начиная с iOS 12. GIF загружается через UNNotificationAttachment как обычное изображение и автоматически воспроизводится при просмотре уведомления. Размер GIF ограничен теми же 10 MB, что и другие форматы.

Сколько кнопок можно добавить к уведомлению?

Максимум 4 действия на одно уведомление при регистрации категории. При большем количестве система отображает первые 4, остальные игнорирует. Рекомендуется использовать 2–3 кнопки для оптимального UX — слишком много вариантов перегружают интерфейс.

Нужен ли сервер для отправки Rich Notification?

Да, сервер должен отправлять push через APNS (Apple Push Notification service) с JSON-пейлоудом, содержащим URL медиа-файла в кастомном поле и флаг mutable-content: 1. Сервер также указывает category для активации Content Extension и действий.

Итоги

  • Rich Notification — push-уведомление iOS с медиа-вложениями, интерактивными кнопками и кастомным UI, повышающее вовлечённость пользователей.
  • Поддерживаемые медиа — изображения JPEG/PNG/GIF, видео MP4/MOV (до 30 с), аудио MP3/AAC/WAV с лимитом 10 MB на файл.
  • Service Extension загружает медиа по URL из пейлоуда и добавляет UNNotificationAttachment в контент уведомления.
  • Интерактивные действия — до 4 кнопок на категорию, включая текстовый ввод через UNTextInputNotificationAction.
  • Content Extension заменяет стандартный интерфейс на кастомный UIKit/SwiftUI view с произвольными элементами.
  • Content Extension реализует протокол UNNotificationContentExtension с методом didReceive для обработки нажатий и обновления UI в реальном времени.
  • Rich Notification требует настройки на всех уровнях: сервер (APNS), Service Extension (загрузка медиа) и AppDelegate (регистрация категорий).

Мы разработаем мобильное приложение под ключ

IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.

Обсудить проект

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