Notification Category: co to je, jaké kategorie existují a jak fungují v iOS

Autor: IT Sectr Publikováno: 2026-03-20 Doba čtení: 8 min

Notification Category (kategorie oznámení) je mechanismus iOS pro seskupování push oznámení podle typu a připojení přizpůsobitelných akcí. Kategorie určuje, která tlačítka se zobrazí při 3D Touch nebo dlouhém stisknutí oznámení, a také jak systém zpracovává příchozí oznámení tohoto typu. Podle Apple Developer Documentation je UNNotificationCategory registrován v UNUserNotificationCenter a propojen s oznámením prostřednictvím pole category v APNS payloadu.

Hlavní body

  • Notification Category — mechanismus iOS pro klasifikaci push oznámení a přidávání akcí
  • UNNotificationCategory — třída, která registruje kategorii se sadou UNNotificationAction
  • Akce — tlačítka pod oznámením: UNTextInputAction pro zadávání textu, UNNotificationAction pro klepnutí
  • Propojení — kategorie je uvedena v APNS payloadu pomocí klíče category ve slovníku aps
  • Rozdíl oproti Androidu — iOS Category spravuje akce, Android Channel spravuje důležitost a zvuk

Co je Notification Category v iOS?

Notification Category je funkce iOS (od verze 8.0), která umožňuje vývojáři klasifikovat push oznámení a přidávat k nim interaktivní akce. Když uživatel obdrží oznámení a silně na něj stiskne (3D Touch) nebo dlouze stiskne, zobrazí se tlačítka definovaná kategorií.

Kategorie se registruje prostřednictvím objektu UNNotificationCategory, který obsahuje identifikátor, pole akcí a volitelné parametry zobrazení. Systém používá identifikátor kategorie z APNS payloadu k nalezení registrováné kategorie a zobrazení odpovídajících akcí.

Na rozdíl od Android Notification Channel, iOS Category nespravuje důležitost, zvuk ani vibraci. Jejím jediným úkolem je poskytnout interaktivní možnosti pro oznámení: tlačítka pro odpověď, potvrzení, zrušení nebo zadání textu.

Povinnost kategorií

Kategorie nejsou povinné pro zobrazení push oznámení na iOS. Oznámení se zobrazí v každém případě — s tlačítky, pokud je kategorie registrována, nebo bez nich. Kategorie jsou potřeba pouze pro přidání interaktivity k oznámením.

Jak fungují kategorie oznámení?

Mechanismus kategorií se skládá ze čtyř fází: registrace kategorie na klientovi, odeslání APNS payloadu s kategorií, rozpoznání kategorie systémem a zpracování akce uživatele.

  • Registrace — aplikace vytvoří UNNotificationCategory s polem akcí a zaregistruje v UNUserNotificationCenter
  • Odeslání — server zahrne do APNS payloadu klíč category s hodnotou odpovídající identifikátoru kategorie
  • Zobrazení — iOS zobrazí oznámení a při force touch ukáže tlačítka přiřazená kategorii
  • Zpracování — uživatel stiskne tlačítko, spustí se UNUserNotificationCenterDelegate.didReceive response

Akce v kategorii mohou být dvou typů: foreground (otevírají aplikaci) a background (provádějí se na pozadí). Pro akce na pozadí aplikace získá omezený čas (přibližně 30 sekund) na zpracování v UNNotificationActionHandler.

Možnosti při registraci kategorie

UNNotificationCategory podporuje několik možností prostřednictvím parametru options: customDismissAction — přijetí události při přejetí oznámení, allowInCarPlay — zobrazení akcí v CarPlay, hiddenPreviewsBodyPlaceholder — vlastní text pro skryté náhledy. Správná konfigurace možností zlepšuje uživatelský zážitek na různých zařízeních Apple.

UNNotificationAction: typy akcí

iOS nabízí dva typy akcí pro kategorie oznámení. Každý typ má svůj vlastní účel a způsob interakce s uživatelem.

TypTřídaPopisPříklad
Jednoduchá akceUNNotificationActionTlačítko s názvem a možnostmi (destructive, foreground, authenticationRequired)„Smazat”, „Zobrazit”
Zadávání textuUNTextInputActionTlačítko otevírající pole pro zadávání textu s nápovědou„Odpovědět”, „Komentovat”

UNTextInputAction — jedinečná schopnost iOS. Při stisknutí tlačítka „Odpovědět" systém zobrazí textové pole, do kterého uživatel zadá odpověď. Zadaný text je předán delegátovi spolu s identifikátorem akce. To umožňuje rychlé odpovědi bez otevírání aplikace.

Možnosti akcí: options.authenticationRequired — vyžaduje odemknutí zařízení, options.destructive — zvýrazní tlačítko červeně (pro nebezpečné akce), options.foreground — otevře aplikaci po stisknutí.

Konfigurace kategorie v kódu iOS

Kategorie se registrují při spuštění aplikace, obvykle v metodě didFinishLaunchingWithOptions. Registrace probíhá prostřednictvím UNUserNotificationCenter po vyžádání oprávnění pro oznámení. Kategorie lze aktualizovat při každém spuštění — staré verze jsou nahrazeny novými.

swift
import UserNotifications

class AppDelegate: UIResponder, UIApplicationDelegate {

    func registerNotificationCategories() {
        let replyAction = UNTextInputNotificationAction(
            identifier: "reply",
            title: "Odpovědět",
            options: [.foreground],
            textInputButtonTitle: "Odeslat",
            textInputPlaceholder: "Zadejte zprávu..."
        )

        let deleteAction = UNNotificationAction(
            identifier: "delete",
            title: "Smazat",
            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
    }
}

Po registraci kategorie každé oznámení s category = „message" v APNS payloadu zobrazí tlačítka „Odpovědět" a „Smazat". Zpracování stisknutí probíhá v userNotificationCenter:didReceive response, kde actionIdentifier určuje, které tlačítko bylo stisknuto.

Zpracování stisknutí v delegátovi

Když uživatel stiskne tlačítko kategorie, iOS zavolá delegáta UNUserNotificationCenterDelegate s objektem UNNotificationResponse. V response.actionIdentifier je obsažen identifikátor stisknutého tlačítka a v response.notification.request.content.userInfo jsou vlastní data z APNS payloadu. Pro UNTextInputAction je navíc k dispozici response.userText s textem zadaným uživatelem.

Rozdíly oproti kanálům Android

Vývojáři obeznámení s Android Notification Channels je často zaměňují s iOS Notification Categories. Navzdory podobnému názvu tyto mechanismy řeší různé úkoly a fungují odlišně.

  • Účel — Android Channels spravují důležitost a viditelnost oznámení; iOS Categories — interaktivní akce
  • Povinnost — Android Channel je povinný pro zobrazení oznámení; iOS Category je volitelná
  • Ovladání uživatelem — uživatel Android konfiguruje kanály v systémových nastaveních; kategorie iOS nejsou uživateli přímo viditelné
  • Seskupování — Android Channels lze slučovat do skupin (ChannelGroup); iOS Categories se neseskupují

Na obou platformách lze kombinovat oba mechanismy: v Android může oznámení patřit do kanálu s akcemi z NotificationCompat a v iOS kategorie doplňuje kanály, které se v iOS nazývají thread-id a slouží k seskupování oznámení v centru oznámení.

APNS payload s kategorií

Aby se oznámení zobrazilo s tlačítky kategorie, musí server zahrnout klíč category do APNS payloadu. Bez tohoto klíče systém nebude vědět, kterou kategorii na oznámení aplikovat.

json
{
    "aps": {
        "alert": {
            "title": "Nová zpráva",
            "body": "Anna: Ahoj! Jak se máš?"
        },
        "category": "message",
        "thread-id": "chat_123",
        "badge": 5,
        "sound": "default"
    }
}

Klíč category musí přesně odpovídat identifikátoru zaregistrovanému prostřednictvím setNotificationCategories na klientovi. Na velikosti písmen záleží — „message" a „Message" jsou považovány za různé kategorie. Pokud kategorie není nalezena, oznámení se zobrazí bez tlačítek, bez chyb v protokolech.

Zpracování neznámé kategorie

Pokud server odeslal oznámení s category, která není na klientovi registrována, iOS kategorii ignoruje a zobrazí oznámení bez tlačítek. Chyba není protokolována a aplikace se o neshodě nedozví. Doporučuje se synchronizovat seznam kategorií mezi serverem a klientem pomocí konfiguračního souboru a kontrolovat je při každé aktualizaci aplikace.

Vzory návrhu kategorií

Při navrhování kategorií oznámení iOS dodržujte zásadu jedna kategorie — jeden scénář. Každá kategorie by měla odpovídat konkrétnímu typu interakce: odpověď na zprávu, potvrzení akce, zamítnutí požadavku. Nemíchejte různé scénáře v jedné kategorii — to uživatele mate a komplikuje zpracování v delegátovi.

Používejte UNTextInputAction pro scénáře, kde uživatel musí zadat text bez otevírání aplikace: odpovědi v messengerech, komentáře, rychlé poznámky. Textové akce zvyšují zapojení — uživatel provádí smysluplnou akci ve 2 klepnutích místo 5+ v otevřené aplikaci.

Pro nebezpečné akce (smazání, blokování) použijte možnost destructive. iOS zvýrazní tato tlačítka červeně, varuje uživatele před nezvratností akce. Pro akce vyžadující odemknutí zařízení (zobrazení osobních údajů) nastavte authenticationRequired — systém před provedením vyžádá Face ID nebo heslo.

Testujte kategorie na různých zařízeních: na iPhone s 3D Touch, na iPhone bez 3D Touch (dlouhé stisknutí), na iPadu a na Macu. Chování kategorií se může na různých platformách Apple mírně lišit. Zvláštní pozornost — CarPlay: tlačítka kategorií se zobrazují na obrazovce auta, ale zadávání textu není k dispozici, proto je UNTextInputAction v CarPlay automaticky skryto. Na watchOS kategorie nejsou podporovány — všechna oznámení se zobrazují bez tlačítek akcí.

Často kladené otázky

Kolik kategorií lze v iOS registrovat?

Neexistuje žádné omezení — iOS nestanovuje limit na počet UNNotificationCategory. V praxi se však doporučuje nepřekračovat 10–15 kategorií, aby se nekomplikovalo zpracování v delegátovi. Každá kategorie může obsahovat až 4 akce (tlačítka). Více než 4 akce jsou systémem ignorovány.

Jak zpracovat stisknutí tlačítka kategorie?

Implementujte delegáta UNUserNotificationCenterDelegate a metodu didReceive response. Zkontrolujte response.actionIdentifier: UNNotificationDismissActionIdentifier — přejetí smazání, UNNotificationDefaultActionIdentifier — klepnutí na tělo, nebo váš vlastní identifikátor tlačítka. Pro textová tlačítka je text k dispozici prostřednictvím response.userText.

Čím se category liší od thread-id?

Category — určuje interaktivní akce (tlačítka) pro oznámení. Thread-id — seskupuje oznámení v Centru oznámení podle témat. Oba klíče jsou uvedeny v APNS payloadu. Category a thread-id spolu nesouvisejí: oznámení může mít kategorii bez thread-id a naopak.

Fungují kategorie na macOS?

Ano, UNNotificationCategory je podporován na macOS 10.14+ (Mojave) v aplikacích používajících framework UserNotifications. Chování kategorií na macOS je podobné jako na iOS: při stisknutí oznámení se zobrazí tlačítka, zpracování probíhá prostřednictvím UNUserNotificationCenterDelegate.

Je třeba aktualizovat kategorie při každém spuštění?

Doporučuje se registrovat kategorie při každém spuštění aplikace prostřednictvím setNotificationCategories. Systém nahrazuje starou sadu kategorií novou při každém volání. Pokud neaktualizujete, kategorie zůstávají mezi spuštěními, ale při změně kódu staré kategorie nemusí odpovídat novým.

Shrnutí

  • Notification Category — mechanismus iOS pro přidávání interaktivních akcí k push oznámením
  • UNNotificationCategory — třída spojující identifikátor, pole UNNotificationAction a možnosti
  • UNTextInputAction — akce s polem pro zadávání textu pro rychlé odpovědi bez otevírání aplikace
  • APNS payload — klíč category ve slovníku aps propojuje oznámení s registrovanou kategorií
  • Až 4 akce — maximální počet tlačítek na kategorii, ostatní jsou systémem ignorovány
  • Možnosti akcí — foreground (otevření aplikace), destructive (červené tlačítko), authenticationRequired
  • Rozdíl oproti Androidu — iOS Category odpovídá za akce, Android Channel za důležitost a zvuk

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také