Notification Category (κατηγορία ειδοποιήσεων) είναι ένας μηχανισμός iOS για την ομαδοποίηση των push ειδοποιήσεων ανά τύπο και την επισύναψη προσαρμόσιμων ενεργειών. Η κατηγορία καθορίζει ποια κουμπιά εμφανίζονται κατά το 3D Touch ή το παρατεταμένο πάτημα σε μια ειδοποίηση, καθώς και πώς το σύστημα επεξεργάζεται τις εισερχόμενες ειδοποιήσεις αυτού του τύπου. Σύμφωνα με το Apple Developer Documentation, το UNNotificationCategory καταχωρείται στο UNUserNotificationCenter και συνδέεται με την ειδοποίηση μέσω του πεδίου category στο ωφέλιμο φορτίο APNS.
Κύρια σημεία
Το Notification Category είναι μια λειτουργία iOS (από την έκδοση 8.0) που επιτρέπει στον προγραμματιστή να ταξινομεί τις push ειδοποιήσεις και να προσθέτει διαδραστικές ενέργειες. Όταν ο χρήστης λαμβάνει μια ειδοποίηση και την πατά με δύναμη (3D Touch) ή με παρατεταμένο πάτημα, εμφανίζονται τα κουμπιά που ορίζονται από την κατηγορία.
Η κατηγορία καταχωρείται μέσω του αντικειμένου UNNotificationCategory, το οποίο περιέχει ένα αναγνωριστικό, έναν πίνακα ενεργειών και προαιρετικές παραμέτρους εμφάνισης. Το σύστημα χρησιμοποιεί το αναγνωριστικό κατηγορίας από το ωφέλιμο φορτίο APNS για να βρει την καταχωρημένη κατηγορία και να εμφανίσει τις αντίστοιχες ενέργειες.
Σε αντίθεση με το Android Notification Channel, το iOS Category δεν διαχειρίζεται σπουδαιότητα, ήχο ή δόνηση. Η μοναδική του αποστολή είναι να παρέχει διαδραστικές δυνατότητες για την ειδοποίηση: κουμπιά απάντησης, επιβεβαίωσης, ακύρωσης ή εισαγωγής κειμένου.
Οι κατηγορίες δεν είναι υποχρεωτικές για την εμφάνιση push ειδοποιήσεων στο iOS. Η ειδοποίηση θα εμφανιστεί σε κάθε περίπτωση — με κουμπιά εάν η κατηγορία είναι καταχωρημένη, ή χωρίς αυτά. Οι κατηγορίες χρειάζονται μόνο για την προσθήκη διαδραστικότητας στις ειδοποιήσεις.
Ο μηχανισμός κατηγοριών αποτελείται από τέσσερα στάδια: καταχώρηση της κατηγορίας στον πελάτη, αποστολή ωφέλιμου φορτίου APNS με την κατηγορία, αναγνώριση της κατηγορίας από το σύστημα και επεξεργασία της ενέργειας του χρήστη.
Οι ενέργειες σε μια κατηγορία μπορεί να είναι δύο τύπων: foreground (ανοίγουν την εφαρμογή) και background (εκτελούνται στο παρασκήνιο). Για ενέργειες παρασκηνίου, η εφαρμογή λαμβάνει περιορισμένο χρόνο (περίπου 30 δευτερόλεπτα) για επεξεργασία στο UNNotificationActionHandler.
Το UNNotificationCategory υποστηρίζει πολλές επιλογές μέσω της παραμέτρου options: customDismissAction — λήψη συμβάντος κατά το σάρωμα της ειδοποίησης, allowInCarPlay — εμφάνιση ενεργειών στο CarPlay, hiddenPreviewsBodyPlaceholder — προσαρμοσμένο κείμενο για κρυφές προεπισκοπήσεις. Η σωστή διαμόρφωση των επιλογών βελτιώνει την εμπειρία χρήστη σε διαφορετικές συσκευές Apple.
Το iOS προσφέρει δύο τύπους ενεργειών για κατηγορίες ειδοποιήσεων. Κάθε τύπος έχει τον δικό του σκοπό και τρόπο αλληλεπίδρασης με τον χρήστη.
| Τύπος | Κλάση | Περιγραφή | Παράδειγμα |
|---|---|---|---|
| Απλή ενέργεια | UNNotificationAction | Κουμπί με τίτλο και επιλογές (destructive, foreground, authenticationRequired) | “Διαγραφή”, “Προβολή” |
| Εισαγωγή κειμένου | UNTextInputAction | Κουμπί που ανοίγει πεδίο εισαγωγής κειμένου με υπόδειξη | “Απάντηση”, “Σχόλιο” |
UNTextInputAction — μια μοναδική δυνατότητα iOS. Πατώντας το κουμπί “Απάντηση”, το σύστημα εμφανίζει ένα πεδίο κειμένου όπου ο χρήστης εισάγει την απάντηση. Το εισαγόμενο κείμενο μεταδίδεται στον εκπρόσωπο μαζί με το αναγνωριστικό ενέργειας. Αυτό επιτρέπει γρήγορες απαντήσεις χωρίς άνοιγμα της εφαρμογής.
Επιλογές ενεργειών: options.authenticationRequired — απαιτεί ξεκλείδωμα της συσκευής, options.destructive — τονίζει το κουμπί με κόκκινο χρώμα (για επικίνδυνες ενέργειες), options.foreground — ανοίγει την εφαρμογή μετά το πάτημα.
Οι κατηγορίες καταχωρούνται κατά την εκκίνηση της εφαρμογής, συνήθως στη μέθοδο didFinishLaunchingWithOptions. Η καταχώρηση γίνεται μέσω του UNUserNotificationCenter, μετά από αίτηση άδειας για ειδοποιήσεις. Οι κατηγορίες μπορούν να ενημερώνονται σε κάθε εκκίνηση — οι παλιές εκδόσεις αντικαθίστανται από νέες.
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 Notification Channels συχνά τα μπερδεύουν με τις iOS Notification Categories. Παρά την παρόμοια ονομασία, αυτοί οι μηχανισμοί επιλύουν διαφορετικές εργασίες και λειτουργούν με διαφορετικό τρόπο.
Και στις δύο πλατφόρμες μπορούν να συνδυαστούν και οι δύο μηχανισμοί: στο Android, μια ειδοποίηση μπορεί να ανήκει σε ένα κανάλι με ενέργειες από το NotificationCompat, και στο iOS, η κατηγορία συμπληρώνει τα κανάλια που στο iOS ονομάζονται thread-id και χρησιμεύουν για την ομαδοποίηση ειδοποιήσεων στο κέντρο ειδοποιήσεων.
Για να εμφανιστεί η ειδοποίηση με τα κουμπιά της κατηγορίας, ο διακομιστής πρέπει να συμπεριλάβει το κλειδί category στο ωφέλιμο φορτίο APNS. Χωρίς αυτό το κλειδί, το σύστημα δεν θα γνωρίζει ποια κατηγορία να εφαρμόσει στην ειδοποίηση.
{
"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 δεν θέτει όριο στον αριθμό των UNNotificationCategory. Ωστόσο, στην πράξη συνιστάται να μην υπερβαίνετε τις 10–15 κατηγορίες για να μην περιπλέκεται η επεξεργασία στον εκπρόσωπο. Κάθε κατηγορία μπορεί να περιέχει έως 4 ενέργειες (κουμπιά). Περισσότερες από 4 ενέργειες αγνοούνται από το σύστημα.
Υλοποιήστε τον εκπρόσωπο UNUserNotificationCenterDelegate και τη μέθοδο didReceive response. Ελέγξτε το response.actionIdentifier: UNNotificationDismissActionIdentifier — σάρωμα διαγραφής, UNNotificationDefaultActionIdentifier — πάτημα στο σώμα, ή το δικό σας προσαρμοσμένο αναγνωριστικό κουμπιού. Για κουμπιά κειμένου, το κείμενο είναι διαθέσιμο μέσω response.userText.
Category — καθορίζει τις διαδραστικές ενέργειες (κουμπιά) για την ειδοποίηση. Thread-id — ομαδοποιεί ειδοποιήσεις στο Κέντρο Ειδοποιήσεων ανά θέμα. Και τα δύο κλειδιά καθορίζονται στο ωφέλιμο φορτίο APNS. Το category και το thread-id δεν σχετίζονται: μια ειδοποίηση μπορεί να έχει κατηγορία χωρίς thread-id και αντίστροφα.
Ναι, το UNNotificationCategory υποστηρίζεται σε macOS 10.14+ (Mojave) σε εφαρμογές που χρησιμοποιούν το πλαίσιο UserNotifications. Η συμπεριφορά των κατηγοριών σε macOS είναι παρόμοια με το iOS: πατώντας την ειδοποίηση, εμφανίζονται κουμπιά, η επεξεργασία γίνεται μέσω του UNUserNotificationCenterDelegate.
Συνιστάται η καταχώρηση κατηγοριών σε κάθε εκκίνηση της εφαρμογής μέσω setNotificationCategories. Το σύστημα αντικαθιστά το παλιό σύνολο κατηγοριών με νέο σε κάθε κλήση. Εάν δεν ενημερώνετε, οι κατηγορίες παραμένουν μεταξύ εκκινήσεων, αλλά όταν αλλάζει ο κώδικας, οι παλιές κατηγορίες ενδέχεται να μην ταιριάζουν με τις νέες.
Περίληψη
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης