Notification Category: що це, які категорії бувають та як працюють в iOS

Автор: IT Sectr Опубліковано: 2026-03-20 Час читання: 8 хв

Notification Category (категорія сповіщень) — це механізм iOS для групування push-сповіщень за типом і прив'язки до них налаштовуваних дій. Категорія визначає, які кнопки відображаються при 3D Touch або довгому натисканні на сповіщенні, а також як система обробляє вхідні сповіщення цього типу. Згідно з документацією Apple Developer, UNNotificationCategory реєструється в UNUserNotificationCenter і зв'язується зі сповіщенням через поле category в APNS-корисному навантаженні.

Головне

  • Notification Category — механізм iOS для класифікації push-сповіщень і додавання до них дій
  • UNNotificationCategory — клас, який реєструє категорію з набором UNNotificationAction
  • Дії — кнопки під сповіщенням: UNTextInputAction для введення тексту, UNNotificationAction для натискання
  • Зв'язок — категорія вказується в APNS-корисному навантаженні через ключ category у словнику aps
  • Відмінність від Android — iOS Category керує діями, а Android Channel — важливістю та звуком

Що таке Notification Category в iOS?

Notification Category — це функція iOS (починаючи з версії 8.0), яка дозволяє розробнику класифікувати push-сповіщення та додавати до них інтерактивні дії. Коли користувач отримує сповіщення та натискає на нього з силою (3D Touch) або робить довге натискання, з'являються кнопки, визначені категорією. Це робить сповіщення інтерактивними та дозволяє користувачам виконувати дії без відкриття програми.

Категорія реєструється через об'єкт UNNotificationCategory, який містить ідентифікатор, масив дій та опціональні параметри відображення. Система використовує ідентифікатор категорії з APNS-корисного навантаження для пошуку зареєстрованої категорії та показу відповідних кнопок.

На відміну від Android Notification Channel, iOS Category не керує важливістю, звуком або вібрацією. Її єдине завдання — надати інтерактивні можливості для сповіщення: кнопки відповіді, підтвердження, скасування або текстового введення.

Чи обов'язкові категорії?

Категорії не обов'язкові для відображення push-сповіщень на iOS. Сповіщення покажеться в будь-якому випадку — з кнопками, якщо категорія зареєстрована, або без них. Категорії потрібні лише для додавання інтерактивності до сповіщень.

Як працюють категорії сповіщень?

Механізм категорій складається з чотирьох етапів: реєстрація категорії на клієнті, відправка APNS-корисного навантаження з категорією, розпізнавання категорії системою та обробка дії користувача.

  • Реєстрація — програма створює UNNotificationCategory з масивом дій та реєструє в UNUserNotificationCenter
  • Відправка — сервер включає в APNS-корисне навантаження ключ category зі значенням, що збігається з ідентифікатором категорії
  • Показ — iOS відображає сповіщення та при force touch показує кнопки, прив'язані до категорії
  • Обробка — користувач натискає кнопку, спрацьовує UNUserNotificationCenterDelegate.didReceive response

Дії в категорії можуть бути двох типів: foreground (відкривають програму) та background (виконуються у фоновому режимі). Для фонових дій програма отримує обмежений час (близько 30 секунд) на обробку в UNNotificationActionHandler.

Опції при реєстрації категорії

UNNotificationCategory підтримує кілька опцій через параметр options: customDismissAction — отримувати подію при свайпі сповіщення, allowInCarPlay — показувати дії в CarPlay, hiddenPreviewsBodyPlaceholder — кастомний текст-заповнювач для прихованих попередніх переглядів.

UNNotificationAction: типи дій

iOS надає два типи дій для категорій сповіщень. Кожен тип має своє призначення та спосіб взаємодії з користувачем.

ТипКласОписПриклад
Проста діяUNNotificationActionКнопка з заголовком та опціями (destructive, foreground, authenticationRequired)«Видалити», «Переглянути»
Текстове введенняUNTextInputActionКнопка, що відкриває поле введення тексту з підказкою«Відповісти», «Коментувати»

UNTextInputAction — унікальна можливість iOS. При натисканні кнопки «Відповісти» система показує текстове поле, в яке користувач вводить відповідь. Введений текст передається делегату разом з ідентифікатором дії. Це дозволяє реалізувати швидкі відповіді без відкриття програми.

Опції дій: options.authenticationRequired — вимагає розблокування пристрою, options.destructive — виділяє кнопку червоним (для небезпечних дій), options.foreground — відкриває програму після натискання.

Налаштування категорії в коді iOS

Категорії реєструються при запуску програми, зазвичай у методі didFinishLaunchingWithOptions. Реєстрація відбувається через UNUserNotificationCenter, після запиту дозволу на сповіщення. Категорії можна оновлювати при кожному запуску — старі версії замінюються новими.

swift
import UserNotifications

class AppDelegate: UIResponder, UIApplicationDelegate {

    func registerNotificationCategories() {
        let replyAction = UNTextInputNotificationAction(
            identifier: "reply",
            title: "Відповісти",
            options: [.foreground],
            textInputButtonTitle: "Надіслати",
            textInputPlaceholder: "Введіть повідомлення..."
        )

        let deleteAction = UNNotificationAction(
            identifier: "delete",
            title: "Видалити",
            options: [.destructive]
        )

        let messageCategory = UNNotificationCategory(
            identifier: "message",
            actions: [replyAction, deleteAction],
            intentIdentifiers: [],
            options: [.customDismissAction]
        )

        UNUserNotificationCenter.current()
            .setNotificationCategories([messageCategory])
    }

    func application(
        _ application: UIApplication,
        didFinishLaunchingWithOptions options: [UIApplication.LaunchOptionsKey: Any]?
    ) -> Bool {
        UNUserNotificationCenter.current().delegate = self
        registerNotificationCategories()
        return true
    }
}

Після реєстрації категорії кожне сповіщення з category = «message» в APNS-корисному навантаженні показуватиме кнопки «Відповісти» та «Видалити». Обробка натискань відбувається в userNotificationCenter:didReceive response, де actionIdentifier визначає, яка кнопка була натиснута.

Обробка натискання в делегаті

Коли користувач натискає кнопку категорії, iOS викликає делегат UNUserNotificationCenterDelegate з об'єктом UNNotificationResponse. У response.actionIdentifier міститься ідентифікатор натиснутої кнопки, а в response.notification.request.content.userInfo — кастомні дані з корисного навантаження.

Відмінності від каналів Android

Розробники, знайомі з Android Notification Channels, часто плутають їх з iOS Notification Categories. Незважаючи на схожу назву, ці механізми вирішують різні завдання та працюють по-різному.

  • Призначення — Android Channels керують важливістю та видимістю сповіщень; iOS Categories — інтерактивними діями
  • Обов'язковість — Android Channel обов'язковий для показу сповіщення; iOS Category опціональна
  • Керування користувачем — Android користувач налаштовує канали в системних налаштуваннях; iOS категорії не видимі користувачеві безпосередньо
  • Групування — Android Channels можна об'єднувати в групи (ChannelGroup); iOS Categories не групуються

На обох платформах можна комбінувати обидва механізми: на Android сповіщення може належати каналу з діями від NotificationCompat, а на iOS категорія доповнює канали, які в iOS називаються thread-id і служать для групування сповіщень у центрі сповіщень.

APNS-корисне навантаження з категорією

Для того щоб сповіщення відображалося з кнопками категорії, сервер повинен включити ключ category в APNS-корисне навантаження. Без цього ключа система не знатиме, яку категорію застосувати до сповіщення.

json
{
    "aps": {
        "alert": {
            "title": "Нове повідомлення",
            "body": "Анна: Привіт! Як справи?"
        },
        "category": "message",
        "thread-id": "chat_123",
        "badge": 5,
        "sound": "default"
    }
}

Ключ category повинен точно збігатися з ідентифікатором, зареєстрованим через setNotificationCategories на клієнті. Регістр має значення — «message» та «Message» вважаються різними категоріями. Якщо категорію не знайдено, сповіщення покажеться без кнопок, без помилок у логах.

Обробка невідомої категорії

Якщо сервер надіслав сповіщення з категорією, яка не зареєстрована на клієнті, iOS ігнорує категорію та показує сповіщення без кнопок. Помилка не логується, і програма не дізнається про невідповідність. Рекомендується синхронізувати список категорій між сервером та клієнтом.

Паттерни проектування категорій

При проектуванні категорій сповіщень iOS дотримуйтеся принципу одна категорія — один сценарій. Кожна категорія повинна відповідати конкретному типу взаємодії: відповідь на повідомлення, підтвердження дії, відхилення запиту. Не змішуйте різні сценарії в одній категорії.

Використовуйте UNTextInputAction для сценаріїв, де користувач повинен ввести текст без відкриття програми: відповіді в месенджерах, коментарі, швидкі нотатки. Текстові дії підвищують залученість — користувач виконує осмислену дію в 2 торкання замість 5+ у програмі.

Для небезпечних дій (видалення, блокування) використовуйте опцію destructive. iOS виділить такі кнопки червоним кольором, попереджаючи користувача про незворотність дії. Для дій, що вимагають розблокування пристрою (перегляд особистих даних), вкажіть authenticationRequired.

Тестуйте категорії на різних пристроях: на iPhone з 3D Touch, на iPhone без 3D Touch (довге натискання), на iPad та на Mac. Поведінка категорій може дещо відрізнятися на різних платформах Apple. Особливу увагу — CarPlay: кнопки категорій відображаються на екрані автомобіля та повинні бути розроблені з мінімальним текстом для безпеки водія.

Часті запитання

Скільки категорій можна зареєструвати в iOS?

Обмежень немає — iOS не встановлює ліміт на кількість UNNotificationCategory. Однак на практиці рекомендується не більше 10–15 категорій, щоб не ускладнювати обробку в делегаті. Кожна категорія може містити до 4 дій (кнопок). Більше 4 дій ігноруються системою.

Як обробити натискання на кнопку категорії?

Реалізуйте делегат UNUserNotificationCenterDelegate та метод didReceive. Перевірте response.actionIdentifier: UNNotificationDismissActionIdentifier — свайп видалення, UNNotificationDefaultActionIdentifier — торкання на тіло, або ваш кастомний ідентифікатор кнопки. Для текстових кнопок текст доступний через response.userText.

Чим category відрізняється від thread-id?

Category — визначає інтерактивні дії (кнопки) для сповіщення. Thread-id — групує сповіщення в Центрі сповіщень за темами. Обидва ключі вказуються в APNS-корисному навантаженні. Category та thread-id не пов'язані: сповіщення може мати категорію, але не мати thread-id, і навпаки.

Чи працюють категорії на macOS?

Так, UNNotificationCategory підтримується на macOS 10.14+ (Mojave) в програмах, що використовують UserNotifications framework. Поведінка категорій на macOS аналогічна iOS: при натисканні на сповіщення показуються кнопки, обробка відбувається через UNUserNotificationCenterDelegate.

Чи потрібно оновлювати категорії при кожному запуску?

Рекомендується реєструвати категорії при кожному запуску програми через setNotificationCategories. Система замінює старий набір категорій новим при кожному виклику. Якщо не оновлювати, категорії зберігаються між запусками, але при зміні коду старі категорії можуть спричинити неочікувану поведінку.

Підсумки

  • Notification Category — механізм iOS для додавання інтерактивних дій до push-сповіщень
  • UNNotificationCategory — клас, що об'єднує ідентифікатор, масив UNNotificationAction та опції
  • UNTextInputAction — дія з полем введення тексту для швидких відповідей без відкриття програми
  • APNS-корисне навантаження — ключ category у словнику aps зв'язує сповіщення із зареєстрованою категорією
  • До 4 дій — максимум кнопок на одну категорію, інші ігноруються системою
  • Опції дій — foreground (відкрити програму), destructive (червона кнопка), authenticationRequired
  • Відмінність від Android — iOS Category відповідає за дії, Android Channel — за важливість та звук

Ми розробимо мобільний застосунок під ключ

IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.

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

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