Notification Category (bildiriş kateqoriyası) — iOS-un push bildirişlərini növünə görə qruplaşdırmaq və onlara fərdiləşdirilə bilən hərəkətlər əlavə etmək mexanizmidir. Kateqoriya, 3D Touch və ya bildirişə uzun basma zamanı hansı düymələrin göstəriləcəyini, həmçinin sistemin bu tip daxil olan bildirişləri necə emal edəcəyini müəyyən edir. Apple Developer Documentation-ya görə, UNNotificationCategory UNUserNotificationCenter-də qeydiyyatdan keçir və APNS yükündəki category sahəsi vasitəsilə bildirişlə əlaqələndirilir.
Əsas məqamlar
Notification Category — iOS-un (8.0 versiyasından) tərtibatçıya push bildirişlərini təsnif etməyə və onlara interaktiv hərəkətlər əlavə etməyə imkan verən funksiyadır. İstifadəçi bildiriş aldıqda və ona güclə (3D Touch) basdıqda və ya uzun basdıqda, kateqoriya tərəfindən müəyyən edilmiş düymələr görünür.
Kateqoriya UNNotificationCategory obyekti vasitəsilə qeydiyyatdan keçirilir, hansı ki identifikator, hərəkətlər massivi və isteğe bağlı göstərmə parametrlərini ehtiva edir. Sistem, APNS yükündən kateqoriya identifikatorundan istifadə edərək qeydiyyatdan keçmiş kateqoriyanı axtarır və müvafiq hərəkətləri göstərir.
Android Notification Channel-dən fərqli olaraq, iOS Category vaciblik, səs və ya vibrasiyanı idarə etmir. Onun yeganə vəzifəsi bildiriş üçün interaktiv imkanlar təmin etməkdir: cavab, təsdiq, ləğv və ya mətn daxil etmə düymələri.
Kateqoriyalar iOS-da push bildirişlərinin göstərilməsi üçün məcburi deyil. Bildiriş hər halda görünəcək — kateqoriya qeydiyyatdan keçibsə düymələrlə, keçməyibsə düymələrsiz. Kateqoriyalar yalnız bildirişlərə interaktivlik əlavə etmək üçün lazımdır.
Kateqoriya mexanizmi dörd mərhələdən ibarətdir: kateqoriyanın müştəri tərəfdə qeydiyyatı, APNS yükünün kateqoriya ilə göndərilməsi, kateqoriyanın sistem tərəfindən tanınması və istifadəçi hərəkətinin emalı.
Kateqoriyadakı hərəkətlər iki tip ola bilər: foreground (tətbiqi açır) və background (fon icra olunur). Fon hərəkətləri üçün tətbiq UNNotificationActionHandler-də emal üçün məhdud vaxt (təxminən 30 saniyə) alır.
UNNotificationCategory options parametri vasitəsilə bir neçə seçimi dəstəkləyir: customDismissAction — bildirişi sürüşdürərkən hadisəni almaq, allowInCarPlay — CarPlay-də hərəkətləri göstərmək, hiddenPreviewsBodyPlaceholder — gizli ön baxışlar üçün fərdi mətn. Seçimlərin düzgün konfiqurasiyası müxtəlif Apple cihazlarında istifadəçi təcrübəsini yaxşılaşdırır.
iOS bildiriş kateqoriyaları üçün iki növ hərəkət təqdim edir. Hər növün öz təyinatı və istifadəçi ilə qarşılıqlı əlaqə üsulu var.
| Növ | Sinif | Təsvir | Nümunə |
|---|---|---|---|
| Sadə hərəkət | UNNotificationAction | Başlıq və seçimlərlə düymə (destructive, foreground, authenticationRequired) | “Sil”, “Bax” |
| Mətn daxil etmə | UNTextInputAction | İpucu ilə mətn daxil etmə sahəsi açan düymə | “Cavab ver”, “Şərh yaz” |
UNTextInputAction — iOS-un unikal imkanı. “Cavab ver” düyməsini basdıqda sistem istifadəçinin cavab yazması üçün mətn sahəsi göstərir. Daxil edilmiş mətn hərəkət identifikatoru ilə birlikdə delegata ötürülür. Bu, tətbiqi açmadan sürətli cavab verməyə imkan verir.
Hərəkət seçimləri: options.authenticationRequired — cihazın blokdan çıxarılmasını tələb edir, options.destructive — düyməni qırmızı rənglə vurğulayır (təhlükəli hərəkətlər üçün), options.foreground — basdıqdan sonra tətbiqi açır.
Kateqoriyalar tətbiq işə düşəndə, adətən didFinishLaunchingWithOptions metodunda qeydiyyatdan keçirilir. Qeydiyyat UNUserNotificationCenter vasitəsilə, bildirişlərə icazə istədikdən sonra baş verir. Kateqoriyalar hər işə düşmədə yenilənə bilər — köhnə versiyalar yeniləri ilə əvəz olunur.
import UserNotifications
class AppDelegate: UIResponder, UIApplicationDelegate {
func registerNotificationCategories() {
let replyAction = UNTextInputNotificationAction(
identifier: "reply",
title: "Cavab ver",
options: [.foreground],
textInputButtonTitle: "Göndər",
textInputPlaceholder: "Mesaj daxil edin..."
)
let deleteAction = UNNotificationAction(
identifier: "delete",
title: "Sil",
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
}
}
Kateqoriya qeydiyyatdan keçdikdən sonra APNS yükündə category = “message” olan hər bildiriş “Cavab ver” və “Sil” düymələrini göstərəcək. Düymə basılmalarının emalı userNotificationCenter:didReceive response-da baş verir, burada actionIdentifier hansı düymənin basıldığını müəyyən edir.
İstifadəçi kateqoriya düyməsini basdıqda, iOS UNUserNotificationCenterDelegate delegatını UNNotificationResponse obyekti ilə çağırır. response.actionIdentifier basılmış düymənin identifikatorunu ehtiva edir, response.notification.request.content.userInfo isə APNS yükündən fərdi məlumatları. UNTextInputAction üçün əlavə olaraq response.userText istifadəçinin daxil etdiyi mətnlə mövcuddur.
Android Notification Channels ilə tanış olan tərtibatçılar tez-tez onları iOS Notification Categories ilə qarışdırırlar. Oxşar ada baxmayaraq, bu mexanizmlər müxtəlif vəzifələri həll edir və fərqli işləyir.
Hər iki platformada mexanizmləri birləşdirmək olar: Android-də bildiriş NotificationCompat-dən hərəkətlərlə kanala aid ola bilər, iOS-da isə kateqoriya iOS-da thread-id adlanan və bildiriş mərkəzində bildirişləri qruplaşdırmaq üçün xidmət edən kanalları tamamlayır.
Bildirişin kateqoriya düymələri ilə göstərilməsi üçün server APNS yükünə category açarını daxil etməlidir. Bu açar olmadan sistem hansı kateqoriyanı tətbiq edəcəyini bilməyəcək.
{
"aps": {
"alert": {
"title": "Yeni mesaj",
"body": "Anna: Salam! Necəsən?"
},
"category": "message",
"thread-id": "chat_123",
"badge": 5,
"sound": "default"
}
}
category açarı müştəri tərəfdə setNotificationCategories vasitəsilə qeydiyyatdan keçmiş identifikatorla dəqiq uyğun olmalıdır. Hərf həssaslığı var — “message” və “Message” fərqli kateqoriyalar hesab olunur. Kateqoriya tapılmazsa, bildiriş düymələr olmadan, loglarda xəta olmadan göstərilir.
Server müştəridə qeydiyyatdan keçməmiş category ilə bildiriş göndərərsə, iOS kateqoriyanı nəzərə almır və bildirişi düymələr olmadan göstərir. Xəta qeydə alınmır və tətbiq uyğunsuzluqdan xəbərsiz qalır. Kateqoriyalar siyahısını server və müştəri arasında konfiqurasiya faylı vasitəsilə sinxronlaşdırmaq və tətbiqin hər yenilənməsində yoxlamaq tövsiyə olunur.
iOS bildiriş kateqoriyalarını dizayn edərkən bir kateqoriya — bir ssenari prinsipinə əməl edin. Hər kateqoriya müəyyən bir qarşılıqlı əlaqə növünə uyğun olmalıdır: mesaja cavab, hərəkətin təsdiqi, sorğunun rədd edilməsi. Müxtəlif ssenariləri bir kateqoriyada qarışdırmayın — bu istifadəçini çaşdırır və delegatda emalı çətinləşdirir.
UNTextInputAction istifadəçinin tətbiqi açmadan mətn daxil etməli olduğu ssenarilər üçün istifadə edin: messencerlərdə cavablar, şərhlər, sürətli qeydlər. Mətn hərəkətləri cəlb olunmanı artırır — istifadəçi açıq tətbiqdə 5+ əvəzinə 2 toxunma ilə mənalı hərəkət edir.
Təhlükəli hərəkətlər (sil, blokla) üçün destructive seçimindən istifadə edin. iOS bu düymələri qırmızı rənglə vurğulayaraq istifadəçini hərəkətin geri dönməzliyi barədə xəbərdar edir. Cihazın blokdan çıxarılmasını tələb edən hərəkətlər (şəxsi məlumatlara baxmaq) üçün authenticationRequired təyin edin — sistem icradan əvvəl Face ID və ya parol tələb edəcək.
Kateqoriyaları müxtəlif cihazlarda test edin: 3D Touch olan iPhone-da, 3D Touch olmayan iPhone-da (uzun basma), iPad-də və Mac-da. Kateqoriyaların davranışı müxtəlif Apple platformalarında bir qədər fərqlənə bilər. Xüsusi diqqət — CarPlay: kateqoriya düymələri avtomobil ekranında göstərilir, lakin mətn daxil etmə mövcud deyil, buna görə UNTextInputAction CarPlay-də avtomatik gizlədilir. watchOS-da kateqoriyalar dəstəklənmir — bütün bildirişlər hərəkət düymələri olmadan göstərilir.
Tez-tez verilən suallar
Heç bir məhdudiyyət yoxdur — iOS UNNotificationCategory sayına limit qoymur. Bununla belə, praktikada delegatda emalı çətinləşdirməmək üçün 10–15 kateqoriyadan çox olmamaq tövsiyə olunur. Hər kateqoriya 4 hərəkətə (düyməyə) qədər ehtiva edə bilər. 4-dən çox hərəkət sistem tərəfindən nəzərə alınmır.
UNUserNotificationCenterDelegate delegatını və didReceive response metodunu tətbiq edin. response.actionIdentifier yoxlayın: UNNotificationDismissActionIdentifier — silmə sürüşdürməsi, UNNotificationDefaultActionIdentifier — gövdəyə toxunma, və ya öz fərdi düymə identifikatorunuz. Mətn düymələri üçün mətn response.userText vasitəsilə mövcuddur.
Category — bildiriş üçün interaktiv hərəkətləri (düymələri) müəyyən edir. Thread-id — Bildiriş Mərkəzində bildirişləri mövzulara görə qruplaşdırır. Hər iki açar APNS yükündə göstərilir. Category və thread-id əlaqəli deyil: bildirişin kateqoriyası ola bilər thread-id olmadan və əksinə.
Bəli, UNNotificationCategory macOS 10.14+ (Mojave) sistemlərində UserNotifications framework-dən istifadə edən tətbiqlərdə dəstəklənir. macOS-da kateqoriyaların davranışı iOS-a bənzəyir: bildirişə basdıqda düymələr göstərilir, emal UNUserNotificationCenterDelegate vasitəsilə baş verir.
Tətbiqin hər işə düşməsində setNotificationCategories vasitəsilə kateqoriyaları qeydiyyatdan keçirmək tövsiyə olunur. Sistem hər çağırışda köhnə kateqoriya dəstini yenisi ilə əvəz edir. Yeniləməsəniz, kateqoriyalar işə düşmələr arasında saxlanılır, lakin kod dəyişdikdə köhnə kateqoriyalar yeniləri ilə uyğun gəlməyə bilər.
Xülasə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun