Notification Content Extension — είναι ένας τύπος επέκτασης iOS που αντικαθιστά το τυπικό πρότυπο push ειδοποίησης με μια πλήρως προσαρμοσμένη διεπαφή χρήστη. Ο προγραμματιστής αποκτά τη δυνατότητα να εμφανίζει εικόνες, πρόγραμμα αναπαραγωγής ήχου, κουμπιά ενεργειών, μπάρες προόδου και προσαρμοσμένα κινούμενα σχέδια μέσα στην ειδοποίηση, επεκτείνοντας το τυπικό banner σε μια πλήρη μίνι εφαρμογή. Σύμφωνα με τα δεδομένα του WWDC 2025, η επέκταση χρησιμοποιεί το UNNotificationContentExtension και υποστηρίζει έως 4 συνημμένα πολυμέσων σε μία ειδοποίηση, καθώς και την επεξεργασία διαδραστικών ενεργειών μέσω του UNNotificationAction.
Κύρια σημεία
Notification Content Extension — είναι μια επέκταση εφαρμογής που παρακάμπτει την εμφάνιση της push ειδοποίησης στο iOS. Αντί για ένα τυπικό banner με τίτλο, σώμα μηνύματος και κουμπιά, μπορεί να εμφανιστεί μια διεπαφή πλήρως σχεδιασμένη στο Interface Builder ή προγραμματιστικά μέσω UIKit ή SwiftUI.
Σε αντίθεση με το Notification Service Extension, το οποίο τροποποιεί το περιεχόμενο πριν από την εμφάνιση, το Content Extension είναι υπεύθυνο μόνο για την οπτική παρουσίαση. Η επέκταση λαμβάνει την έτοιμη ειδοποίηση μετά από όλες τις τροποποιήσεις και αποφασίζει πώς να την εμφανίσει. Αυτή είναι η βασική διαφορά μεταξύ των δύο τύπων επεκτάσεων ειδοποιήσεων.
Η επέκταση ενεργοποιείται όταν ο χρήστης εκτελέσει μια χειρονομία επέκτασης — κυλήσει την ειδοποίηση προς τα κάτω ή κάνει κλικ σε αυτήν (ανάλογα με το μοντέλο της συσκευής). Το iOS ξεκινά τη διαδικασία επέκτασης, δημιουργεί τον ελεγκτή από το καθορισμένο nib ή storyboard και μεταφέρει την ειδοποίηση μέσω του UNNotificationContentExtension.
Η ανάπτυξη ξεκινά με την προσθήκη ενός νέου target στο Xcode με το πρότυπο Notification Content Extension. Το Xcode δημιουργεί το αρχείο MainInterface.storyboard και μια κλάση που κληρονομεί από το UIViewController, υλοποιώντας το πρωτόκολλο UNNotificationContentExtension.
Μέγιστο ύψος της προσαρμοσμένης περιοχής — 320 σημεία στο iPhone (για μοντέλα με μεγάλη οθόνη) και 352 σημεία στο iPad. Το περιεχόμενο που υπερβαίνει αυτά τα όρια αποκόπτεται. Για προσαρμογή σε διαφορετικά μεγέθη συνιστάται η χρήση Auto Layout και UIScrollView για περιεχόμενο με κύλιση. Το πλάτος είναι πάντα ίσο με το πλάτος της ειδοποίησης και αλλάζει αυτόματα κατά την περιστροφή της συσκευής.
Το Apple Human Interface Guidelines προειδοποιεί: η διεπαφή ειδοποίησης πρέπει να είναι συνοπτική και να περιέχει μόνο ένα κύριο στοιχείο — εικόνα, πρόγραμμα αναπαραγωγής, χάρτη ή φόρμα γρήγορης εισαγωγής. Πολλαπλά διαδραστικά στοιχεία υπερφορτώνουν τον χρήστη και δυσχεραίνουν την αλληλεπίδραση.
App Group — ο μοναδικός μηχανισμός ανταλλαγής δεδομένων μεταξύ της επέκτασης και της κύριας εφαρμογής. Μέσω του κοινόχρηστου καταλόγου App Group μπορούν να μεταφερθούν προσωρινά αποθηκευμένες εικόνες, διακριτικά και ρυθμίσεις. Οι άμεσες κλήσεις API της κύριας εφαρμογής ή η πρόσβαση στο UserDefaults της δεν είναι διαθέσιμες λόγω απομόνωσης διεργασιών.
class NotificationViewController: UIViewController {
func didReceive(
_ notification: UNNotification
) {
guard let attachment = notification
.request.content.attachments.first()
else { return }
if attachment.url.startAccessingSecurityScopedResource() {
imageView.image = UIImage(contentsOfFile:
attachment.url.path)
attachment.url.stopAccessingSecurityScopedResource()
}
}
}
UNNotificationContentExtension — το κύριο πρωτόκολλο που καθορίζει τον κύκλο ζωής της προσαρμοσμένης ειδοποίησης. Το πρωτόκολλο παρέχει μεθόδους για τη λήψη περιεχομένου, την επεξεργασία ενεργειών και τη διαχείριση της διεπαφής.
didReceive(_:with:) καλείται κατά τη λήψη της ειδοποίησης. Η επέκταση λαμβάνει ένα αντικείμενο UNNotification και UNNotificationContentExtensionMediaPlayPauseButtonType για τη διαχείριση του προγράμματος αναπαραγωγής πολυμέσων. Σε αυτή τη μέθοδο πρέπει να ρυθμιστεί η διεπαφή — φόρτωση εικόνας, αρχικοποίηση προγράμματος αναπαραγωγής ή εμφάνιση δεδομένων. Το σύστημα καλεί αυτή τη μέθοδο κάθε φορά που η ειδοποίηση ενημερώνεται σε πραγματικό χρόνο.
Είναι σημαντικό να ληφθεί υπόψη ότι η επέκταση έχει περιορισμένο χρόνο για εκτέλεση — περίπου 30 δευτερόλεπτα για έναν πλήρη κύκλο εμφάνισης. Εάν η διεπαφή δεν είναι έτοιμη εντός αυτού του χρόνου, το iOS θα εμφανίσει μια ειδοποίηση συστήματος. Για βαριούς πόρους — φόρτωση εικόνων από το δίκτυο, αποκωδικοποίηση βίντεο — συνιστάται η χρήση ασύγχρονων λειτουργιών με προσωρινή αποθήκευση μέσω App Group.
Το πρωτόκολλο περιλαμβάνει προαιρετικές μεθόδους για τα κουμπιά play/pause: mediaPlay, mediaPause και mediaPlayPauseButtonType. Εάν η ειδοποίηση περιέχει περιεχόμενο ήχου ή βίντεο, η επέκταση μπορεί να εμφανίσει ένα ενσωματωμένο πρόγραμμα αναπαραγωγής με στοιχείο ελέγχου συστήματος. Το iOS προσθέτει αυτόματα ένα κουμπί αναπαραγωγής στην επάνω δεξιά γωνία της επέκτασης όταν επιστρέφεται ο αντίστοιχος τύπος κουμπιού.
UNNotificationAttachment — το αντικείμενο που περιέχει δεδομένα πολυμέσων που επισυνάπτονται στην ειδοποίηση. Οι εικόνες, τα αρχεία ήχου και τα βίντεο προστίθενται στο στάδιο δημιουργίας της ειδοποίησης στον διακομιστή ή στο Notification Service Extension μέσω UNNotificationAttachment.
Για εικόνες: JPEG, PNG, GIF, HEIF. Για ήχο: MP3, AAC, ALAC, WAV. Για βίντεο: MPEG-4, H.264, HEVC. Μέγιστο μέγεθος κάθε συνημμένου — 50 MB, έως 4 συνημμένα ανά ειδοποίηση. Το σύστημα κατεβάζει αυτόματα τα συνημμένα στο παρασκήνιο πριν από την εμφάνιση της ειδοποίησης και παρέχει στην επέκταση πρόσβαση σε τοπικά URL μέσω πόρων security-scoped.
Σύμφωνα με την Apple, η επέκταση δεν θα πρέπει να φορτώνει πολυμέσα ανεξάρτητα — το UNNotificationAttachment περιέχει ήδη ένα τοπικό URL μετά την ολοκλήρωση της λήψης από το σύστημα. Ωστόσο, εάν το συνημμένο δεν λήφθηκε εγκαίρως (π.χ. σε κακή σύνδεση), η επέκταση μπορεί να εμφανίσει ένα placeholder ή εναλλακτικό κείμενο.
Κάθε UNNotificationAttachment παρέχει ένα security-scoped URL, στο οποίο η επέκταση πρέπει να αποκτήσει πρόσβαση μέσω startAccessingSecurityScopedResource() και να το απελευθερώσει μέσω stopAccessingSecurityScopedResource(). Αυτές οι μέθοδοι πρέπει να καλούνται σε ζεύγη — διαφορετικά ο πόρος δεν θα απελευθερωθεί και θα προκαλέσει διαρροή δικαιωμάτων πρόσβασης.
let attachment = notification.request.content.attachments.first()
guard attachment.url.startAccessingSecurityScopedResource()
else { return }
defer { attachment.url.stopAccessingSecurityScopedResource() }
let data = try Data(contentsOf: attachment.url)
imageView.image = UIImage(data: data)
Notification Content Extension υποστηρίζει προσαρμοσμένες διαδραστικές ενέργειες — κουμπιά που εμφανίζονται κάτω από το περιεχόμενο της ειδοποίησης. Οι ενέργειες καταχωρούνται κατά τη δημιουργία της κατηγορίας ειδοποίησης μέσω UNNotificationCategory και μπορεί να είναι καταστροφικές, κειμένου ή παρασκηνίου.
UNNotificationAction — μια απλή ενέργεια με τίτλο και προαιρετική σημαία καταστροφικότητας. UNTextInputNotificationAction — μια ενέργεια με πεδίο εισαγωγής κειμένου, για παράδειγμα για γρήγορη απάντηση σε μήνυμα. Και οι δύο τύποι υποστηρίζουν την επιλογή UNNotificationActionOptions.authenticationRequired — απαίτηση ξεκλειδώματος της συσκευής πριν από την εκτέλεση.
Η επέκταση λαμβάνει την επιλεγμένη ενέργεια μέσω της μεθόδου didReceive(_:withCompletionHandler:), όπου μεταβιβάζεται ένα αντικείμενο UNNotificationResponse με το αναγνωριστικό της ενέργειας και προαιρετικό κείμενο. Η επέκταση μπορεί να επεξεργαστεί την απάντηση ανεξάρτητα ή να τη μεταβιβάσει στην κύρια εφαρμογή μέσω του κοινόχρηστου δοχείου App Group.
let category = UNNotificationCategory(
identifier: "message",
actions: [
UNTextInputNotificationAction(
identifier: "reply",
title: "Reply",
options: .authenticationRequired
),
UNNotificationAction(
identifier: "mark_read",
title: "Mark Read",
options: .foreground
)
],
intentIdentifiers: []
)
Συχνές ερωτήσεις
Το Content Extension είναι υπεύθυνο για την οπτική εμφάνιση της ειδοποίησης, ενώ το Service Extension είναι υπεύθυνο για την τροποποίηση του περιεχομένου πριν από την εμφάνιση. Το Content Extension λειτουργεί μετά το Service Extension και δεν μπορεί να αλλάξει το payload της ειδοποίησης.
Swift και Objective-C για UIKit. Από το iOS 16, το SwiftUI υποστηρίζεται επίσης για τη δημιουργία διεπαφής ειδοποίησης μέσω NotificationContentView με τροποποιητές μεγέθους και διαμόρφωσης.
Ναι, από το iOS 16 η επέκταση μπορεί να χρησιμοποιήσει SwiftUI μέσω UIHostingController. Ωστόσο, όλες οι αρμοδιότητες του UIKit — μέγεθος, περιορισμοί, πόροι security-scoped — παραμένουν και εφαρμόζονται στο περιεχόμενο SwiftUI.
Έως 4 συνημμένα ανά ειδοποίηση. Κάθε συνημμένο έως 50 MB. Υποστηρίζονται εικόνες (JPEG, PNG, HEIF), ήχος (MP3, AAC) και βίντεο (MPEG-4, H.264).
Μέσω App Group — ενός κοινόχρηστου καταλόγου στο δίσκο. Το UserDefaults με επίθημα app group λειτουργεί επίσης. Οι άμεσες κλήσεις API της κύριας εφαρμογής δεν είναι διαθέσιμες λόγω απομόνωσης διεργασιών της επέκτασης.
Σύνοψη
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης