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 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.

Обговорити проект

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