Sobes.tech
Middle

Τι είναι η επέκταση της υπηρεσίας ειδοποιήσεων;

sobes.tech AI

Απάντηση από AI

Η επέκταση υπηρεσίας ειδοποιήσεων (Notification Service Extension) είναι μια μικρή εκτελέσιμη προσθήκη ενσωματωμένη στην εφαρμογή iOS σας. Επιτρέπει την αλλαγή της εμφάνισης του περιεχομένου μιας απομακρυσμένης ειδοποίησης push πριν αυτή εμφανιστεί στον χρήστη.

Βασικές λειτουργίες:

  • Τροποποίηση περιεχομένου: Αλλαγή τίτλου, υποτίτλου, κειμένου ή προσθήκη συνημμένων (εικόνες, βίντεο) στην ειδοποίηση.
  • Αποκρυπτογράφηση κρυπτογραφημένου περιεχομένου: Αποκρυπτογράφηση δεδομένων που έχουν κρυπτογραφηθεί και αποστέλλονται μαζί με την ειδοποίηση πριν την εμφάνισή τους στον χρήστη.
  • Πλούσιες ειδοποιήσεις: Σε συνδυασμό με την επέκταση περιεχομένου ειδοποιήσεων (Notification Content Extension), επιτρέπει τη δημιουργία προσαρμοσμένων διεπαφών για την εμφάνιση ειδοποιήσεων.

Κύκλος ζωής:

  1. Όταν λαμβάνεται μια απομακρυσμένη ειδοποίηση με το κλειδί mutable-content: 1, το σύστημα ξεκινά την εκτέλεση της επέκτασης υπηρεσίας ειδοποιήσεων.
  2. Υλοποιείται η μέθοδος didReceive(_:withContentHandler:), στην οποία γίνεται επεξεργασία και τροποποίηση της ειδοποίησης.
  3. Το τροποποιημένο περιεχόμενο περνάει στον χειριστή ολοκλήρωσης contentHandler.
  4. Το σύστημα εμφανίζει την τροποποιημένη ειδοποίηση.

Περιορισμοί:

  • Χρονική διάρκεια εκτέλεσης μικρή (συνήθως περίπου 30 δευτερόλεπτα).
  • Περιορισμένη πρόσβαση σε πόρους συστήματος.
  • Δεν μπορεί να εκτελέσει μακροχρόνιες εργασίες στο παρασκήνιο.

Παράδειγμα βασικής υλοποίησης:

import UserNotifications

class NotificationService: UNNotificationServiceExtension {

    var contentHandler: ((UNNotificationContent) -> Void)?
    var bestAttemptContent: UNMutableNotificationContent?

    override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
        self.contentHandler = contentHandler
        bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)

        if let bestAttemptContent = bestAttemptContent {
            // Τροποποιήστε το περιεχόμενο της ειδοποίησης εδώ...
            bestAttemptContent.title = "\(bestAttemptContent.title ?? "Χωρίς Τίτλο") [τροποποιημένο]"

            contentHandler(bestAttemptContent)
        }
    }

    override func serviceExtensionTimeWillExpire() {
        // Καλείται λίγο πριν τερματιστεί η επέκταση από το σύστημα.
        // Χρησιμοποιήστε αυτό ως ευκαιρία να παραδώσετε την "καλύτερη προσπάθεια" τροποποιημένου περιεχομένου,
        // διαφορετικά, θα παραδοθεί το αρχικό φορτίο push.
        if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent {
            contentHandler(bestAttemptContent)
        }
    }

}