Το Registration Token είναι ένα μοναδικό αναγνωριστικό συσκευής που χρησιμοποιεί το Firebase Cloud Messaging (FCM) για την παράδοση ειδοποιήσεων push. Κάθε εφαρμογή σε κάθε συσκευή λαμβάνει το δικό της token, χωρίς το οποίο η αποστολή ειδοποιήσεων είναι αδύνατη. Σύμφωνα με το Firebase, 2025, το Registration Token δημιουργείται αυτόματα κατά την πρώτη εκκίνηση της εφαρμογής και μπορεί να αλλάξει υπό ορισμένες συνθήκες.
Κύρια σημεία
Registration Token — ένα μοναδικό string μέχρι 4096 χαρακτήρων που το Firebase Cloud Messaging εκχωρεί σε κάθε στελέχος εφαρμογής. Το token διαμορφώνεται βάση του αναγνωριστικού της εφαρμογής, της συσκευής και του λογαριασμού Google στη συσκευή.
Το Registration Token αποτελείται από μια τυχαία ακολουθία χαρακτήρων κωδικοποιημένων σε μορφή Base64. Το FCM χρησιμοποιεί αυτό το token ως διεύθυνση παράδοσης — το μέρος του διακομιστή στέλνει ειδοποίηση στο token, και το FCM το διομολογεί στη συγκεκριμένη συσκευή. Χωρίς token, είναι αδύνατη η προώθηση μιας ειδοποίησης push σε έναν συγκεκριμένο χρήστη.
Το Registration Token δεν πρέπει να συγχέεται με το Device ID (IMEI) ή το Advertising ID. Το Device ID είναι ένα αναγνωριστικό υλικού της συσκευής, και το Advertising ID χρησιμοποιείται για διαφημιστικούς σκοπούς. Το Registration Token είναι δεσμευμένο στον συνδυασμό εφαρμογής και συσκευής, και μια συσκευή μπορεί να έχει πολλά token για διαφορετικές εφαρμογές.
| Αναγνωριστικό | Σκοπός | Μεταβλητότητα |
|---|---|---|
| Registration Token | Παράδοση ειδοποιήσεων push FCM | Μπορεί να αλλάξει |
| Device ID (IMEI) | Ταυτοποίηση συσκευής | Μόνιμο |
| Advertising ID | Στοχευμένη διαφήμιση | Μπορεί να επαναφερθεί |
| Instance ID | Απαρχαιωμένος μηχανισμός Firebase | Άλλαζε κατά τη διαγραφή |
Το FCM μπορεί να θεωρήσει το Registration Token άκυρο σε αρκετές περιπτώσεις. Εάν η εφαρμογή διαγραφεί από τη συσκευή, το token ακυρώνεται αυτόματα. Κατά την επαναφορά δεδομένων από αντιγραφή ασφαλείας σε νέα συσκευή, το παλιό token σταματά να λειτουργεί. Το Firebase επιστρέφει κατάσταση UNREGISTERED κατά την προσπάθεια αποστολής ειδοποίησης σε παλιό token.
Firebase Cloud Messaging δημιουργεί το Registration Token κατά την πρώτη εκκίνηση της εφαρμογής, όταν κληθεί η μέθοδος getToken(). Η διαδικασία περιλαμβάνει τον έλεγχο διαιτηρων Google Play Services και την εγγραφή της εφαρμογής στην υποδομή Firebase.
Όταν η συσκευή εκτελεί για πρώτη φορά την εφαρμογή με ενσωματωμένο FCM SDK, συμβαίνει το εξής. Το Firebase SDK ελέγχει την παρουσία των Google Play Services στη συσκευή. Στη συνέχεια, το SDK στέλνει ένα αίτημα στους διακομιστές Firebase, μεταβιβάζοντας το αναγνωριστικό της εφαρμογής και πληροφορίες συσκευής. Ο διακομιστής Firebase δημιουργεί ένα νέο token και το επιστρέφει στην εφαρμογή.
Το FCM χρησιμοποιεί μια αρχιτεκτονική βασισμένη σε μακρόχρονες συνδέσεις. Μετά την λήψη του Registration Token, η συσκευή δημιουργεί μία μόνιμη σύνδεση με τους διακομιστές Firebase μέσω πρωτοκόλου STOMP σε Android ή καναλιού APNs σε iOS. Όταν το μέρος του διακομιστή στέλνει μια ειδοποίηση στο token, το FCM βρίσκει τη συσκευή μέσω του token και παραδίδει το φορτίο.
Το Registration Token μπορεί να αναγεννηθεί από το FCM σε περίπτωση επαναφοράς της εφαρμογής από αντιγραφή σε νέα συσκευή. Κατά τη διαγραφή και επανεγκατάσταση της εφαρμογής. Κατά την εκκαθάριση δεδομένων της εφαρμογής μέσω ρυθμίσεων συστήματος. Κατά την είσοδο σε έναν άλλο λογαριασμό Google στη συσκευή. Το Firebase συνιστά να επεξεργάζεστε πάντα το callback onNewToken για την παρακολούθηση αλλαγών.
Σε Android, το Registration Token λαμβάνεται μέσω του Firebase Messaging SDK. Η διαδικασία διαφέρει για διαφορετικές εκδόσεις SDK — σε νέες εκδόσεις χρησιμοποιείται το FirebaseInstallations API αντί του απαρχαιωμένου FirebaseInstanceId.
Από την έκδοση Firebase SDK 21.0.0, η μέθοδος getToken() καλείται μέσω FirebaseMessaging. Αυτή η προσέγγιση διαχειρίζεται αυτόματα τον κύκλο ζωής του token και εγγράφεται σε ενημερώσεις αυτού.
class MyFirebaseMessagingService : FirebaseMessagingService() {
override fun onNewToken(token: String) {
sendRegistrationToServer(token)
}
private fun sendRegistrationToServer(token: String) {
// Αποστολή token στο διακομιστή
Log.d("FCM", "New token: $token")
}
init {
FirebaseMessaging.getInstance()
.getToken()
.addOnCompleteListener { task ->
if (!task.isSuccessful) {
Log.w("FCM", "Η λήψη του FCM token απέτυχε")
return@addOnCompleteListener
}
val token = task.result
sendRegistrationToServer(token)
}
}
}
Σε ορισμένα σενάρια, το token απαιτείται όχι σε υπηρεσία, αλλά απευθείας σε Activity ή ViewModel. Για αυτόν τον σκοπό, η getToken() μπορεί να κληθεί σε κατάλληλο σημείο του κύκλου ζωής της εφαρμογής. Είναι σημαντικό να μην καλείτε αυτήν τη μέθοδο από το κύριο νήμα χωρίς χειρισμό ασυγχρονίας.
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
getFCMToken()
}
private fun getFCMToken() {
FirebaseMessaging.getInstance().getToken()
.addOnCompleteListener { task ->
if (task.isSuccessful) {
val token = task.result
Log.d("FCM", "Token: $token")
}
}
}
}
Σε παλιές εκδόσεις του Firebase SDK (πριν την έκδοση 20.x), το token λαμβανόταν μέσω FirebaseInstanceId.getInstance().getToken(). Αυτή η μέθοδος έχει επισημανθεί ως deprecated και δεν συνιστάται για χρήση σε νέα έργα. Οι πραγματοποιοί που συντηρούν legacy κώδικα πρέπει να μεταναστεύσουν σε FirebaseInstallations API.
Σε iOS, η διαδικασία λήψης του Registration Token διαφέρει αρχιτεκτονικά — το FCM λειτουργεί μέσω της Apple Push Notification service (APNs). Το Firebase SDK λαμβάνει από το APNs ένα μοναδικό device token, το μετατρέπει σε μορφή FCM και το μεταβιβάζει στην εφαρμογή.
Για τη λειτουργία του FCM σε iOS, πρέπει να ρυθμίσετε ένα πιστοποιητικό APNs ή ένα κλειδί στην κονσόλα Firebase. Η εφαρμογή πρέπει να ζητήσει άδεια για ειδοποιήσεις μέσω UNUserNotificationCenter. Μετά την λήψη του token APNs, το Firebase SDK δημιουργεί αυτόματα το Registration Token.
import FirebaseMessaging
import UserNotifications
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(
application: UIApplication,
didFinishLaunchingWithOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
FirebaseApp.configure()
Messaging.messaging().delegate = self
requestNotificationAuthorization()
return true
}
private func requestNotificationAuthorization() {
let center = UNUserNotificationCenter.current()
center.requestAuthorization(options: [.alert, .sound, .badge])
}
}
extension AppDelegate: MessagingDelegate {
func messaging(
messaging: Messaging,
didReceiveRegistrationToken fcmToken: String?
) {
Log.d("FCM", "Token: \(fcmToken ?? "")")
sendTokenToServer(token: fcmToken)
}
}
Το Registration Token σε iOS έχει μικρότερο μέγεθος σε σύγκριση με το token Android, καθώς βασίζεται σε APNs device token. Το Firebase SDK ενημερώνει αυτόματα το FCM token κατά την αλλαγή του APNs token, κάτι που συμβαίνει κατά την επαναφορά της συσκευής από αντιγραφή ή την επανεγκατάσταση της εφαρμογής.
Διαχείριση κύκλου ζωής του Registration Token είναι μια κριτική εργασία για την σταθερή παράδοση ειδοποιήσεων push. Εάν το μέρος του διακομιστή αποθηκεύει ένα παλιό token, οι ειδοποιήσεις δεν θα παραδοθούν και το Firebase θα επιστρέψει σφάλμα UNREGISTERED.
Το Firebase SDK παρέχει δύο μηχανισμούς για την παρακολούθηση αλλαγών του token. Σε Android, χρησιμοποιείται το callback onNewToken στο FirebaseMessagingService. Σε iOS — ο αντιπρόσωπος messaging:didReceiveRegistrationToken. Και τα δύο καλούνται σε κάθε ενημέρωση του token.
// Αποθήκευση token στο SharedPreferences και αποστολή στο διακομιστή
class TokenManager(private val context: Context) {
companion object {
private const val PREFS_TOKEN_KEY = "fcm_registration_token"
}
fun saveToken(token: String) {
val prefs = PreferenceManager
.getDefaultSharedPreferences(context)
prefs.edit().putString(PREFS_TOKEN_KEY, token).apply()
}
fun getSavedToken(): String? {
val prefs = PreferenceManager
.getDefaultSharedPreferences(context)
return prefs.getString(PREFS_TOKEN_KEY, null)
}
}
Το μέρος του διακομιστή πρέπει να αποθηκεύει το Registration Token σε συνδυασμό με το αναγνωριστικό χρήστη. Κατά την ενημέρωση του token, ο πελάτης στέλνει νέο token στο διακομιστή, και ο διακομιστής αντικαθιστά το παλιό. Συνιστάται η τήρηση ιστορικού των token: εάν μια ειδοποίηση δεν παραδόθηκε σε νέο token, μπορείτε να δοκιμάσετε το παλιό.
Το Firebase μπορεί να επιστρέψει σφάλμα λήψης token σε αρκετές περιπτώσεις. Έλλειψη Google Play Services στη συσκευή — το token δεν θα ληφθεί. Υπέρβαση ορίου αιτημάτων FCM — πρέπει να εφαρμόσετε εκθετική καθυστέρηση σε επαναλήψεις. Λήξη του token — το SDK ζητά αυτόματα νέο.
| Κατάσταση | Αποτέλεσμα | Ενέργεια πραγματοποιού |
|---|---|---|
| Διαγραφή εφαρμογής | Token ακυρώνεται | Διαγραφή token από βάση δεδομένων |
| Επαναφορά από αντιγραφή | Νέο token | Ενημέρωση στη βάση δεδομένων |
| Επαναφορά Google Play Services | Token αναγεννήθηκε | Επεξεργασία onNewToken |
| Λήξη του token | Αυτόματη ενημέρωση | Εγγραφή σε ενημερώσεις |
Συχνές Ερωτήσεις
Ελέγξτε την παρουσία των Google Play Services στη συσκευή, την ορθότητα του αρχείου google-services.json και την έκδοση του Firebase SDK. Βεβαιωθείτε ότι η εφαρμογή έχει άδεια πρόσβασης στο διαδίκτυο.
Το token μπορεί να αλλάξει κατά τη διαγραφή και επανεγκατάσταση της εφαρμογής, εκκαθάριση δεδομένων, επαναφορά από αντιγραφή ή είσοδο σε έναν άλλο λογαριασμό Google. Δεν υπάρχει αυστηρό χρονικό διάστημα.
Ναι, κάθε εφαρμογή στη συσκευή λαμβάνει το δικό της FCM token. Εάν υπάρχουν τρεις εφαρμογές με Firebase στη συσκευή, κάθε μία θα έχει το δικό της μοναδικό Registration Token.
Στείλτε μια δοκιμαστική ειδοποίηση μέσω της κονσόλας Firebase ή FCM HTTP API. Εάν το token είναι άκυρο, το API θα επιστρέψει σφάλμα UNREGISTERED ή NOT_FOUND.
Το Registration Token δεν είναι μυστικό κλειδί, αλλά η διαρροή του επιτρέπει την αποστολή ειδοποιήσεων στη συσκευή του χρήστη. Αποθηκεύστε τα token σε προστατευμένη βάση δεδομένων και χρησιμοποιείτε HTTPS για μεταφορά.
Συμπεράσματα
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης