Notification Content Extension — ουσία, προσαρμοσμένο UI και ρύθμιση στο iOS

Συγγραφέας: IT Sectr Δημοσιεύτηκε: 2026-06-15 Χρόνος ανάγνωσης: 9 λεπ

Notification Content Extension — είναι ένας τύπος επέκτασης iOS που αντικαθιστά το τυπικό πρότυπο push ειδοποίησης με μια πλήρως προσαρμοσμένη διεπαφή χρήστη. Ο προγραμματιστής αποκτά τη δυνατότητα να εμφανίζει εικόνες, πρόγραμμα αναπαραγωγής ήχου, κουμπιά ενεργειών, μπάρες προόδου και προσαρμοσμένα κινούμενα σχέδια μέσα στην ειδοποίηση, επεκτείνοντας το τυπικό banner σε μια πλήρη μίνι εφαρμογή. Σύμφωνα με τα δεδομένα του WWDC 2025, η επέκταση χρησιμοποιεί το UNNotificationContentExtension και υποστηρίζει έως 4 συνημμένα πολυμέσων σε μία ειδοποίηση, καθώς και την επεξεργασία διαδραστικών ενεργειών μέσω του UNNotificationAction.

Κύρια σημεία

  • Notification Content Extension δημιουργεί μια προσαρμοσμένη διεπαφή για push ειδοποιήσεις αντί για το τυπικό πρότυπο συστήματος
  • Η αρχιτεκτονική βασίζεται στο πρωτόκολλο UNNotificationContentExtension με τις μεθόδους didReceive(_:with:) και didReceive(_:withCompletionHandler:)
  • Η επέκταση μπορεί να εμφανίζει συνημμένα πολυμέσων — εικόνες, ήχο και βίντεο — απευθείας μέσα στην ειδοποίηση χωρίς να ανοίγει την εφαρμογή
  • Οι διαδραστικές ειδοποιήσεις υποστηρίζουν προσαρμοσμένες ενέργειες με ανατροφοδότηση και εισαγωγή κειμένου
  • Το μέγεθος της διεπαφής είναι περιορισμένο — μέγιστο ύψος προσαρμοσμένης ειδοποίησης 320 σημεία στο iPhone και 352 στο iPad

Τι είναι το Notification Content Extension

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 της δεν είναι διαθέσιμες λόγω απομόνωσης διεργασιών.

swift
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

UNNotificationContentExtension — το κύριο πρωτόκολλο που καθορίζει τον κύκλο ζωής της προσαρμοσμένης ειδοποίησης. Το πρωτόκολλο παρέχει μεθόδους για τη λήψη περιεχομένου, την επεξεργασία ενεργειών και τη διαχείριση της διεπαφής.

Μέθοδος didReceive:with:

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 ή εναλλακτικό κείμενο.

Εργασία με πόρους security-scoped

Κάθε UNNotificationAttachment παρέχει ένα security-scoped URL, στο οποίο η επέκταση πρέπει να αποκτήσει πρόσβαση μέσω startAccessingSecurityScopedResource() και να το απελευθερώσει μέσω stopAccessingSecurityScopedResource(). Αυτές οι μέθοδοι πρέπει να καλούνται σε ζεύγη — διαφορετικά ο πόρος δεν θα απελευθερωθεί και θα προκαλέσει διαρροή δικαιωμάτων πρόσβασης.

swift
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.

swift
let category = UNNotificationCategory(
    identifier: "message",
    actions: [
        UNTextInputNotificationAction(
            identifier: "reply",
            title: "Reply",
            options: .authenticationRequired
        ),
        UNNotificationAction(
            identifier: "mark_read",
            title: "Mark Read",
            options: .foreground
        )
    ],
    intentIdentifiers: []
)

Συχνές ερωτήσεις

Ποια είναι η διαφορά μεταξύ Notification Content Extension και Service Extension;

Το Content Extension είναι υπεύθυνο για την οπτική εμφάνιση της ειδοποίησης, ενώ το Service Extension είναι υπεύθυνο για την τροποποίηση του περιεχομένου πριν από την εμφάνιση. Το Content Extension λειτουργεί μετά το Service Extension και δεν μπορεί να αλλάξει το payload της ειδοποίησης.

Ποιες γλώσσες προγραμματισμού υποστηρίζονται;

Swift και Objective-C για UIKit. Από το iOS 16, το SwiftUI υποστηρίζεται επίσης για τη δημιουργία διεπαφής ειδοποίησης μέσω NotificationContentView με τροποποιητές μεγέθους και διαμόρφωσης.

Μπορεί να χρησιμοποιηθεί το SwiftUI στο Notification Content Extension;

Ναι, από το 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 της κύριας εφαρμογής δεν είναι διαθέσιμες λόγω απομόνωσης διεργασιών της επέκτασης.

Σύνοψη

  • Notification Content Extension αντικαθιστά την τυπική διεπαφή ειδοποίησης με μια προσαρμοσμένη με οποιαδήποτε οπτικά στοιχεία
  • Η αρχιτεκτονική χρησιμοποιεί το πρωτόκολλο UNNotificationContentExtension με μεθόδους didReceive για ενημέρωση της διεπαφής
  • UNNotificationAttachment παρέχει συνημμένα πολυμέσων με αυτόματη λήψη στο παρασκήνιο και πρόσβαση security-scoped
  • Οι διαδραστικές ενέργειες υποστηρίζουν εισαγωγή κειμένου και καταστροφικές λειτουργίες μέσω UNNotificationAction
  • Μέγιστο ύψος διεπαφής — 320 σημεία στο iPhone, για προσαρμογή περιεχομένου συνιστάται UIScrollView
  • Ανταλλαγή δεδομένων με την κύρια εφαρμογή — μόνο μέσω App Group και κοινόχρηστου καταλόγου στο δίσκο

Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση

Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.

Συζήτηση έργου

Διαβάστε επίσης