Notification Category: какво е, какви категории съществуват и как работят в iOS

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

Notification Category (категория на известие) е механизъм на iOS за групиране на push известия по тип и прикачване на персонализируеми действия. Категорията определя кои бутони се показват при 3D Touch или продължително натискане на известие, както и как системата обработва входящи известия от този тип. Според 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) или продължително, се появяват бутоните, определени от категорията.

Категорията се регистрира чрез обекта 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 известието може да принадлежи към канал с действия от 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 (продължително натискане), на 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 г. Ще ви консултираме и ще предложим най-доброто решение.

Обсъдете проекта

Прочетете също