Registration Token — унікальний ідентифікатор пристрою, який Firebase Cloud Messaging (FCM) використовує для доставки push-сповіщень. Кожен додаток на кожному пристрої отримує власний токен, без якого надсилання сповіщень неможливе. За даними Firebase, 2025, Registration Token автоматично генерується при першому запуску додатка і може змінюватися за певних умов.
Головне
Registration Token — це унікальний рядок довжиною до 4096 символів, який Firebase Cloud Messaging призначає кожному екземпляру додатка. Токен формується на основі ідентифікатора додатка, пристрою та облікового запису Google на пристрої.
Registration Token складається з випадкової послідовності символів, закодованих у форматі Base64. FCM використовує цей токен як адресу доставки — серверна частина надсилає сповіщення на токен, а FCM маршрутизує його на конкретний пристрій. Без токена неможливо адресувати push-сповіщення конкретному користувачеві.
Registration Token не слід плутати з Device ID (IMEI) або Advertising ID. Device ID — це апаратний ідентифікатор пристрою, а Advertising ID використовується для рекламних цілей. Registration Token прив'язаний саме до комбінації додатка та пристрою, причому один пристрій може мати кілька токенів для різних додатків.
| Ідентифікатор | Призначення | Змінюваність |
|---|---|---|
| Registration Token | Доставка push-сповіщень FCM | Може змінюватися |
| Device ID (IMEI) | Ідентифікація апарата | Постійний |
| Advertising ID | Таргетована реклама | Може бути скинутий |
| Instance ID | Застарілий механізм Firebase | Змінювався при видаленні |
FCM може визнати Registration Token недійсним у кількох ситуаціях. Якщо додаток видалено з пристрою, токен автоматично анулюється. При відновленні даних з резервної копії на новому пристрої старий токен перестає працювати. Також Firebase повертає статус UNREGISTERED при спробі надіслати сповіщення на застарілий токен.
Firebase Cloud Messaging генерує Registration Token при першому запуску додатка, коли викликається метод getToken(). Процес включає перевірку облікових даних Google Play Services та реєстрацію додатка в інфраструктурі Firebase.
Коли пристрій вперше запускає додаток з інтегрованим FCM SDK, відбувається наступне. Firebase SDK перевіряє наявність Google Play Services на пристрої. Потім SDK надсилає запит на сервери Firebase, передаючи ідентифікатор додатка та інформацію про пристрій. Сервер Firebase створює новий токен і повертає його додатку.
FCM використовує архітектуру, засновану на довгоживучих з'єднаннях. Після отримання Registration Token пристрій встановлює постійне з'єднання з серверами Firebase через STOMP-протокол на Android або APNs-канал на iOS. Коли серверна частина надсилає сповіщення на токен, FCM знаходить пристрій за токеном і передає корисне навантаження.
Registration Token може бути перегенерований FCM у наступних випадках. При відновленні додатка з резервної копії на новому пристрої. При видаленні та повторній установці додатка. При очищенні даних додатка через системні налаштування. При вході в інший обліковий запис Google на пристрої. Firebase рекомендує завжди обробляти колбек onNewToken для відстеження змін.
На Android Registration Token отримується через Firebase Messaging SDK. Процес відрізняється для різних версій SDK — у нових версіях використовується FirebaseInstallations API замість застарілого FirebaseInstanceId.
Починаючи з Firebase SDK версії 21.0.0, метод getToken() викликається через FirebaseMessaging. Цей підхід автоматично керує життєвим циклом токена та підписується на його оновлення.
class MyFirebaseMessagingService : FirebaseMessagingService() {
override fun onNewToken(token: String) {
sendRegistrationToServer(token)
}
private fun sendRegistrationToServer(token: String) {
// Надсилання токена на серверну частину
Log.d("FCM", "New token: $token")
}
init {
FirebaseMessaging.getInstance()
.getToken()
.addOnCompleteListener { task ->
if (!task.isSuccessful) {
Log.w("FCM", "Не вдалося отримати FCM токен")
return@addOnCompleteListener
}
val token = task.result
sendRegistrationToServer(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) токен отримувався через 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. Після отримання 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 має менший розмір порівняно з Android-токеном, оскільки базується на APNs device token. Firebase SDK автоматично оновлює FCM-токен при зміні APNs-токена, що відбувається при відновленні пристрою з резервної копії або переустановці додатка.
Керування життєвим циклом Registration Token — критично важливе завдання для стабільної доставки push-сповіщень. Якщо серверна частина зберігає застарілий токен, сповіщення не будуть доставлені, а Firebase поверне помилку UNREGISTERED.
Firebase SDK надає два механізми для відстеження змін токена. На Android використовується колбек onNewToken у FirebaseMessagingService. На iOS — делегат messaging:didReceiveRegistrationToken. Обидва викликаються при кожному оновленні токена.
// Збереження токена в 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 у зв'язці з ідентифікатором користувача. При оновленні токена клієнт надсилає на сервер новий токен, а сервер замінює старий. Рекомендується зберігати історію токенів: якщо сповіщення не доставлено на новий токен, можна спробувати старий.
Firebase може повернути помилку отримання токена в кількох випадках. Відсутність Google Play Services на пристрої — токен не буде отримано. Перевищення квоти запитів до FCM — необхідно впровадити експоненційну затримку при повторних спробах. Закінчення терміну дії токена — SDK автоматично запитує новий.
| Ситуація | Результат | Дія розробника |
|---|---|---|
| Видалення додатка | Токен анулюється | Видалити токен із бази |
| Відновлення з бекапу | Новий токен | Оновити в базі |
| Скидання Google Play Services | Токен перегенеровано | Обробити onNewToken |
| Закінчення терміну токена | Автоматичне оновлення | Підписатися на оновлення |
Часті запитання
Перевірте наявність Google Play Services на пристрої, правильність файлу google-services.json та версію Firebase SDK. Переконайтеся, що додаток має дозвіл на інтернет.
Токен може змінюватися при видаленні та повторній установці додатка, очищенні даних, відновленні з резервної копії або вході в інший обліковий запис Google. Жорсткого часового інтервалу немає.
Так, кожен додаток на пристрої отримує власний токен FCM. Якщо на пристрої встановлено три додатки з Firebase, кожен матиме свій унікальний Registration Token.
Надішліть тестове сповіщення через консоль Firebase або FCM HTTP API. Якщо токен недійсний, API поверне помилку UNREGISTERED або NOT_FOUND.
Registration Token не є секретним ключем, але його витік дозволяє надсилати сповіщення на пристрій користувача. Зберігайте токени в захищеній базі даних і використовуйте HTTPS для передачі.
Підсумки
Ми розробимо мобільний застосунок під ключ
IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.
Читайте також