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 препоручује да увијек обрадјујете callback 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-у користи се callback 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. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође