Rich Notification — это расширенный формат push-уведомлений iOS, который включает медиа-вложения, интерактивные кнопки и кастомные интерфейсы для улучшения пользовательского опыта. В отличие от стандартных текстовых уведомлений, Rich Notification может отображать изображения, видео и аудио прямо в баннере или на экране блокировки. По данным Apple Developer Documentation, 2026, UNNotificationAttachment поддерживает до 10 файлов в одном уведомлении и автоматически масштабирует их для оптимального отображения на всех устройствах.
Главное
Rich Notification — это push-уведомление iOS, которое содержит не только текст, но и медиа-вложения, интерактивные элементы и кастомизированный интерфейс. Термин "rich" (богатый) отражает возможность включать в уведомление изображения, видео, аудио, кнопки действий и текстовый ввод, что превращает простое оповещение в полноценный интерактивный элемент.
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, TIFF | 10 MB на файл |
| Видео | MPEG, MP4, MOV | 10 MB, до 30 секунд |
| Аудио | MP3, AAC, WAV, CAF | 10 MB |
Изображения автоматически обрезаются и масштабируются системой для отображения в компактном и расширенном виде уведомления. Анимированные GIF поддерживаются начиная с iOS 12 и воспроизводятся автоматически при просмотре уведомления. Рекомендуемый размер изображения — 1024x1024 пикселей, что обеспечивает чёткое отображение на всех устройствах, включая iPad с большим экраном.
Видео в Rich Notification воспроизводится без звука по умолчанию — пользователь может включить звук через кнопку в плеере. Максимальная длительность видео составляет 30 секунд, после чего воспроизведение останавливается. Аудио-вложения могут использоваться для голосовых сообщений или звуковых превью и воспроизводятся при нажатии на уведомление в расширенном виде.
Интерактивные действия позволяют пользователю выполнять операции прямо из уведомления без открытия приложения. Действия регистрируются через UNNotificationCategory и UNNotificationAction при запуске приложения. Каждое действие может быть фоновым (без открытия приложения) или форграундным (открывает приложение для завершения операции).
UNNotificationAction представляет собой кнопку с заголовком и опциональными модификаторами, такими как requiresAuthentication (требуется Face ID/Touch ID) или destructive (выделяется красным цветом). UNTextInputNotificationAction расширяет эту возможность, добавляя текстовое поле для ввода — идеально для быстрого ответа на сообщение или комментарий. Действия отображаются при длительном нажатии на уведомление или смахивании вниз.
Категории уведомлений связывают тип контента с набором доступных действий. Процесс регистрации выполняется в AppDelegate при запуске приложения через UNUserNotificationCenter.current().setNotificationCategories. Категория указывается на сервере в поле category JSON-пейлоуда, и система автоматически применяет соответствующий набор действий к уведомлению.
Когда пользователь нажимает кнопку или отправляет текст, система вызывает делегат UNUserNotificationCenterDelegate с методом didReceive response. UNNotificationResponse содержит идентификатор действия и введённый текст (для UNTextInputNotificationAction). На основе этой информации приложение выполняет соответствующую бизнес-логику: отправляет сообщение, подтверждает действие или открывает определённый экран.
Рассмотрим полный цикл создания Rich Notification: от регистрации категорий в AppDelegate до обработки в Service Extension и отображения. AppDelegate регистрирует категорию с кнопками, сервер отправляет уведомление с URL изображения, Service Extension загружает медиа, и Content Extension отображает кастомный интерфейс с кнопками.
// 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
}
После получения push-уведомления с категорией "social_post" и URL изображения в кастомном поле, активируется Service Extension. Расширение загружает изображение по сети, создаёт UNNotificationAttachment с уникальным идентификатором и добавляет его в контент. Важно проверять размер загруженного файла — если он превышает 10 MB, attachment не создастся, и система покажет уведомление без медиа.
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 без сервера используйте симулятор iOS и отправляйте push через терминал с помощью xcrun simctl push. В пейлоуде обязательно укажите mutable-content: 1 для активации Service Extension и category для отображения действий. Команда запускает push с JSON-файла прямо на выбранный симулятор, что позволяет быстро итерировать без настройки серверной инфраструктуры.
UNNotificationContentExtension позволяет полностью заменить стандартный интерфейс уведомления на произвольный UIKit или SwiftUI view. Расширение активируется, когда пользователь расширяет уведомление (force touch или смахивание вниз) и может содержать кнопки, слайдеры, анимации и любые другие UI-компоненты. Размер интерфейса адаптируется под контент с помощью Auto Layout.
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.
Часто задаваемые вопросы
Максимальный размер одного медиа-вложения — 10 MB. При превышении лимита UNNotificationAttachment не создаётся, и уведомление отображается без медиа. Рекомендуется оптимизировать изображения до 1–3 MB для быстрой загрузки в Service Extension.
Rich Notification поддерживаются на всех устройствах с iOS 10 и выше, включая iPhone 5s и новее. Content Extension с кастомным UI доступен с iOS 12. SwiftUI в Content Extension — с iOS 16. На более старых версиях уведомление отображается в стандартном виде.
Да, анимированные GIF поддерживаются начиная с iOS 12. GIF загружается через UNNotificationAttachment как обычное изображение и автоматически воспроизводится при просмотре уведомления. Размер GIF ограничен теми же 10 MB, что и другие форматы.
Максимум 4 действия на одно уведомление при регистрации категории. При большем количестве система отображает первые 4, остальные игнорирует. Рекомендуется использовать 2–3 кнопки для оптимального UX — слишком много вариантов перегружают интерфейс.
Да, сервер должен отправлять push через APNS (Apple Push Notification service) с JSON-пейлоудом, содержащим URL медиа-файла в кастомном поле и флаг mutable-content: 1. Сервер также указывает category для активации Content Extension и действий.
Итоги
Мы разработаем мобильное приложение под ключ
IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.
Читайте также