Το Silent Push είναι ένας τύπος push ειδοποίησης iOS που παραδίδεται στη συσκευή χωρίς καμία οπτική εμφάνιση στον χρήστη και χωρίς ηχητική ειδοποίηση. Η κύρια λειτουργία της σιωπηλής ειδοποίησης είναι ο συγχρονισμός δεδομένων στο παρασκήνιο, η ενημέρωση περιεχομένου και η εκτέλεση σύντομων εργασιών που δεν απαιτούν την προσοχή του χρήστη. Σύμφωνα με τα Apple Developer Documentation, 2026, το Silent Push ενεργοποιεί την εφαρμογή στο παρασκήνιο για 30 δευτερόλεπτα για επεξεργασία εισερχόμενων δεδομένων, μετά από τα οποία το σύστημα επαναφέρει τη συσκευή σε κατάσταση αναστολής για εξοικονόμηση μπαταρίας.
Βασικά σημεία
Silent Push (σιωπηλή push ειδοποίηση) είναι ένας μηχανισμός iOS που παραδίδει δεδομένα στη συσκευή χωρίς καμία οπτική ειδοποίηση προς τον χρήστη. Σε αντίθεση με την τυπική push που εμφανίζει banner, αναπαράγει ήχο και καταλήγει στο Notification Center, το silent push \\αφυπνίζει\\ την εφαρμογή στο παρασκήνιο και της μεταφέρει δεδομένα για επεξεργασία. Ο χρήστης δεν μαθαίνει ποτέ για την παράδοση μιας τέτοιας ειδοποίησης — το αποτέλεσμα είναι ενημερωμένο περιεχόμενο στο επόμενο άνοιγμα.
Η βασική διαφορά έγκειται στο JSON ωφέλιμο φορτίο: το silent push περιέχει τη σημαία content-available: 1 και ΔΕΝ περιέχει alert, sound ή badge. Η τυπική ειδοποίηση με alert εμφανίζεται πάντα στον χρήστη, ανεξάρτητα από το content-available. Το Silent Push λειτουργεί μόνο με content-available: 1 και χωρίς alert — αν προστεθεί alert, το σύστημα θα εμφανίσει την ειδοποίηση ακόμα και με τη σημαία παράδοσης παρασκηνίου.
Οι σιωπηλές ειδοποιήσεις είναι απαραίτητες για σενάρια όπου τα δεδομένα πρέπει να είναι φρέσκα κατά το άνοιγμα της εφαρμογής, αλλά ο χρήστης δεν πρέπει να αποσπάται. Παραδείγματα: ενημέρωση ροής ειδήσεων στο παρασκήνιο, συγχρονισμός συνδρομών, λήψη νέου περιεχομένου για offline πρόσβαση, ενημέρωση widgets, ακύρωση προσωρινής μνήμης. Το Silent Push χρησιμοποιείται επίσης για \\προθέρμανση\\ της εφαρμογής πριν από μια αναμενόμενη ενέργεια του χρήστη.
Η παράδοση Silent Push διαφέρει σημαντικά από τις κανονικές ειδοποιήσεις και υπόκειται σε κανόνες βελτιστοποίησης ενέργειας. Το σύστημα iOS λαμβάνει το αίτημα push από το APNS, προσδιορίζει ότι πρόκειται για silent push (content-available: 1) και αποφασίζει για την παράδοση βάσει πολλών παραγόντων: επίπεδο μπαταρίας, λειτουργία εξοικονόμησης ενέργειας, συχνότητα προηγούμενων silent push, δραστηριότητα εφαρμογής και τρέχουσα φόρτωση CPU.
Σε συσκευές με τσιπ Apple M και iOS 15+, το silent push ενσωματώνεται με τον μηχανισμό Power Nap, ο οποίος αφυπνίζει περιοδικά τη συσκευή για εργασίες παρασκηνίου. Το Power Nap συγκεντρώνει πολλαπλά silent push σε μία περίοδο δραστηριότητας, μειώνοντας τη συνολική κατανάλωση ενέργειας. Ο προγραμματιστής δεν μπορεί να διαχειριστεί το Power Nap άμεσα — το σύστημα αποφασίζει αυτόματα βάσει της συμπεριφοράς του χρήστη και του ιστορικού χρήσης της εφαρμογής.
Όταν το σύστημα παραδίδει ένα silent push, η εφαρμογή λαμβάνει την κλήση application(_:didReceiveRemoteNotification:fetchCompletionHandler:) στο AppDelegate. Ο προγραμματιστής υποχρεούται να καλέσει το completion handler εντός 30 δευτερολέπτων, μεταδίδοντας το σωστό αποτέλεσμα (UIBackgroundFetchResult). Εάν η επεξεργασία δεν ολοκληρωθεί εγκαίρως, το σύστημα μπορεί να περιορίσει τη συχνότητα των silent push για αυτήν την εφαρμογή ή ακόμα και να σταματήσει εντελώς την παράδοσή τους.
// Χειρισμός Silent Push στο AppDelegate
func application(
_ application: UIApplication,
didReceiveRemoteNotification userInfo: [AnyHashable: Any],
fetchCompletionHandler completionHandler:
@escaping (UIBackgroundFetchResult) -> Void
) {
guard let type = userInfo["sync-type"] as? String
else {
completionHandler(.failed)
return
}
if type == "news-feed" {
NewsFeedSyncService().sync { success in
completionHandler(success ? .newData : .failed)
}
} else if type == "cache-invalidate" {
CacheManager.shared.invalidateAll()
completionHandler(.newData)
} else {
completionHandler(.noData)
}
}
Η Apple δεν δημοσιεύει ακριβή διαστήματα μεταξύ silent push, αλλά βάσει δοκιμών και τεκμηρίωσης συνιστάται η αποστολή όχι περισσότερων από 2–3 σιωπηλών ειδοποιήσεων ανά ώρα ανά συσκευή. Με συχνότερη αποστολή, το σύστημα αρχίζει να αγνοεί τα silent push και τα δεδομένα σταματούν να παραδίδονται. Εάν απαιτείται συχνότερος συγχρονισμός, εξετάστε τη χρήση του URLSession με ρύθμιση παρασκηνίου ή VoIP push.
Το Silent Push εφαρμόζεται σε ένα ευρύ φάσμα εργασιών όπου τα δεδομένα πρέπει να είναι ενημερωμένα χωρίς ενεργή συμμετοχή του χρήστη. Ας εξετάσουμε τα πιο αποτελεσματικά σενάρια χρήσης αυτού του μηχανισμού σε πραγματικές iOS εφαρμογές.
Οι εφαρμογές ειδήσεων, οι αναγνώστες και οι εφαρμογές ταξιδιών χρησιμοποιούν Silent Push για λήψη νέου περιεχομένου στο παρασκήνιο. Όταν ο χρήστης ανοίγει την εφαρμογή, τα δεδομένα είναι ήδη ληφθέντα και διαθέσιμα ακόμα και χωρίς σύνδεση στο διαδίκτυο. Αυτή η προσέγγιση βελτιώνει ριζικά την εμπειρία χρήστη — οι οθόνες φόρτωσης εξαφανίζονται και το περιεχόμενο εμφανίζεται άμεσα. Ο διακομιστής στέλνει silent push όταν εμφανίζονται νέα άρθρα και η εφαρμογή τα κατεβάζει στο παρασκήνιο για offline ανάγνωση.
Το iOS WidgetKit ενημερώνει τα widgets βάσει προγράμματος, αλλά για άμεση ενημέρωση μετά από αλλαγή δεδομένων στον διακομιστή χρησιμοποιείται Silent Push. Η εφαρμογή στο παρασκήνιο επεξεργάζεται το silent push, ενημερώνει την τοπική αποθήκευση δεδομένων για widgets και αναγκάζει την ενημέρωση του timeline μέσω WidgetCenter. Ο χρήστης βλέπει ενημερωμένες πληροφορίες στο widget χωρίς να ανοίξει την εφαρμογή — ισοτιμίες συναλλάγματος, πρόγνωση καιρού, κατάσταση παράδοσης.
Όταν ο διακομιστής ενημερώνει κρίσιμα δεδομένα (για παράδειγμα, κανόνες τιμολόγησης, λίστα διαθέσιμων λειτουργιών για premium χρήστες), το Silent Push επιτρέπει την άμεση ακύρωση της τοπικής προσωρινής μνήμης. Στο επόμενο άνοιγμα η εφαρμογή θα φορτώσει φρέσκα δεδομένα από τον διακομιστή, αντί να χρησιμοποιεί παρωχημένη προσωρινή μνήμη. Αυτό είναι ιδιαίτερα σημαντικό για εφαρμογές με πληρωμένο περιεχόμενο ή συνδρομές.
Σε ορισμένα σενάρια απαιτείται ενημέρωση του badge στο εικονίδιο της εφαρμογής χωρίς εμφάνιση ειδοποίησης. Το Silent Push με πεδίο badge στο ωφέλιμο φορτίο επιτρέπει τον ορισμό της επιθυμητής τιμής μετρητή χωρίς να ενοχλεί τον χρήστη με banner. Για παράδειγμα, μια εφαρμογή συνομιλίας μπορεί να ενημερώνει το badge με τον αριθμό των μη αναγνωσμένων μηνυμάτων χωρίς να εμφανίζει κάθε νέο μήνυμα ως ειδοποίηση, εάν ο χρήστης βρίσκεται ήδη στην εφαρμογή.
Για τη σωστή λειτουργία του Silent Push απαιτείται ρύθμιση σε τρία επίπεδα: το έργο Xcode, το JSON ωφέλιμο φορτίο στον διακομιστή και ο κώδικας επεξεργασίας στην εφαρμογή. Κάθε επίπεδο είναι κρίσιμο: η παράλειψη οποιουδήποτε βήματος έχει ως αποτέλεσμα η ειδοποίηση να παραδίδεται ως κανονική ή να μην παραδίδεται καθόλου.
Στο Xcode πρέπει να ενεργοποιηθεί το capability Push Notifications και το Background Modes με το πλαίσιο Remote notifications. Το Push Notifications δημιουργεί πιστοποιητικό για APNS, ενώ το Remote notifications στο Background Modes επιτρέπει στο σύστημα να αφυπνίζει την εφαρμογή κατά τη λήψη silent push. Χωρίς το Remote notifications, το silent push θα παραδοθεί αλλά η εφαρμογή δεν θα ενεργοποιηθεί στο παρασκήνιο και τα δεδομένα δεν θα υποβληθούν σε επεξεργασία.
Το ωφέλιμο φορτίο Silent Push πρέπει να περιέχει το κλειδί aps με content-available: 1 και ΝΑ ΜΗΝ περιέχει alert, sound ή badge. Τα προσαρμοσμένα πεδία μεταδίδονται στο ίδιο επίπεδο με το aps και περιέχουν δεδομένα για επεξεργασία: τύπο λειτουργίας, αναγνωριστικά αντικειμένων, μεταδεδομένα. Το ωφέλιμο φορτίο χωρίς content-available θα υποβληθεί σε επεξεργασία ως κανονική ειδοποίηση· με alert — ως κανονική, ακόμα και με content-available.
{
"aps": {
"content-available": 1
},
"sync-type": "news-feed",
"last-article-id": "article_8521",
"priority": "high"
}
Κατά τη λήψη ενός silent push, το iOS καλεί την application(_:didReceiveRemoteNotification:fetchCompletionHandler:) πριν η εφαρμογή γίνει ορατή. Σε αυτήν τη μέθοδο πρέπει να αναλυθεί το userInfo, να εκτελεστεί η απαραίτητη εργασία (αιτήματα δικτύου, εγγραφή σε Core Data, ενημέρωση προσωρινής μνήμης) και να κληθεί υποχρεωτικά το completionHandler με το σωστό αποτέλεσμα εντός 30 δευτερολέπτων. Η μη κλήση του completionHandler θεωρείται από το σύστημα ως σφάλμα και επηρεάζει τη συχνότητα μελλοντικών silent push.
Το Silent Push δεν είναι αξιόπιστο κανάλι παράδοσης δεδομένων για κρίσιμες λειτουργίες — είναι ένας μηχανισμός βελτιστοποίησης, όχι εγγυημένου συγχρονισμού. Ο προγραμματιστής πρέπει να κατανοεί τους περιορισμούς και να σχεδιάζει το σύστημα έτσι ώστε η εφαρμογή να λειτουργεί σωστά τόσο με όσο και χωρίς silent push.
Το iOS δεν εγγυάται την παράδοση κάθε silent push. Το σύστημα μπορεί να καθυστερήσει ή να ακυρώσει την παράδοση με χαμηλή φόρτιση μπαταρίας (κάτω από 20%), σε λειτουργία Low Power Mode, με υψηλή συχνότητα προηγούμενων silent push, καθώς και αν η εφαρμογή δεν έχει χρησιμοποιηθεί για μεγάλο χρονικό διάστημα. Μέση στατιστική παράδοσης σύμφωνα με την Apple: περίπου 70–80% των silent push παραδίδονται εντός 5 λεπτών, τα υπόλοιπα μπορεί να καθυστερήσουν ή να χαθούν.
Η Apple συνιστά την τήρηση ορισμένων κανόνων για αποτελεσματική χρήση των silent push. Μην στέλνετε περισσότερα από 2–3 silent push ανά ώρα ανά συσκευή — η υπέρβαση του ορίου οδηγεί σε αποκλεισμό. Χρησιμοποιήστε συμπαγές ωφέλιμο φορτίο: το ελάχιστο μέγεθος ωφέλιμου φορτίου επιταχύνει την επεξεργασία και μειώνει τη φόρτωση δικτύου. Καλέστε το completionHandler πάντα και όσο το δυνατόν γρηγορότερα: όσο περισσότερο διαρκεί η επεξεργασία, τόσο μεγαλύτερη είναι η πιθανότητα το σύστημα να περιορίσει τα silent push στο μέλλον.
Για σενάρια όπου απαιτείται εγγυημένη παράδοση ή περισσότερος χρόνος επεξεργασίας, εξετάστε εναλλακτικές λύσεις. Το VoIP push (PushKit) εγγυάται την παράδοση και δίνει περισσότερο χρόνο, αλλά προορίζεται μόνο για VoIP εφαρμογές. Το Background fetch (UIApplication background fetch) εκκινείται από το σύστημα βάσει προγράμματος, αλλά δεν μπορεί να ενεργοποιηθεί από τον διακομιστή. Το WebSocket διατηρεί μόνιμη σύνδεση, αλλά καταναλώνει περισσότερη μπαταρία και δεν είναι κατάλληλο για όλους τους τύπους εφαρμογών.
Για αποσφαλμάτωση Silent Push χρησιμοποιήστε το Console.app σε Mac και φιλτράρετε με το όνομα της εφαρμογής. Το σύστημα καταγράφει κάθε silent push με την ένδειξη \\background task\\ και αναφέρει αν η επεξεργασία ήταν επιτυχής. Στη συσκευή, ο έλεγχος γίνεται μέσω Settings → Developer → Background Modes Logging. Η πλευρά του διακομιστή παρακολουθείται μέσω APNS Feedback Service για τον εντοπισμό μη παραδοθέντων ειδοποιήσεων.
Συχνές ερωτήσεις
Το Silent Push δεν εμφανίζεται στον χρήστη, δεν αναπαράγει ήχο και δεν καταλήγει στο Notification Center. Ο σκοπός του είναι να ενεργοποιήσει την εφαρμογή στο παρασκήνιο για συγχρονισμό δεδομένων. Η κανονική push εμφανίζει πάντα banner και μπορεί να περιέχει ήχο και badge.
Η εφαρμογή λαμβάνει 30 δευτερόλεπτα για την εκτέλεση της εργασίας παρασκηνίου. Μετά την κλήση του completionHandler, το σύστημα επαναφέρει τη συσκευή σε κατάσταση αναστολής. Εάν δεν κληθεί το completionHandler εγκαίρως, το σύστημα μπορεί να σταματήσει την παράδοση silent push σε αυτήν την εφαρμογή.
Το σύστημα μπορεί να καθυστερήσει την παράδοση με χαμηλή φόρτιση μπαταρίας, σε λειτουργία εξοικονόμησης ενέργειας, με συχνή αποστολή silent push ή αν η εφαρμογή δεν έχει χρησιμοποιηθεί για μεγάλο χρονικό διάστημα. Αυτή είναι η κανονική συμπεριφορά του iOS, που δεν σχετίζεται με σφάλματα υλοποίησης.
Ναι, μπορείτε να ορίσετε content-available: 1 μαζί με alert — σε αυτήν την περίπτωση η ειδοποίηση θα εμφανιστεί στον χρήστη και η εφαρμογή θα λάβει επιπλέον ενεργοποίηση παρασκηνίου. Αλλά αν ο σκοπός είναι μόνο ο συγχρονισμός παρασκηνίου χωρίς εμφάνιση, το alert δεν πρέπει να ορίζεται.
Χρησιμοποιήστε το Console.app σε Mac για προβολή αρχείων καταγραφής εργασιών παρασκηνίου. Στείλτε ένα δοκιμαστικό silent push μέσω APNS και ελέγξτε ότι καλείται το didReceiveRemoteNotification με το σωστό completionHandler. Στο Xcode, χρησιμοποιήστε τον προσομοιωτή με προσομοίωση λειτουργίας παρασκηνίου.
Σύνοψη
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης