Notification Category (bildirishnoma kategoriyasi) — iOS-ning push bildirishnomalarini turiga qarab guruhlash va ularga sozlanishi mumkin bo'lgan harakatlarni biriktirish mexanizmi. Kategoriya 3D Touch yoki bildirishnomaga uzoq bosishda qaysi tugmalar ko'rsatilishini, shuningdek tizimning ushbu turdagi kiruvchi bildirishnomalarni qanday qayta ishlashini aniqlaydi. Apple Developer Documentation ga ko'ra, UNNotificationCategory UNUserNotificationCenter da ro'yxatdan o'tkaziladi va APNS yukidagi category maydoni orqali bildirishnoma bilan bog'lanadi.
Asosiy ma'lumotlar
Notification Category — iOS (8.0 versiyasidan boshlab) ning dasturchiga push bildirishnomalarini tasniflash va ularga interaktiv harakatlar qo'shish imkonini beruvchi funksiyasidir. Foydalanuvchi bildirishnomani olganida va uni kuch bilan (3D Touch) yoki uzoq bosganda, kategoriya tomonidan belgilangan tugmalar paydo bo'ladi.
Kategoriya UNNotificationCategory obyekti orqali ro'yxatdan o'tkaziladi, u identifikator, harakatlar massivi va ixtiyoriy ko'rsatish parametrlarini o'z ichiga oladi. Tizim APNS yukidan kategoriya identifikatoridan foydalanib ro'yxatdan o'tgan kategoriyani qidiradi va tegishli harakatlarni ko'rsatadi.
Android Notification Channel dan farqli o'laroq, iOS Category muhimlik, ovoz yoki tebranishni boshqarmaydi. Uning yagona vazifasi bildirishnoma uchun interaktiv imkoniyatlar ta'minlashdir: javob, tasdiqlash, bekor qilish yoki matn kiritish tugmalari.
Kategoriyalar iOS da push bildirishnomalarini ko'rsatish uchun majburiy emas. Bildirishnoma har qanday holatda ko'rinadi — kategoriya ro'yxatdan o'tgan bo'lsa tugmalar bilan, aks holda tugmalarsiz. Kategoriyalar faqat bildirishnomalarga interaktivlik qo'shish uchun kerak.
Kategoriya mexanizmi to'rt bosqichdan iborat: kategoriyani mijoz tomonda ro'yxatdan o'tkazish, APNS yukini kategoriya bilan jo'natish, kategoriyani tizim tomonidan tanib olish va foydalanuvchi harakatini qayta ishlash.
Kategoriyadagi harakatlar ikki xil bo'lishi mumkin: foreground (ilovani ochadi) va background (fonda bajariladi). Fon harakatlari uchun ilova UNNotificationActionHandler da qayta ishlash uchun cheklangan vaqt (taxminan 30 soniya) oladi.
UNNotificationCategory options parametri orqali bir nechta variantni qo'llab-quvvatlaydi: customDismissAction — bildirishnomani surishda hodisani olish, allowInCarPlay — CarPlay da harakatlarni ko'rsatish, hiddenPreviewsBodyPlaceholder — yashirin oldindan ko'rishlar uchun maxsus matn. Variantlarni to'g'ri sozlash turli Apple qurilmalarida foydalanuvchi tajribasini yaxshilaydi.
iOS bildirishnoma kategoriyalari uchun ikki turdagi harakatni taqdim etadi. Har bir tur o'z maqsadi va foydalanuvchi bilan o'zaro aloqa usuliga ega.
| Tur | Sinf | Tavsif | Misol |
|---|---|---|---|
| Oddiy harakat | UNNotificationAction | Sarlavha va variantlar bilan tugma (destructive, foreground, authenticationRequired) | “O'chirish”, “Ko'rish” |
| Matn kiritish | UNTextInputAction | Maslahat bilan matn kiritish maydonini ochuvchi tugma | “Javob berish”, “Izoh yozish” |
UNTextInputAction — iOS ning noyob imkoniyati. “Javob berish” tugmasini bosganda tizim foydalanuvchi javob yozishi uchun matn maydonini ko'rsatadi. Kiritilgan matn harakat identifikatori bilan birga delegatga uzatiladi. Bu ilovani ochmasdan tezkor javob berish imkonini beradi.
Harakat variantlari: options.authenticationRequired — qurilmani qulfdan chiqarishni talab qiladi, options.destructive — tugmani qizil rang bilan ajratadi (xavfli harakatlar uchun), options.foreground — bosgandan keyin ilovani ochadi.
Kategoriyalar ilova ishga tushganda, odatda didFinishLaunchingWithOptions metodida ro'yxatdan o'tkaziladi. Ro'yxatdan o'tkazish UNUserNotificationCenter orqali, bildirishnomalarga ruxsat so'raganidan keyin amalga oshiriladi. Kategoriyalar har bir ishga tushishda yangilanishi mumkin — eski versiyalar yangilari bilan almashtiriladi.
import UserNotifications
class AppDelegate: UIResponder, UIApplicationDelegate {
func registerNotificationCategories() {
let replyAction = UNTextInputNotificationAction(
identifier: "reply",
title: "Javob berish",
options: [.foreground],
textInputButtonTitle: "Jo'natish",
textInputPlaceholder: "Xabarni kiriting..."
)
let deleteAction = UNNotificationAction(
identifier: "delete",
title: "O'chirish",
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
}
}
Kategoriya ro'yxatdan o'tkazilgandan so'ng, APNS yukida category = “message” bo'lgan har bir bildirishnoma “Javob berish” va “O'chirish” tugmalarini ko'rsatadi. Tugma bosilishlarini qayta ishlash userNotificationCenter:didReceive response da amalga oshiriladi, bu erda actionIdentifier qaysi tugma bosilganini aniqlaydi.
Foydalanuvchi kategoriya tugmasini bosganda, iOS UNUserNotificationCenterDelegate delegatini UNNotificationResponse obyekti bilan chaqiradi. response.actionIdentifier bosilgan tugmaning identifikatorini o'z ichiga oladi, response.notification.request.content.userInfo esa APNS yukidan maxsus ma'lumotlarni. UNTextInputAction uchun qo'shimcha ravishda foydalanuvchi kiritgan matn bilan response.userText mavjud.
Android Notification Channels bilan tanish bo'lgan dasturchilar ko'pincha ularni iOS Notification Categories bilan aralashtirib yuborishadi. O'xshash nomga qaramasdan, bu mexanizmlar turli vazifalarni hal qiladi va turlicha ishlaydi.
Ikkala platformada ham mexanizmlarni birlashtirish mumkin: Android da bildirishnoma NotificationCompat dan harakatlar bilan kanalga tegishli bo'lishi mumkin, iOS da esa kategoriya iOS da thread-id deb ataluvchi va bildirishnomalar markazida bildirishnomalarni guruhlash uchun xizmat qiluvchi kanallarni to'ldiradi.
Bildirishnomaning kategoriya tugmalari bilan ko'rsatilishi uchun server APNS yukiga category kalitini kiritishi kerak. Ushbu kalitsiz tizim bildirishnomaga qaysi kategoriyani qo'llashni bilmaydi.
{
"aps": {
"alert": {
"title": "Yangi xabar",
"body": "Anna: Salom! Qalaysiz?"
},
"category": "message",
"thread-id": "chat_123",
"badge": 5,
"sound": "default"
}
}
category kaliti mijoz tomonda setNotificationCategories orqali ro'yxatdan o'tgan identifikator bilan aniq mos kelishi kerak. Harf sezgirligi mavjud — “message” va “Message” turli kategoriyalar hisoblanadi. Agar kategoriya topilmasa, bildirishnoma tugmalarsiz, jurnallarda xatosiz ko'rsatiladi.
Agar server mijozda ro'yxatdan o'tmagan category bilan bildirishnoma yuborsa, iOS kategoriyani e'tiborsiz qoldiradi va bildirishnomani tugmalarsiz ko'rsatadi. Xato qayd etilmaydi va ilova nomuvofiqlik haqida bilmaydi. Kategoriyalar ro'yxatini server va mijoz o'rtasida konfiguratsiya fayli orqali sinxronlashtirish va ilovaning har bir yangilanishida tekshirish tavsiya etiladi.
iOS bildirishnoma kategoriyalarini loyihalashda bitta kategoriya — bitta ssenariy printsipiga amal qiling. Har bir kategoriya ma'lum bir o'zaro aloqa turiga mos kelishi kerak: xabarga javob, harakatni tasdiqlash, so'rovni rad etish. Turli ssenariylarni bir kategoriyada aralashtirmang — bu foydalanuvchini chalg'itadi va delegatda qayta ishlashni murakkablashtiradi.
UNTextInputAction dan foydalanuvchi ilovani ochmasdan matn kiritishi kerak bo'lgan ssenariylar uchun foydalaning: messenjerlardagi javoblar, sharhlar, tezkor eslatmalar. Matn harakatlari jalb qilishni oshiradi — foydalanuvchi ochiq ilovadagi 5+ o'rniga 2 bosish bilan mazmunli harakat qiladi.
Xavfli harakatlar (o'chirish, bloklash) uchun destructive variantidan foydalaning. iOS bu tugmalarni qizil rang bilan ajratib, foydalanuvchini harakatning qaytarilmasligi haqida ogohlantiradi. Qurilmani qulfdan chiqarishni talab qiladigan harakatlar (shaxsiy ma'lumotlarni ko'rish) uchun authenticationRequired ni o'rnating — tizim bajarishdan oldin Face ID yoki parolni so'raydi.
Kategoriyalarni turli qurilmalarda sinab ko'ring: 3D Touch li iPhone da, 3D Touch siz iPhone da (uzoq bosish), iPad da va Mac da. Kategoriyalarning xatti-harakati turli Apple platformalarida biroz farq qilishi mumkin. Maxsus e'tibor — CarPlay: kategoriya tugmalari avtomobil ekranida ko'rsatiladi, lekin matn kiritish mavjud emas, shuning uchun UNTextInputAction CarPlay da avtomatik ravishda yashiriladi. watchOS da kategoriyalar qo'llab-quvvatlanmaydi — barcha bildirishnomalar harakat tugmalarisiz ko'rsatiladi.
Tez-tez so'raladigan savollar
Hech qanday cheklov yo'q — iOS UNNotificationCategory soniga limit qo'ymaydi. Biroq, amalda delegatda qayta ishlashni murakkablashtirmaslik uchun 10–15 dan oshmaslik tavsiya etiladi. Har bir kategoriya 4 tagacha harakatni (tugmani) o'z ichiga olishi mumkin. 4 dan ortiq harakatlar tizim tomonidan e'tiborga olinmaydi.
UNUserNotificationCenterDelegate delegatini va didReceive response metodini amalga oshiring. response.actionIdentifier ni tekshiring: UNNotificationDismissActionIdentifier — o'chirish surish, UNNotificationDefaultActionIdentifier — tanaga bosish, yoki o'zingizning maxsus tugma identifikatoringiz. Matn tugmalari uchun matn response.userText orqali mavjud.
Category — bildirishnoma uchun interaktiv harakatlarni (tugmalarni) aniqlaydi. Thread-id — Bildirishnomalar Markazida bildirishnomalarni mavzular bo'yicha guruhlaydi. Ikkala kalit APNS yukida ko'rsatiladi. Category va thread-id bog'liq emas: bildirishnoma kategoriyaga ega bo'lishi mumkin thread-idsiz va aksincha.
Ha, UNNotificationCategory macOS 10.14+ (Mojave) da UserNotifications framework dan foydalanadigan ilovalarda qo'llab-quvvatlanadi. macOS da kategoriyalarning xatti-harakati iOS ga o'xshaydi: bildirishnomani bosganda tugmalar ko'rsatiladi, qayta ishlash UNUserNotificationCenterDelegate orqali amalga oshiriladi.
Ilovaning har bir ishga tushishida setNotificationCategories orqali kategoriyalarni ro'yxatdan o'tkazish tavsiya etiladi. Tizim har bir chaqiruvda eski kategoriyalar to'plamini yangisi bilan almashtiradi. Agar yangilamasangiz, kategoriyalar ishga tushishlar orasida saqlanadi, ammo kod o'zgarganda eski kategoriyalar yangilariga mos kelmasligi mumkin.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.