Registration Token je jedinečný identifikátor zařízení, který Firebase Cloud Messaging (FCM) používá pro doručování push notifikací. Každá aplikace na každém zařízení získává vlastní token, bez kterého je odesílání notifikací nemožné. Podle Firebase, 2025 je Registration Token automaticky generován při prvním spuštění aplikace a může se za určitých podmínek změnit.
Hlavní body
Registration Token — jedinečný řetězec o délce až 4096 znaků, který Firebase Cloud Messaging přiděluje každé instanci aplikace. Token je vytvořen na základě identifikátoru aplikace, zařízení a účtu Google na zařízení.
Registration Token se skládá z náhodné sekvence znaků zakódovaných ve formátu Base64. FCM používá tento token jako doručovací adresu — serverová část odešle notifikaci na token a FCM ji směruje na konkrétní zařízení. Bez tokenu nelze adresovat push notifikaci konkrétnímu uživateli.
Registration Token by neměl být zaměňován s Device ID (IMEI) nebo Advertising ID. Device ID je hardwarový identifikátor zařízení a Advertising ID se používá pro reklamní účely. Registration Token je vázán na kombinaci aplikace a zařízení, přičemž jedno zařízení může mít několik tokenů pro různé aplikace.
| Identifikátor | Účel | Proměnlivost |
|---|---|---|
| Registration Token | Doručování push notifikací FCM | Může se změnit |
| Device ID (IMEI) | Identifikace zařízení | Trvalý |
| Advertising ID | Cílená reklama | Může být resetován |
| Instance ID | Zastaralý mechanismus Firebase | Měnil se při smazání |
FCM může prohlásit Registration Token za neplatný v několika situacích. Pokud je aplikace ze zařízení odstraněna, token je automaticky zneplatněn. Při obnovení dat ze zálohy na novém zařízení přestane starý token fungovat. Firebase vrací stav UNREGISTERED při pokusu o odeslání notifikace na zastaralý token.
Firebase Cloud Messaging generuje Registration Token při prvním spuštění aplikace, když je zavolána metoda getToken(). Proces zahrnuje ověření přihlašovacích údajů Google Play Services a registraci aplikace v infrastruktuře Firebase.
Když zařízení poprvé spustí aplikaci s integrovaným FCM SDK, dojde k následujícímu. Firebase SDK zkontroluje přítomnost Google Play Services na zařízení. Poté SDK odešle požadavek na servery Firebase, předávající identifikátor aplikace a informace o zařízení. Server Firebase vytvoří nový token a vrátí jej aplikaci.
FCM používá architekturu založenou na dlouhodobých připojeních. Po obdržení Registration Token zařízení vytvoří trvalé připojení k serverům Firebase prostřednictvím protokolu STOMP na Androidu nebo kanálu APNs na iOS. Když serverová část odešle notifikaci na token, FCM najde zařízení podle tokenu a předá užitečné zatížení.
Registration Token může být FCM regenerován v následujících případech. Při obnovení aplikace ze zálohy na novém zařízení. Při smazání a opětovné instalaci aplikace. Při vymazání dat aplikace prostřednictvím systémových nastavení. Při přihlášení k jinému účtu Google na zařízení. Firebase doporučuje vždy zpracovávat callback onNewToken pro sledování změn.
Na Androidu se Registration Token získává prostřednictvím Firebase Messaging SDK. Proces se liší pro různé verze SDK — v nových verzích se používá FirebaseInstallations API místo zastaralého FirebaseInstanceId.
Od Firebase SDK verze 21.0.0 je metoda getToken() volána prostřednictvím FirebaseMessaging. Tento přístup automaticky spravuje životní cyklus tokenu a přihlásí se k jeho aktualizacím.
class MyFirebaseMessagingService : FirebaseMessagingService() {
override fun onNewToken(token: String) {
sendRegistrationToServer(token)
}
private fun sendRegistrationToServer(token: String) {
// Odeslání tokenu na serverovou stranu
Log.d("FCM", "New token: $token")
}
init {
FirebaseMessaging.getInstance()
.getToken()
.addOnCompleteListener { task ->
if (!task.isSuccessful) {
Log.w("FCM", "Získání FCM tokenu se nezdařilo")
return@addOnCompleteListener
}
val token = task.result
sendRegistrationToServer(token)
}
}
}
V některých scénářích je token vyžadován nikoli ve službě, ale přímo v Activity nebo ViewModel. Za tímto účelem lze getToken() zavolat na vhodném místě životního cyklu aplikace. Je důležité nevolat tuto metodu z hlavního vlákna bez řešení asynchronnosti.
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")
}
}
}
}
Ve starých verzích Firebase SDK (před verzí 20.x) byl token získáván prostřednictvím FirebaseInstanceId.getInstance().getToken(). Tato metoda je označena jako deprecated a nedoporučuje se pro nové projekty. Vývojáři udržující legacy kód by měli migrovat na FirebaseInstallations API.
Na iOS se proces získání Registration Token architektonicky liší — FCM pracuje prostřednictvím Apple Push Notification service (APNs). Firebase SDK obdrží od APNs jedinečný device token, převede jej do formátu FCM a předá aplikaci.
Pro fungování FCM na iOS je třeba nakonfigurovat APNs certifikát nebo klíč v konzoli Firebase. Aplikace musí požádat o povolení pro notifikace prostřednictvím UNUserNotificationCenter. Po obdržení APNs tokenu Firebase SDK automaticky generuje 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 na iOS má menší velikost ve srovnání s tokenem Android, protože je založen na APNs device token. Firebase SDK automaticky aktualizuje FCM token při změně APNs tokenu, což nastává při obnovení zařízení ze zálohy nebo při přeinstalaci aplikace.
Správa životního cyklu Registration Token je kriticky důležitý úkol pro stabilní doručování push notifikací. Pokud serverová část ukládá zastaralý token, notifikace nebudou doručeny a Firebase vrátí chybu UNREGISTERED.
Firebase SDK nabízí dva mechanismy pro sledování změn tokenu. Na Androidu se používá callback onNewToken ve FirebaseMessagingService. Na iOS — delegát messaging:didReceiveRegistrationToken. Oba jsou volány při každé aktualizaci tokenu.
// Uložení tokenu do SharedPreferences a odeslání na server
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)
}
}
Serverová část by měla ukládat Registration Token ve spojení s identifikátorem uživatele. Při aktualizaci tokenu klient odešle nový token serveru a server nahradí starý. Doporučuje se uchovávat historii tokenů: pokud notifikace nebyla doručena na nový token, lze zkusit starý.
Firebase může vrátit chybu získání tokenu v několika případech. Absence Google Play Services na zařízení — token nebude získán. Překročení kvóty požadavků na FCM — je třeba implementovat exponenciální zpoždění při opakovaných pokusech. Vypršení tokenu — SDK automaticky požádá o nový.
| Situace | Výsledek | Akce vývojáře |
|---|---|---|
| Odstranění aplikace | Token zneplatněn | Odstranit token z databáze |
| Obnovení ze zálohy | Nový token | Aktualizovat v databázi |
| Reset Google Play Services | Token regenerován | Zpracovat onNewToken |
| Vypršení tokenu | Automatická aktualizace | Přihlásit se k aktualizacím |
Nejčastější dotazy
Zkontrolujte přítomnost Google Play Services na zařízení, správnost souboru google-services.json a verzi Firebase SDK. Ujistěte se, že aplikace má oprávnění k přístupu k internetu.
Token se může změnit při smazání a přeinstalaci aplikace, vymazání dat, obnovení ze zálohy nebo přihlášení k jinému účtu Google. Neexistuje pevný časový interval.
Ano, každá aplikace na zařízení získává vlastní FCM token. Pokud jsou na zařízení nainstalovány tři aplikace s Firebase, každá bude mít svůj vlastní jedinečný Registration Token.
Odešlete testovací notifikaci prostřednictvím konzole Firebase nebo FCM HTTP API. Pokud je token neplatný, API vrátí chybu UNREGISTERED nebo NOT_FOUND.
Registration Token není tajný klíč, ale jeho únik umožňuje odesílání notifikací na zařízení uživatele. Ukládejte tokeny v chráněné databázi a pro přenos používejte HTTPS.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také