Notification Category (értesítési kategória) egy iOS-mechanizmus a push értesítések típus szerinti csoportosítására és testreszabható műveletek hozzárendelésére. A kategória meghatározza, hogy mely gombok jelennek meg a 3D Touch vagy hosszú lenyomás során az értesítésen, valamint hogy a rendszer hogyan dolgozza fel az ilyen típusú bejövő értesítéseket. A Apple Developer Documentation szerint a UNNotificationCategory regisztrálásra kerül a UNUserNotificationCenter-ben, és az APNS-adatcsomag category mezőjén keresztül kapcsolódik az értesítéshez.
Főbb pontok
A Notification Category egy iOS-funkció (a 8.0 verziótól), amely lehetővé teszi a fejlesztő számára a push értesítések osztályozását és interaktív műveletek hozzáadását. Amikor a felhasználó értesítést kap, és erősen megnyomja (3D Touch) vagy hosszan lenyomja, megjelennek a kategória által meghatározott gombok.
A kategória a UNNotificationCategory objektumon keresztül kerül regisztrálásra, amely tartalmaz egy azonosítót, egy művelettömböt és opcionális megjelenítési paramétereket. A rendszer az APNS-adatcsomagból származó kategóriaazonosító segítségével keresi meg a regisztrált kategóriát és jeleníti meg a megfelelő műveleteket.
Az Android Notification Channel-től eltérően az iOS Category nem kezeli a fontosságot, hangot vagy rezgést. Egyetlen feladata az értesítés interaktív lehetőségeinek biztosítása: válasz, megerősítés, elutasítás vagy szövegbeviteli gombok.
A kategóriák nem kötelezőek a push értesítések megjelenítéséhez iOS-ben. Az értesítés mindenképpen megjelenik — gombokkal, ha a kategória regisztrálva van, vagy anélkül. A kategóriák csak az értesítések interaktivitásának növeléséhez szükségesek.
A kategóriák mechanizmusa négy szakaszból áll: a kategória regisztrálása a kliens oldalon, az APNS-adatcsomag elküldése a kategóriával, a kategória felismerése a rendszer által, és a felhasználói művelet feldolgozása.
A kategóriában lévő műveletek két típusúak lehetnek: foreground (megnyitják az alkalmazást) és background (háttérben futnak). A háttérműveletekhez az alkalmazás korlátozott időt (körülbelül 30 másodpercet) kap a feldolgozásra a UNNotificationActionHandler-ben.
A UNNotificationCategory több opciót támogat az options paraméteren keresztül: customDismissAction — esemény fogadása az értesítés elhúzásakor, allowInCarPlay — műveletek megjelenítése CarPlay-ben, hiddenPreviewsBodyPlaceholder — egyéni szöveg rejtett előnézetekhez. Az opciók helyes konfigurálása javítja a felhasználói élményt a különböző Apple-eszközökön.
Az iOS két típusú műveletet kínál az értesítési kategóriákhoz. Minden típusnak megvan a maga célja és interakciós módja a felhasználóval.
| Típus | Osztály | Leírás | Példa |
|---|---|---|---|
| Egyszerű művelet | UNNotificationAction | Gomb címmel és opciókkal (destructive, foreground, authenticationRequired) | „Törlés”, „Megtekintés” |
| Szövegbevitel | UNTextInputAction | Gomb, amely szövegbeviteli mezőt nyit tippel | „Válasz”, „Hozzászólás” |
UNTextInputAction — az iOS egyedi képessége. A „Válasz” gomb megnyomásakor a rendszer egy szövegmezőt jelenít meg, amelybe a felhasználó beírja a választ. A beírt szöveg a művelet azonosítójával együtt átadásra kerül a delegáltnak. Ez lehetővé teszi a gyors válaszokat az alkalmazás megnyitása nélkül.
Műveleti opciók: options.authenticationRequired — az eszköz feloldását igényli, options.destructive — piros színnel kiemeli a gombot (veszélyes műveletekhez), options.foreground — megnyitja az alkalmazást megnyomás után.
A kategóriák az alkalmazás indításakor kerülnek regisztrálásra, általában a didFinishLaunchingWithOptions metódusban. A regisztráció a UNUserNotificationCenter-en keresztül történik, az értesítési engedély kérése után. A kategóriák minden indításkor frissíthetők — a régi verziók újakra cserélődnek.
import UserNotifications
class AppDelegate: UIResponder, UIApplicationDelegate {
func registerNotificationCategories() {
let replyAction = UNTextInputNotificationAction(
identifier: "reply",
title: "Válasz",
options: [.foreground],
textInputButtonTitle: "Küldés",
textInputPlaceholder: "Írja be az üzenetet..."
)
let deleteAction = UNNotificationAction(
identifier: "delete",
title: "Törlés",
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
}
}
A kategória regisztrálása után minden olyan értesítés, amelynek category = „message" az APNS-adatcsomagban, megjeleníti a „Válasz” és „Törlés” gombokat. A lenyomások feldolgozása a userNotificationCenter:didReceive response-ban történik, ahol az actionIdentifier meghatározza, hogy melyik gombot nyomták meg.
Amikor a felhasználó megnyom egy kategóriagombot, az iOS meghívja a UNUserNotificationCenterDelegate delegáltat egy UNNotificationResponse objektummal. A response.actionIdentifier tartalmazza a megnyomott gomb azonosítóját, a response.notification.request.content.userInfo pedig az APNS-adatcsomag egyedi adatait. A UNTextInputAction esetében továbbá elérhető a response.userText a felhasználó által beírt szöveggel.
Az Android Notification Channels-t ismerő fejlesztők gyakran összekeverik azokat az iOS Notification Categories-ekkel. A hasonló név ellenére ezek a mechanizmusok különböző feladatokat oldanak meg és eltérően működnek.
Mindkét platformon kombinálható a két mechanizmus: Androidban az értesítés tartozhat egy csatornához NotificationCompat műveletekkel, iOS-ben pedig a kategória kiegészíti azokat a csatornákat, amelyeket iOS-ben thread-id-nak hívnak, és az értesítések csoportosítására szolgálnak az értesítési központban.
Ahhoz, hogy az értesítés a kategória gombjaival jelenjen meg, a szervernek bele kell foglalnia a category kulcsot az APNS-adatcsomagba. E kulcs nélkül a rendszer nem fogja tudni, melyik kategóriát alkalmazza az értesítésre.
{
"aps": {
"alert": {
"title": "Új üzenet",
"body": "Anna: Szia! Hogy vagy?"
},
"category": "message",
"thread-id": "chat_123",
"badge": 5,
"sound": "default"
}
}
A category kulcsnak pontosan meg kell egyeznie a kliens oldalon a setNotificationCategories segítségével regisztrált azonosítóval. A kis- és nagybetűk számítanak — a „message" és „Message" különböző kategóriáknak minősülnek. Ha a kategória nem található, az értesítés gombok nélkül jelenik meg, hibanaplózás nélkül.
Ha a szerver olyan category-val küldött értesítést, amely nincs regisztrálva a kliens oldalon, az iOS figyelmen kívül hagyja a kategóriát, és az értesítést gombok nélkül jeleníti meg. A hiba nem kerül naplózásra, és az alkalmazás nem tud az eltérésről. Javasolt a kategóriák listájának szinkronizálása a szerver és a kliens között egy konfigurációs fájlon keresztül, és azok ellenőrzése minden alkalmazásfrissítéskor.
Az iOS értesítési kategóriák tervezésekor tartsa be az egy kategória — egy forgatókönyv elvet. Minden kategóriának egy adott interakciós típusnak kell megfelelnie: válasz üzenetre, művelet megerősítése, kérelem elutasítása. Ne keverjen különböző forgatókönyveket egy kategóriában — ez összezavarja a felhasználót és megnehezíti a feldolgozást a delegáltban.
Használja a UNTextInputAction-t olyan forgatókönyvekhez, ahol a felhasználónak szöveget kell bevinnie az alkalmazás megnyitása nélkül: válaszok üzenetküldőkben, hozzászólások, gyors jegyzetek. A szöveges műveletek növelik az elköteleződést — a felhasználó 2 érintéssel hajt végre egy értelmes műveletet a nyitott alkalmazásban szükséges 5+ helyett.
Veszélyes műveletekhez (törlés, blokkolás) használja a destructive opciót. Az iOS piros színnel emeli ki ezeket a gombokat, figyelmeztetve a felhasználót a művelet visszafordíthatatlanságára. Az eszköz feloldását igénylő műveletekhez (személyes adatok megtekintése) állítsa be a authenticationRequired-t — a rendszer Face ID-t vagy jelszót kér a végrehajtás előtt.
Tesztelje a kategóriákat különböző eszközökön: iPhone-on 3D Touch-csal, iPhone-on 3D Touch nélkül (hosszú lenyomás), iPad-en és Mac-en. A kategóriák viselkedése kissé eltérhet a különböző Apple platformokon. Különös figyelem — CarPlay: a kategóriagombok megjelennek az autó képernyőjén, de a szövegbevitel nem elérhető, ezért a UNTextInputAction automatikusan elrejtésre kerül a CarPlay-ben. A watchOS-ben a kategóriák nem támogatottak — minden értesítés műveleti gombok nélkül jelenik meg.
Gyakran Ismételt Kérdések
Nincs korlátozás — az iOS nem szab határt a UNNotificationCategory számának. A gyakorlatban azonban nem ajánlott 10–15 kategóriánál többet használni, hogy ne bonyolítsa a feldolgozást a delegáltban. Minden kategória legfeljebb 4 műveletet (gombot) tartalmazhat. Több mint 4 műveletet a rendszer figyelmen kívül hagy.
Valósítsa meg a UNUserNotificationCenterDelegate delegáltat és a didReceive response metódust. Ellenőrizze a response.actionIdentifier-t: UNNotificationDismissActionIdentifier — törlés elhúzása, UNNotificationDefaultActionIdentifier — érintés a testen, vagy az egyéni gombazonosító. Szöveges gombok esetén a szöveg a response.userText-en keresztül érhető el.
Category — meghatározza az interaktív műveleteket (gombokat) az értesítéshez. Thread-id — az értesítéseket csoportosítja az Értesítési Központban témák szerint. Mindkét kulcs az APNS-adatcsomagban van megadva. A category és a thread-id nem kapcsolódnak egymáshoz: egy értesítés rendelkezhet kategóriával thread-id nélkül és fordítva.
Igen, a UNNotificationCategory támogatott macOS 10.14+ (Mojave) rendszeren a UserNotifications keretrendszert használó alkalmazásokban. A kategóriák viselkedése macOS-en hasonló az iOS-hez: az értesítés megnyomásakor gombok jelennek meg, a feldolgozás a UNUserNotificationCenterDelegate-en keresztül történik.
Ajánlott a kategóriák regisztrálása minden alkalmazásindításkor a setNotificationCategories segítségével. A rendszer minden híváskor lecseréli a régi kategóriakészletet az újra. Ha nem frissíti, a kategóriák megmaradnak az indítások között, de a kód változásakor a régi kategóriák nem feltétlenül egyeznek meg az újakkal.
Összefoglalás
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is