Notification Category: что это, какие категории бывают и как работают в iOS

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

Notification Category (категория уведомлений) — это механизм iOS для группировки push-уведомлений по типу и привязки к ним настраиваемых действий. Категория определяет, какие кнопки отображаются при 3D Touch или long-press на уведомлении, а также как система обрабатывает входящие уведомления этого типа. По данным Apple Developer Documentation, 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) или делает long-press, появляются кнопки, определённые категорией.

Категория регистрируется через объект 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 — кастомный текст для скрытых превью. Правильная настройка опций улучшает пользовательский опыт на разных устройствах Apple.

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 — кастомные данные из APNS-пейлоада. Для UNTextInputAction дополнительно доступен response.userText с введённым пользователем текстом.

Отличия от каналов Android

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

  • Назначение — Android Channels управляют важностью и видимостью уведомлений; iOS Categories — интерактивными действиями
  • Обязательность — Android Channel обязателен для показа уведомления; iOS Category опциональна
  • Управление пользователем — Android пользователь настраивает каналы в системных настройках; iOS категории не видны пользователю напрямую
  • Группировка — Android Channels можно объединять в группы (ChannelGroup); iOS Categories не группируются

На обеих платформах можно комбинировать оба механизма: в Android уведомление может принадлежать каналу с actions от 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" считаются разными категориями. Если категория не найдена, уведомление покажется без кнопок, без ошибок в логах.

Обработка неизвестной категории

Если сервер отправил уведомление с category, которая не зарегистрирована на клиенте, iOS игнорирует категорию и показывает уведомление без кнопок. Ошибка не логируется, и приложение не узнаёт о несоответствии. Рекомендуется синхронизировать список категорий между сервером и клиентом через конфигурационный файл и проверять их при каждом обновлении приложения.

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

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

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

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

Тестируйте категории на разных устройствах: на iPhone с 3D Touch, на iPhone без 3D Touch (long-press), на iPad и на Mac. Поведение категорий может незначительно отличаться на разных платформах Apple. Особое внимание — CarPlay: кнопки категорий отображаются на экране автомобиля, но текстовый ввод недоступен, поэтому UNTextInputAction автоматически скрывается в CarPlay. Для watchOS категории не поддерживаются — все уведомления отображаются без кнопок действий.

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

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

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

Как обработать нажатие на кнопку категории?

Реализуйте делегат UNUserNotificationCenterDelegate и метод didReceive response. Проверьте 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 года. Мы проконсультируем вас и предложим наилучшее решение.

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

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