Registration Token в push известията: какво е, начини за получаване и актуализиране

Автор: IT Sectr Публикувано: 2026-03-21 Време за четене: 8 мин

Registration Token е уникален идентификатор на устройството, който Firebase Cloud Messaging (FCM) използва за доставяне на push известия. Всяко приложение на всяко устройство получава собствен токен, без който изпращането на известия е невъзможно. Според Firebase, 2025, Registration Token се генерира автоматично при първото пускане на приложението и може да се променя при определени условия.

Основно

  • Registration Token — низ, който идентифицира инстанцията на приложението на конкретно устройство за FCM.
  • Токенът се генерира автоматично при първо пускане или след изтриване на данните на приложението.
  • FCM използва токена за насочване на push известия към правилното устройство.
  • Токенът може да се променя — приложението трябва да се абонира за актуализации чрез onNewToken.
  • За изпращане на известия, сървърната част трябва да съхранява актуалните токени на всички устройства.

Какво е 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 при опит за изпращане на известие на остарял токен.

Как FCM присвоява Registration Token

Firebase Cloud Messaging генерира Registration Token при първото пускане на приложението, когато се извиква методата getToken(). Процесът включва проверка на удостоверенията на Google Play Services и регистрация на приложението в инфраструктурата на Firebase.

Процес на регистрация на устройството

Когато устройството за първи път стартира приложението с интегриран FCM SDK, се случва следното. Firebase SDK проверява наличието на Google Play Services на устройството. След това SDK изпраща заявка до сървърите на Firebase, предавайки идентификатора на приложението и информация за устройството. Сървърът на Firebase създава нов токен и го връща на приложението.

Вътрешна механика на FCM

FCM използва архитектура, основана на дълготрайни връзки. След получаването на Registration Token, устройството установява постоянна връзка с сървърите на Firebase чрез STOMP протокол на Android или APNs канал на iOS. Когато сървърната част изпраща известие на токена, FCM намира устройството по токена и предава полезния товар.

Условия за регенериране на токена

Registration Token може да бъде регенериран от FCM в следните случаи. При възстановяване на приложението от резервно копие на ново устройство. При изтриване и повторно инсталиране на приложението. При изчистване на данните на приложението чрез системните настройки. При влизане в друг Google профил на устройството. Firebase препоръчва винаги да обработвате callback onNewToken за проследване на промените.

Получаване на Registration Token на Android

На Android Registration Token се получава чрез Firebase Messaging SDK. Процесът се различава за различни версии на SDK — в новите версии се използва FirebaseInstallations API вместо остарялото FirebaseInstanceId.

Съвременен начин чрез FirebaseInstallations

От Firebase SDK версия 21.0.0 нататък, методата getToken() се извиква чрез FirebaseMessaging. Този подход автоматично управлява животения цикъл на токена и се абонира за неговите актуализации.

kotlin
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

В някои сценарии токенът е нужен не в услугата, а директно в Activity или ViewModel. За тази цел getToken() може да бъде извикан на подходящо място в животения цикъл на приложението. Важно е да не извиквате този метод от основната нишка без обработка на асинхронността.

kotlin
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")
                }
            }
    }
}

Остарял метод FirebaseInstanceId

В старите версии на Firebase SDK (преди версия 20.x) токенът се получаваше чрез FirebaseInstanceId.getInstance().getToken(). Този метод е маркиран като deprecated и не се препоръчва за нови проекти. Разработчиците, които поддържат legacy код, трябва да мигрират към FirebaseInstallations API.

Получаване на Registration Token на iOS

На iOS процесът на получаване на Registration Token се различава архитектурно — FCM работи чрез Apple Push Notification service (APNs). Firebase SDK получава от APNs уникален device token, конвертира го в FCM формат и го предава на приложението.

Конфигуриране на APNs и получаване на токен

За работа на FCM на iOS трябва да се конфигурира APNs сертификат или ключ в конзолата на Firebase. Приложението трябва да изиска разрешение за известия чрез UNUserNotificationCenter. След получаването на APNs токен, Firebase SDK автоматично генерира Registration Token.

swift
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)
    }
}

Разлики между iOS и Android токен

Registration Token на iOS има по-малка големина в сравнение с Android токена, тъй като се базира на APNs device token. Firebase SDK автоматично актуализира FCM токена при промяна на APNs токена, което се случва при възстановяване на устройството от резервно копие или при повторно инсталиране на приложението.

Актуализиране и управление на Registration Token

Управлението на животения цикъл на Registration Token е критично важна задача за стабилното доставяне на push известия. Ако сървърната част съхранява остарял токен, известията няма да бъдат доставени и Firebase ще върне грешка UNREGISTERED.

Мониторинг на промените на токена

Firebase SDK предоставя два механизма за проследване на промените на токена. На Android се използва callback onNewToken в FirebaseMessagingService. На iOS — делегат messaging:didReceiveRegistrationToken. И двата се извикват при всяка актуализация на токена.

kotlin
// Запазване на токен в 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
Изтичане на токенаАвтоматично актуализиранеАбониране за актуализации

Често задавани въпроси

Какво да правя, ако Registration Token не е получен?

Проверете наличието на Google Play Services на устройството, правилността на файла google-services.json и версията на Firebase SDK. Убедете се, че приложението има разрешение за достъп до интернет.

Колко често се променя Registration Token?

Токенът може да се промени при премахване и повторно инсталиране на приложението, изчистване на данни, възстановяване от резервно копие или влизане в друг Google профил. Няма строг времеви интервал.

Може ли едно устройство да има няколко Registration Token?

Да, всяко приложение на устройството получава собствен FCM токен. Ако на устройството са инсталирани три приложения с Firebase, всяко ще има свой уникален Registration Token.

Как да проверя дали Registration Token е все още валиден?

Изпратете тестово известие чрез конзолата на Firebase или FCM HTTP API. Ако токенът е невалиден, API ще върне грешка UNREGISTERED или NOT_FOUND.

Безопасно ли е да се съхранява Registration Token на сървъра?

Registration Token не е тайн ключ, но неговото изтичане позволява изпращане на известия на устройството на потребителя. Съхранявайте токените в защитена база данни и използвайте HTTPS за пренос.

Обобщение

  • Registration Token — задължителен елемент за доставяне на push известия чрез Firebase Cloud Messaging.
  • Токенът се генерира автоматично при първото пускане на приложението с FCM SDK.
  • На Android токенът се получава чрез FirebaseMessaging.getInstance().getToken().
  • На iOS токенът се базира на APNs device token и се предава чрез делегат MessagingDelegate.
  • Токенът може да се променя — приложението трябва да обработва callback onNewToken.
  • Сървърната част трябва да съхранява актуални токени и да премахва остарялите при грешка UNREGISTERED.
  • За надеждно доставяне, внедрете мониторинг на промените на токена и механизъм за повторни опити при повреди.

Ще разработим мобилно приложение под ключ

IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.

Обсъдете проекта

Прочетете също