APNS: τι είναι, η δομή του Apple Push Notification Service και πώς λειτουργεί

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

APNS (Apple Push Notification Service) — η υποδομική υπηρεσία της Apple για την παράδοση push ειδοποιήσεων σε συσκευές του οικοσυστήματος: iPhone, iPad, Mac, Apple Watch και Apple TV. Η υπηρεσία εξασφαλίζει αξιόπιστη μετάδοση μηνυμάτων μέσω μόνιμης σύνδεσης TLS μεταξύ της συσκευής και των διακομιστών της Apple. Σύμφωνα με την Apple Developer Documentation, το APNS χρησιμοποιεί το πρωτόκολλο HTTP/2 για αμφίδρομη επικοινωνία με τους διακομιστές εφαρμογών.

Κύρια σημεία

  • APNS — η κεντρική υπηρεσία της Apple για την παράδοση push ειδοποιήσεων σε όλες τις συσκευές Apple
  • Πρωτόκολλο — HTTP/2 με TLS, αμφίδρομη επικοινωνία μεταξύ διακομιστή εφαρμογής και διακομιστών Apple
  • Αυθεντικοποίηση — δύο τρόποι: Token-based (κλειδί p8) και Certificate-based (πιστοποιητικό .p12)
  • Συσκευές — κάθε μία λαμβάνει μοναδικό push token για ταυτοποίηση κατά την αποστολή
  • Προτεραιότητα — άμεση παράδοση (10) ή ενεργειακά αποδοτική (5) ανάλογα με τον τύπο μηνύματος

Τι είναι το APNS;

Το Apple Push Notification Service (APNS) είναι η ιδιόκτητη υπηρεσία της Apple για τη δρομολόγηση push ειδοποιήσεων από τον διακομιστή εφαρμογής στις συσκευές των χρηστών. Σε αντίθεση με το FCM, το APNS δεν υποστηρίζει Android ή άλλες πλατφόρμες — είναι πλήρως συνδεδεμένο με το οικοσύστημα της Apple.

Η υπηρεσία λειτουργεί μέσω μόνιμης σύνδεσης TLS, την οποία κάθε συσκευή Apple δημιουργεί με τους διακομιστές APNS κατά την ενεργοποίηση. Αυτή η σύνδεση διατηρείται στο παρασκήνιο και χρησιμοποιείται για την παράδοση ειδοποιήσεων με ελάχιστη καθυστέρηση.

Το APNS αναλαμβάνει όλη την υποδομή παράδοσης: κρυπτογράφηση, αυθεντικοποίηση, προτεραιοποίηση και εκ νέου αποστολή σε περίπτωση μη διαθεσιμότητας της συσκευής. Ο προγραμματιστής χρειάζεται μόνο να παρέχει ένα σωστά διαμορφωμένο payload και ένα έγκυρο push token.

Εξέλιξη του APNS

Αρχικά το APNS λειτουργούσε μέσω δυαδικού πρωτοκόλλου στη θύρα 2195–2196. Από το 2015 η Apple μετέφερε την υπηρεσία στο σύγχρονο πρωτόκολλο HTTP/2, το οποίο υποστηρίζει πολυπλεξία, συμπίεση κεφαλίδων και server push ειδοποιήσεις. Το HTTP/2 έγινε υποχρεωτικό από τον Ιούνιο του 2020.

Πώς λειτουργεί το Apple Push Notification Service;

Η διαδικασία παράδοσης μιας push ειδοποίησης μέσω APNS αποτελείται από πέντε στάδια: εγγραφή συσκευής, λήψη push token, αποστολή αιτήματος από τον διακομιστή, δρομολόγηση APNS και παράδοση στη συσκευή.

  • Εγγραφή — κατά την εκκίνηση η εφαρμογή καλεί registerForRemoteNotifications, το σύστημα επικοινωνεί με το APNS
  • Token — το APNS επιστρέφει στη συσκευή ένα push token — μια μοναδική συμβολοσειρά που ταυτοποιεί την εφαρμογή στη συσκευή
  • Αποστολή — ο διακομιστής εφαρμογής στέλνει POST αίτημα στο https://api.push.apple.com με το token και το payload
  • Δρομολόγηση — το APNS βρίσκει τη συσκευή μέσω του token και παραδίδει το μήνυμα μέσω TLS σύνδεσης
  • Επεξεργασία — το iOS/macOS εμφανίζει την ειδοποίηση ή τη μεταβιβάζει στην εφαρμογή ανάλογα με την κατάσταση

Εάν η συσκευή είναι μη διαθέσιμη (απενεργοποιημένη ή χωρίς δίκτυο), το APNS αποθηκεύει το τελευταίο μήνυμα για κάθε εφαρμογή και το παραδίδει όταν αποκατασταθεί η σύνδεση. Η μέγιστη διάρκεια αποθήκευσης είναι 4 εβδομάδες, μετά την οποία το μήνυμα διαγράφεται.

Αυθεντικοποίηση στο APNS: Token και Certificate

Η Apple υποστηρίζει δύο τρόπους αυθεντικοποίησης του διακομιστή εφαρμογής κατά την αποστολή push ειδοποιήσεων. Κάθε τρόπος έχει τα δικά του χαρακτηριστικά όσον αφορά τη διάρκεια ισχύος, τη διαχείριση και την ευκολία χρήσης.

ΠαράμετροςToken-based (p8)Certificate-based (.p12)
Διάρκεια ισχύοςΑόριστη (το κλειδί δεν λήγει)Περιορισμένη από τη διάρκεια του πιστοποιητικού (συνήθως 1 έτος)
ΕναλλαγήΔεν απαιτείται, εάν το κλειδί δεν έχει παραβιαστείΥποχρεωτική ετήσια αντικατάσταση
Πολλαπλές εφαρμογέςΈνα κλειδί για όλες τις εφαρμογές του λογαριασμούΞεχωριστό πιστοποιητικό για κάθε εφαρμογή
ΠεριβάλλονΈνα κλειδί για Sandbox και ProductionΔιαφορετικά πιστοποιητικά για Sandbox και Production

Token-based αυθεντικοποίηση — ο προτεινόμενος τρόπος από την Apple από το 2019. Δημιουργείτε ένα p8-κλειδί στο Apple Developer Console, το φορτώνετε στον διακομιστή και υπογράφετε κάθε APNS αίτημα με αυτό. Το κλειδί δεν λήγει και λειτουργεί για όλες τις εφαρμογές του λογαριασμού σας.

Ποιον τρόπο αυθεντικοποίησης να επιλέξετε

Για νέα έργα, η Token-based αυθεντικοποίηση είναι σαφώς προτιμότερη: ένα p8-κλειδί για ολόκληρο τον λογαριασμό, αόριστης διάρκειας, χωρίς δέσμευση σε περιβάλλον. Η Certificate-based (.p12) χρησιμοποιείται ακόμα σε παλαιότερα έργα, αλλά απαιτεί ετήσια αντικατάσταση και ξεχωριστά πιστοποιητικά για Sandbox και Production. Λάβετε υπόψη τη λήξη του πιστοποιητικού κατά τον προγραμματισμό CI/CD.

Τύποι push ειδοποιήσεων APNS

Το APNS υποστηρίζει τρεις τύπους push ειδοποιήσεων, οι οποίοι διαφέρουν ως προς τη συμπεριφορά στη συσκευή και τις απαιτήσεις χαρακτηριστικών του αιτήματος. Η επιλογή τύπου εξαρτάται από το σενάριο UX και τον επείγοντα χαρακτήρα του μηνύματος.

  • Alert — τυπική ειδοποίηση με τίτλο, κείμενο και προαιρετικά κουμπιά ενεργειών
  • Background — αθόρυβη παράδοση δεδομένων (silent push) χωρίς εμφάνιση στον χρήστη, επεξεργάζεται στο application:didReceiveRemoteNotification
  • VOIP — ειδικός τύπος για εφαρμογές VoIP (PushKit), παραδίδεται άμεσα ακόμα και όταν η εφαρμογή είναι κλειστή

Για Background ειδοποιήσεις πρέπει να ορίσετε το κλειδί content-available: 1 και να ορίσετε προτεραιότητα 5 (ενεργειακά αποδοτική παράδοση). Το σύστημα μπορεί να περιορίσει τον αριθμό των παρασκηνιακών ειδοποιήσεων εάν η εφαρμογή δεν τις επεξεργάζεται έγκαιρα.

Ρύθμιση προτεραιότητας παράδοσης

Το APNS υποστηρίζει δύο τιμές προτεραιότητας: 10 (άμεση παράδοση) και 5 (ενεργειακά αποδοτική). Για alert ειδοποιήσεις χρησιμοποιήστε 10 — ο χρήστης πρέπει να τις λάβει αμέσως. Για background ειδοποιήσεις χρησιμοποιήστε 5 — το σύστημα μπορεί να καθυστερήσει την παράδοση για εξοικονόμηση μπαταρίας. Η λανθασμένη προτεραιότητα για background μπορεί να οδηγήσει σε απόρριψη της ειδοποίησης από το APNS.

Μορφή ωφέλιμου φορτίου APNS

Το APNS δέχεται payload σε μορφή JSON με μέγιστο μέγεθος 4 KB για κανονικές ειδοποιήσεις και 5 KB για VOIP. Το payload περιέχει το υποχρεωτικό λεξικό aps με ρυθμίσεις εμφάνισης και προαιρετικά προσαρμοσμένα πεδία.

json
{
    "aps": {
        "alert": {
            "title": "Νέο μήνυμα",
            "body": "Έχετε 3 μη αναγνωσμένες συνομιλίες"
        },
        "badge": 3,
        "sound": "default",
        "category": "message_category",
        "thread-id": "chat_room_42"
    },
    "customData": {
        "chatId": "42"
    }
}

Το κλειδί thread-id ομαδοποιεί τις ειδοποιήσεις στο Κέντρο Ειδοποιήσεων iOS. Το κλειδί category συνδέει την ειδοποίηση με UNNotificationCategory για εμφάνιση κουμπιών ενεργειών. Χωρίς αυτά τα κλειδιά, όλες οι ειδοποιήσεις εμφανίζονται μεμονωμένα.

Προσαρμοσμένα πεδία στο APNS payload

Εκτός από το υποχρεωτικό λεξικό aps, το APNS payload μπορεί να περιέχει οποιαδήποτε προσαρμοσμένα πεδία στο ανώτερο επίπεδο. Αυτά τα πεδία είναι διαθέσιμα στην εφαρμογή μέσω του λεξικού userInfo κατά την επεξεργασία της ειδοποίησης. Τα προσαρμοσμένα δεδομένα είναι χρήσιμα για τη μεταφορά αναγνωριστικών οντοτήτων, οθονών ή συνδέσμων. Το μέγιστο μέγεθος payload είναι 4 KB, επομένως αποφύγετε τη μεταφορά μεγάλων όγκων δεδομένων μέσω push· φορτώστε τα μέσω API μετά το άνοιγμα της ειδοποίησης.

Παράδειγμα αποστολής μέσω HTTP/2 API

Για την αποστολή push ειδοποίησης στον διακομιστή, πρέπει να εκτελέσετε ένα POST αίτημα στο APNS endpoint με σωστές κεφαλίδες αυθεντικοποίησης. Παρακάτω δίνεται ένα παράδειγμα σε Node.js με χρήση Token-based αυθεντικοποίησης.

js
const http2 = require("http2")
const fs = require("fs")
const jwt = require("jsonwebtoken")

const token = jwt.sign(
    { iss: "TEAM_ID", iat: Math.floor(Date.now() / 1000) },
    fs.readFileSync("AuthKey.p8"),
    { algorithm: "ES256", keyid: "KEY_ID" }
)

const payload = JSON.stringify({
    aps: { alert: { title: "Γεια!", body: "Δοκιμαστικό push" } }
})

const client = http2.connect(
    "https://api.push.apple.com"
)

const req = client.request({
    ":method": "POST",
    ":path": "/3/device/DEVICE_PUSH_TOKEN",
    "authorization": "bearer " + token,
    "apns-push-type": "alert",
    "apns-topic": "com.example.app",
    "apns-priority": "10"
})
req.end(payload)

req.on("response", (headers) => {
    if (headers[":status"] === 200) {
        console.log("Το Push στάλθηκε με επιτυχία")
    }
})

Μετά την αποστολή, το APNS επιστρέφει HTTP κατάσταση 200 σε περίπτωση επιτυχούς παράδοσης ή κωδικό σφάλματος με περιγραφή στο σώμα της απάντησης. Είναι σημαντικό να χειρίζεστε το σφάλμα token-unregistered (410) — ένα τέτοιο token θα πρέπει να αφαιρεθεί από τον διακομιστή, καθώς η εφαρμογή έχει αφαιρεθεί από τη συσκευή.

Σφάλματα APNS και ο χειρισμός τους

Το APNS επιστρέφει HTTP καταστάσεις για κάθε αίτημα αποστολής. Επιτυχής αποστολή — κατάσταση 200. Τα σφάλματα απαιτούν διαφορετικές στρατηγικές χειρισμού. BadDeviceToken (400) ή Unregistered (410) — το token της συσκευής είναι παρωχημένο, πρέπει να αφαιρεθεί από τον διακομιστή. PayloadTooLarge (413) — υπέρβαση του ορίου των 4 KB, μειώστε το payload.

Σφάλμα TooManyRequests (429) — υπέρβαση του ορίου αιτημάτων. Το APNS ορίζει όριο στον αριθμό αποστολών ανά δευτερόλεπτο. Κατά τη λήψη 429, πρέπει να εφαρμοστεί εκθετική καθυστέρηση (exponential backoff) και να επαναληφθεί η αποστολή. Συνιστάται να μην υπερβαίνετε τα 100 αιτήματα ανά δευτερόλεπτο ανά σύνδεση HTTP/2.

Σφάλματα από την πλευρά του APNS — 500 και 503 (Internal Server Error / Service Unavailable). Πρόκειται για προσωρινές βλάβες της υποδομής της Apple. Σε τέτοιες περιπτώσεις, επαναλάβετε την αποστολή με καθυστέρηση 1–5 δευτερολέπτων, όχι περισσότερες από 3 προσπάθειες. Τα μόνιμα σφάλματα 5xx με πλήρως λειτουργικό διακομιστή είναι σπάνιο φαινόμενο, συνήθως σχετίζονται με προβλήματα TLS σύνδεσης.

Για το περιβάλλον Production, φροντίστε να υλοποιήσετε καταγραφή όλων των σφαλμάτων APNS με αναφορά του token, του κωδικού σφάλματος και της ώρας. Αυτό θα βοηθήσει στον γρήγορο εντοπισμό προβλημάτων με πιστοποιητικά, όρια ή συγκεκριμένα token συσκευών. Ελέγχετε τακτικά τη διάρκεια ισχύος των πιστοποιητικών, εάν χρησιμοποιείτε Certificate-based αυθεντικοποίηση.

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

Ποιες θύρες χρησιμοποιεί το APNS;

Το APNS λειτουργεί μέσω TCP 443 (HTTPS) για HTTP/2 API. Προηγουμένως χρησιμοποιούνταν οι θύρες 2195 και 2196 για το δυαδικό πρωτόκολλο. Από τον Ιούνιο του 2020, η Apple απαιτεί αποκλειστική χρήση HTTP/2 στη θύρα 443. Βεβαιωθείτε ότι ο διακομιστής έχει πρόσβαση στο api.push.apple.com.

Τι είναι τα περιβάλλοντα Sandbox και Production στο APNS;

Sandbox — το δοκιμαστικό περιβάλλον APNS για αποσφαλμάτωση push ειδοποιήσεων. Production — το περιβάλλον παραγωγής για πραγματικούς χρήστες. Με Token-based αυθεντικοποίηση, ένα κλειδί λειτουργεί και για τα δύο περιβάλλοντα — το endpoint διαφέρει: api.sandbox.push.apple.com ή api.push.apple.com.

Πόσο συχνά ενημερώνεται το push token της συσκευής;

Το push token μπορεί να αλλάξει κατά: επαναφορά εφαρμογής από αντίγραφο ασφαλείας, επανεγκατάσταση εφαρμογής, ενημέρωση OS, επαναφορά ρυθμίσεων δικτύου. Το Token δεν αλλάζει κατά τις κανονικές ενημερώσεις εφαρμογής μέσω App Store. Ο διακομιστής πρέπει να χειρίζεται το σφάλμα BadDeviceToken (400) ως σήμα για διαγραφή του token.

Ποιο είναι το μέγιστο μέγεθος payload στο APNS;

4 KB (4096 byte) για κανονικές alert/background ειδοποιήσεις. Για VOIP ειδοποιήσεις μέσω PushKit — 5 KB (5120 byte). Η υπέρβαση του μεγέθους επιστρέφει σφάλμα PayloadTooLarge (413). Συνιστάται να διατηρείτε το payload ελάχιστο και να φορτώνετε επιπλέον δεδομένα μέσω διακομιστή.

Μπορώ να στείλω push χωρίς internet στη συσκευή;

Το APNS δεν μπορεί να παραδώσει ειδοποίηση σε συσκευή χωρίς σύνδεση στο διαδίκτυο. Εάν η συσκευή είναι εκτός σύνδεσης, το APNS αποθηκεύει το τελευταίο μήνυμα (ανά εφαρμογή ανά συσκευή) για έως 28 ημέρες. Κατά την αποκατάσταση της σύνδεσης, το μήνυμα παραδίδεται άμεσα. Παλαιότερα μηνύματα δεν αποθηκεύονται.

Σύνοψη

  • APNS — η υποδομική υπηρεσία της Apple για παράδοση push σε iOS, macOS, watchOS και tvOS
  • Push token — μοναδικό αναγνωριστικό συσκευής, που λαμβάνεται μέσω registerForRemoteNotifications
  • HTTP/2 — το σύγχρονο πρωτόκολλο APNS με πολυπλεξία, υποχρεωτικό από το 2020
  • Αυθεντικοποίηση — Token-based (p8) προτιμότερη από Certificate-based (.p12) λόγω διάρκειας ισχύος και ευελιξίας
  • Alert, Background, VOIP — τρεις τύποι push ειδοποιήσεων με διαφορετικούς κανόνες παράδοσης
  • Payload — JSON έως 4 KB με υποχρεωτικό λεξικό aps και προαιρετικά προσαρμοσμένα πεδία
  • Αποθήκευση — το APNS αποθηκεύει ένα τελευταίο μήνυμα έως 28 ημέρες για συσκευές εκτός σύνδεσης

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

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

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

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