Device Token — είναι ένα μοναδικό αναγνωριστικό που εκχωρεί το APNS σε κάθε συσκευή iOS για τη δρομολόγηση push ειδοποιήσεων. Το token δημιουργείται από το σύστημα κατά την εγγραφή της εφαρμογής για λήψη ειδοποιήσεων και πρέπει να μεταφερθεί στον διακομιστή για την αποστολή push σε αυτήν ακριβώς τη συσκευή. Σύμφωνα με τα Apple Developer Documentation, 2026, το Device Token μπορεί να αλλάξει κατά την επανεγκατάσταση της εφαρμογής, την επαναφορά της συσκευής από αντίγραφο ασφαλείας ή την ενημέρωση iOS, επομένως ο διακομιστής πρέπει να ενημερώνει τακτικά τα tokens για να διασφαλίζει την παράδοση.
Κύρια σημεία
Device Token (token συσκευής) — είναι ένα μοναδικό αναγνωριστικό σε μορφή hex συμβολοσειράς, το οποίο το APNS (Apple Push Notification Service) δημιουργεί για κάθε εφαρμογή σε μια συσκευή iOS. Το token είναι το κλειδί μέσω του οποίου ο διακομιστής στέλνει push ειδοποιήσεις σε μια συγκεκριμένη συσκευή. Χωρίς ένα έγκυρο Device Token, ο διακομιστής δεν μπορεί να παραδώσει push — το APNS απορρίπτει το αίτημα με σφάλμα 400 BadRequest.
Το Device Token δημιουργείται από το σύστημα iOS κατά την πρώτη επικοινωνία της εφαρμογής με το APNS μετά την εγκατάσταση. Η διαδικασία δημιουργίας περιλαμβάνει κρυπτογραφική σύνδεση με το αναγνωριστικό της εφαρμογής (bundle ID) και το μοναδικό αναγνωριστικό της συσκευής (UID), μετά την οποία το APNS επιστρέφει στην εφαρμογή ένα 32-byte token σε hex μορφή (64 χαρακτήρες). Το token δεν είναι μόνιμο — το σύστημα μπορεί να δημιουργήσει ένα νέο υπό ορισμένες συνθήκες.
Όταν ο διακομιστής στέλνει μια push ειδοποίηση, συμπεριλαμβάνει το Device Token στο HTTP/2 αίτημα προς το APNS. Το APNS ελέγχει την εγκυρότητα του token: αν το token ανήκει σε διαφορετικό περιβάλλον (sandbox αντί για production), έχει λήξει ή έχει ανακληθεί, ο διακομιστής της Apple επιστρέφει σφάλμα 410 Gone ή 400 BadRequest. Μόνο μετά από επιτυχή επικύρωση του token, το APNS ξεκινά την παράδοση της ειδοποίησης στη συσκευή.
Το Device Token δεν πρέπει να συγχέεται με το IDFA (Identifier for Advertisers), το IDFV (Identifier for Vendor) ή το UID (Unique Device Identifier). IDFA και IDFV χρησιμοποιούνται για διαφήμιση και αναλυτικά, το UID είναι ο υλικός σειριακός αριθμός. Το Device Token υπάρχει αποκλειστικά για push ειδοποιήσεις και δεν αποκαλύπτει πληροφορίες για τον χρήστη ή τη συσκευή πέρα από το APNS.
| Αναγνωριστικό | Σκοπός | Μονιμότητα |
|---|---|---|
| Device Token | Δρομολόγηση push ειδοποιήσεων APNS | Μπορεί να αλλάξει |
| IDFA | Διαφήμιση και παρακολούθηση | Επαναφέρεται από τον χρήστη |
| IDFV | Αναγνώριση προμηθευτή (αναλυτικά) | Μόνιμο για εφαρμογές του ίδιου προγραμματιστή |
| Bundle ID | Μοναδικό αναγνωριστικό εφαρμογής | Μόνιμο |
Η διαδικασία λήψης του Device Token αποτελείται από πολλά υποχρεωτικά βήματα, ξεκινώντας από το αίτημα άδειας από τον χρήστη και καταλήγοντας στη μεταφορά του token στον διακομιστή. Κάθε βήμα είναι κρίσιμο — η παράλειψη οποιουδήποτε από αυτά οδηγεί σε αδυναμία αποστολής push ειδοποιήσεων στη συσκευή.
Το πρώτο βήμα είναι η εφαρμογή να ζητήσει από τον χρήστη άδεια αποστολής ειδοποιήσεων μέσω του UNUserNotificationCenter.current().requestAuthorization. Ο χρήστης μπορεί να συμφωνήσει, να αρνηθεί ή να επιλέξει προαιρετικές επιλογές (alert, badge, sound). Χωρίς ρητή συγκατάθεση του χρήστη, το σύστημα δεν θα εκδώσει Device Token, ακόμα κι αν η εφαρμογή καλέσει το registerForRemoteNotifications. Αφού λάβει την άδεια, η εφαρμογή καλεί το UIApplication.shared.registerForRemoteNotifications(), το οποίο εκκινεί τη διαδικασία εγγραφής στο APNS.
Μετά την εγγραφή, το APNS επιστρέφει το token μέσω του εκπροσώπου AppDelegate: application(_:didRegisterForRemoteNotificationsWithDeviceToken:). Η επιτυχής κλήση περιέχει ένα αντικείμενο Data με το token, το οποίο πρέπει να μετατραπεί σε hex συμβολοσειρά για μεταφορά στον διακομιστή. Σε περίπτωση σφάλματος, το σύστημα καλεί το application(_:didFailToRegisterForRemoteNotificationsWithError:) με περιγραφή του προβλήματος: εσφαλμένη ρύθμιση πιστοποιητικών, απουσία δικτύου ή λανθασμένη διαμόρφωση του έργου.
Αφού λάβει το token, η εφαρμογή πρέπει να το μεταφέρει αμέσως στον διακομιστή σας για αποθήκευση στη βάση δεδομένων. Το API αίτημα περιλαμβάνει το token, το αναγνωριστικό συσκευής (για αντιστοίχιση), το περιβάλλον (sandbox/production) και προαιρετικά πρόσθετα δεδομένα: έκδοση OS, μοντέλο συσκευής, γλώσσα. Συνιστάται η επανάληψη της μεταφοράς του token σε κάθε εκκίνηση της εφαρμογής, ώστε ο διακομιστής να έχει πάντα το πιο πρόσφατο token.
// Αίτηση άδειας και εγγραφή στο APNS
func registerForPushNotifications() {
UNUserNotificationCenter.current()
.requestAuthorization(options: [.alert, .sound, .badge]) {
[weak self] granted, error in
guard granted else {
print("Δεν δόθηκε άδεια")
return
}
DispatchQueue.main.async {
UIApplication.shared
.registerForRemoteNotifications()
}
}
}
// Λήψη Device Token από APNS
func application(
_ application: UIApplication,
didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data
) {
let tokenString = deviceToken
.map { String(format: "%02.2hhx", $0) }
.joined()
print("Device Token: \(tokenString)")
// Αποστολή token στον διακομιστή
PushTokenService.shared
.sendTokenToServer(tokenString) { success in
if success {
UserDefaults.standard.set(tokenString,
forKey: "lastDeviceToken")
}
}
}
Η πλευρά του διακομιστή του push συστήματος πρέπει να αποθηκεύει το Device Token στη βάση δεδομένων, συσχετισμένο με τον χρήστη και το περιβάλλον. Κατά την αποστολή ειδοποίησης, ο διακομιστής δημιουργεί ένα αίτημα προς το APNS, συμπεριλαμβάνοντας το token στο URL και ένα JWT token (ή πιστοποιητικό) για εξουσιοδότηση. Η σωστή διαχείριση tokens επηρεάζει κρίσιμα το ποσοστό παράδοσης push ειδοποιήσεων.
Ο πίνακας tokens στον διακομιστή πρέπει να περιέχει τουλάχιστον: Device Token (μοναδικό), αναγνωριστικό χρήστη, περιβάλλον (sandbox/production), ημερομηνία τελευταίας ενημέρωσης και κατάσταση (ενεργό/ανενεργό). Συνιστάται η προσθήκη ευρετηρίου για το token για γρήγορη αναζήτηση κατά την αποστολή και για τον χρήστη για λήψη λίστας όλων των συσκευών του χρήστη. Πολλές εφαρμογές επιτρέπουν σε έναν χρήστη να έχει πολλές συσκευές — η καθεμία με το δικό της token.
Για την αποστολή push ειδοποιήσεων, ο διακομιστής πρέπει να εξουσιοδοτήσει το αίτημα προς το APNS με δύο τρόπους. Certificate-based χρησιμοποιεί ένα SSL πιστοποιητικό που δημιουργείται στο Apple Developer Console. Token-based χρησιμοποιεί JWT (JSON Web Token) με κλειδί .p8, το οποίο ισχύει έως 30 ημέρες χωρίς ανάγκη ενημέρωσης πιστοποιητικού. Η εξουσιοδότηση βάσει token θεωρείται πιο σύγχρονη και συνιστάται από την Apple για νέα έργα.
Το αίτημα προς το APNS περιλαμβάνει HTTP/2 μέθοδο POST, URL με διαδρομή /3/device/{device_token}, κεφαλίδες εξουσιοδότησης και σώμα JSON με το payload. Η κεφαλίδα apns-topic περιέχει υποχρεωτικά το bundle ID της εφαρμογής. Το apns-priority καθορίζει την προτεραιότητα παράδοσης (5 — άμεσα, 10 — εξοικονόμηση μπαταρίας). Το apns-expiration ορίζει τον χρόνο σε δευτερόλεπτα από την εποχή, έως τον οποίο το APNS θα προσπαθεί να παραδώσει την ειδοποίηση.
// Παράδειγμα αποστολής push στο Node.js μέσω APNS HTTP/2
const http2 = require('http2');
const client = http2.connect('https://api.push.apple.com');
const deviceToken = 'abcdef0123456789...';
const payload = JSON.stringify({
"aps": { "alert": "Hello!", "sound": "default" }
});
const req = client.request({
':method': 'POST',
':path': `/3/device/${deviceToken}`,
'apns-topic': 'com.example.app',
'apns-priority': '10',
'apns-expiration': '0',
'authorization': `bearer ${jwtToken}`
});
req.write(payload);
req.end();
req.on('response', (headers) => {
if (headers[':status'] === '200') {
console.log('Το Push στάλθηκε επιτυχώς');
}
});
Κατά την αποστολή push ειδοποιήσεων σε μεγάλο αριθμό συσκευών, χρησιμοποιήστε μαζική αποστολή με έλεγχο ταχύτητας. Το APNS συνιστά να μην υπερβαίνετε τα 1500 αιτήματα ανά δευτερόλεπτο ανά σύνδεση. Όταν ξεπεραστεί το όριο, ο διακομιστής της Apple επιστρέφει σφάλμα 429 Too Many Requests. Για μαζικές αποστολές, χρησιμοποιήστε πολλαπλές συνδέσεις και κατανείμετε το φορτίο ομοιόμορφα στις συσκευές.
Το Device Token δεν είναι μόνιμο και μπορεί να αλλάξει σε διάφορα σενάρια, απαιτώντας από τον διακομιστή έναν μηχανισμό ενημέρωσης. Αν ο διακομιστής συνεχίσει να στέλνει push σε ένα παλιό token, το APNS επιστρέφει σφάλμα 410 Gone, υποδεικνύοντας ότι το token δεν είναι πλέον έγκυρο για αυτό το περιβάλλον.
Η Apple τεκμηριώνει αρκετά σενάρια κατά τα οποία το Device Token αλλάζει: ο χρήστης επανεγκαθιστά την εφαρμογή, επαναφέρει τη συσκευή από αντίγραφο ασφαλείας iCloud, εγκαθιστά μια νέα έκδοση iOS, καθώς και κατά την επαναφορά ρυθμίσεων δικτύου ή απορρήτου. Σε κάθε περίπτωση, η εφαρμογή κατά την επόμενη εκκίνηση θα λάβει ένα νέο token από το APNS. Ο διακομιστής πρέπει να ενημερώσει το token στη βάση δεδομένων, διαγράφοντας το παλιό και αποθηκεύοντας το νέο.
Όταν ο διακομιστής στέλνει push σε ένα παλιό token, το APNS επιστρέφει HTTP 410 με την κεφαλίδα apns-unless-timestamp. Αυτή η κεφαλίδα υποδεικνύει τον χρόνο από τον οποίο το token κατέστη άκυρο. Ο διακομιστής πρέπει άμεσα να διαγράψει ή να απενεργοποιήσει αυτό το token στη βάση δεδομένων, ώστε να μην στέλνει ξανά σε αυτό. Η αγνόηση του σφάλματος 410 οδηγεί σε σπατάλη πόρων και μείωση του ποσοστού παράδοσης.
Για τη διατήρηση της βάσης tokens σε ενημερωμένη κατάσταση, συνιστάται η εκτέλεση περιοδικού καθαρισμού. Το σενάριο καθαρισμού αναλύει τα αρχεία καταγραφής APNS των τελευταίων N ημερών, βρίσκει όλα τα tokens για τα οποία ελήφθη σφάλμα 410 και τα απενεργοποιεί στη βάση δεδομένων. Επιπλέον, μπορείτε να διαγράφετε tokens για τα οποία δεν υπήρξε δραστηριότητα χρήστη για περισσότερες από 90 ημέρες — είναι άχρηστες εγγραφές που αυξάνουν το μέγεθος της βάσης δεδομένων.
Πριν από τη μαζική αποστολή push ειδοποιήσεων (διανομή, προωθητική καμπάνια), συνιστάται ο προληπτικός έλεγχος εγκυρότητας των tokens. Το APNS δεν παρέχει άμεσο API για μαζική επικύρωση tokens, επομένως χρησιμοποιείται η στρατηγική αποστολής δοκιμαστικού push με χαμηλή προτεραιότητα και ανάλυση σφαλμάτων. Τα tokens που επιστρέφουν σφάλμα 410 εξαιρούνται από την κύρια αποστολή.
Ας δούμε τον πλήρη κύκλο λήψης Device Token σε Swift, συμπεριλαμβανομένης της διαχείρισης σφαλμάτων και της μεταφοράς στον διακομιστή. Ο κώδικας καλύπτει το αίτημα άδειας, την εγγραφή στο APNS, τη μετατροπή Data σε hex συμβολοσειρά, τη διαχείριση σφαλμάτων και την αποστολή του token στον δικό σας διακομιστή με επαναληπτικές προσπάθειες σε περίπτωση αποτυχίας.
import UIKit
import UserNotifications
final class PushNotificationManager: NSObject {
static let shared = PushNotificationManager()
private let apiClient = APIClient()
private var currentToken: String?
func register() {
UNUserNotificationCenter.current()
.requestAuthorization(
options: [.alert, .badge, .sound]) {
[weak self] granted, error in
guard granted else {
Analytics.log(
"Push permission denied")
return
}
DispatchQueue.main.async {
UIApplication.shared
.registerForRemoteNotifications()
}
}
}
func handleDeviceToken(_ tokenData: Data) {
let token = tokenData
.map { String(format: "%02.2hhx", $0) }
.joined()
guard token != currentToken else { return }
currentToken = token
sendTokenToServer(token)
}
func handleRegistrationError(_ error: Error) {
Analytics.log(
"Push registration failed: \(error)")
// Επανάληψη μετά από καθυστέρηση σε σφάλματα δικτύου
if let urlError = error as? URLError,
urlError.code == .notConnectedToInternet {
DispatchQueue.main.asyncAfter(
deadline: .now() + 10) { [weak self] in
self?.register()
}
}
}
private func sendTokenToServer(_ token: String) {
let body = PushTokenRequest(
token: token,
environment: Environment.current == .debug
? "sandbox" : "production",
osVersion: UIDevice.current.systemVersion,
locale: Locale.current.identifier
)
apiClient.sendToken(body) { [weak self] result in
if case .success = result {
self?.currentToken = token
}
}
}
}
Τα σφάλματα κατά την εγγραφή στο APNS μπορεί να προκληθούν από διάφορες αιτίες. Τα πιο συνηθισμένα είναι η απουσία δικτύου, η εσφαλμένη ρύθμιση πιστοποιητικών στο Xcode (π.χ. απενεργοποιημένη δυνατότητα Push Notifications), η χρήση εξομοιωτή (ο οποίος δεν υποστηρίζει push) ή λανθασμένο προφίλ προμήθειας. Στην παραγωγή, είναι σημαντικό να καταγράφετε τα σφάλματα και, αν είναι δυνατόν, να επαναλαμβάνετε την εγγραφή κατά την επόμενη εκκίνηση της εφαρμογής.
Ο iOS Simulator δεν υποστηρίζει τη λήψη πραγματικού Device Token. Για δοκιμή εγγραφής στον εξομοιωτή, χρησιμοποιήστε ελέγχους αρχιτεκτονικής i386: σε debug έκδοση μπορείτε να προσομοιώσετε τη λήψη token ή να χρησιμοποιήσετε UI δοκιμές με mock αντικείμενα. Η πραγματική δοκιμή push ειδοποιήσεων εκτελείται πάντα σε φυσική συσκευή συνδεδεμένη στο Xcode.
Συχνές ερωτήσεις
Ναι, το Device Token μπορεί να αλλάξει κατά την επανεγκατάσταση της εφαρμογής, την επαναφορά της συσκευής από αντίγραφο ασφαλείας ή την ενημέρωση iOS. Ο διακομιστής πρέπει να διαχειρίζεται τις ενημερώσεις tokens: όταν λαμβάνει ένα νέο token από μια γνωστή συσκευή — να αντικαθιστά το παλιό, όταν λαμβάνει σφάλμα 410 — να διαγράφει το token από τη βάση.
Το Device Token είναι μια 32-byte hex συμβολοσειρά από 64 χαρακτήρες σε πεζά γράμματα (0–9, a–f). Παράδειγμα: “a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2”. Το token μεταφέρεται ως Data από το APNS και μετατρέπεται σε συμβολοσειρά από την εφαρμογή.
Το Sandbox token εκδίδεται για εφαρμογές που έχουν μεταγλωττιστεί με προφίλ προμήθειας ανάπτυξης και λειτουργεί μόνο με το api.sandbox.push.apple.com. Το Production token — για App Store και TestFlight, λειτουργεί με το api.push.apple.com. Ο διακομιστής πρέπει να διακρίνει τα περιβάλλοντα και να στέλνει push στο αντίστοιχο APNS endpoint.
Το σφάλμα 410 Gone σημαίνει ότι το Device Token δεν είναι έγκυρο. Ο διακομιστής πρέπει άμεσα να διαγράψει αυτό το token από τη βάση δεδομένων και να σταματήσει τις προσπάθειες αποστολής σε αυτό. Η κεφαλίδα apns-unless-timestamp στην απάντηση υποδεικνύει από πότε το token σταμάτησε να λειτουργεί.
Ελέγξτε την κλήση του εκπροσώπου application(_:didRegisterForRemoteNotificationsWithDeviceToken:) στο AppDelegate. Αν η μέθοδος καλείται — το token ελήφθη. Χρησιμοποιήστε debugging logs ή OSLog για εμφάνιση του token στην κονσόλα Xcode. Σε φυσική συσκευή, ελέγξτε ότι το token αποστέλλεται στον διακομιστή μέσω του Network Link Conditioner.
Σύνοψη
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης