Registration Token is een unieke apparaatidentificator die Firebase Cloud Messaging (FCM) gebruikt voor het leveren van pushmeldingen. Elke app op elk apparaat ontvangt zijn eigen token, zonder welke het verzenden van meldingen onmogelijk is. Volgens Firebase, 2025, wordt Registration Token automatisch gegenereerd bij de eerste start van de app en kan onder bepaalde omstandigheden veranderen.
Belangrijkste
Registration Token — een unieke reeks van maximaal 4096 tekens die Firebase Cloud Messaging aan elke app-instantie toewijst. Het token wordt gevormd op basis van de identificatie van de app, het apparaat en het Google-account op het apparaat.
Registration Token bestaat uit een willekeurige reeks tekens gecodeerd in Base64-formaat. FCM gebruikt dit token als leveringsadres — de serverzijde stuurt een melding naar het token en FCM routeert deze naar het specifieke apparaat. Zonder token is het onmogelijk een pushmelding aan een specifieke gebruiker te adresseren.
Registration Token moet niet worden verward met Device ID (IMEI) of Advertising ID. Device ID is een hardwarematige apparaatidentificator en Advertising ID wordt gebruikt voor reclamedoeleinden. Registration Token is gekoppeld aan de combinatie van app en apparaat, waarbij één apparaat meerdere tokens voor verschillende apps kan hebben.
| Identificator | Doel | Veranderlijkheid |
|---|---|---|
| Registration Token | Levering van FCM-pushmeldingen | Kan veranderen |
| Device ID (IMEI) | Apparaatidentificatie | Permanent |
| Advertising ID | Gerichte reclame | Kan worden gereset |
| Instance ID | Verouderd Firebase-mechanisme | Veranderde bij verwijdering |
FCM kan Registration Token in verschillende situaties als ongeldig beschouwen. Als de app van het apparaat wordt verwijderd, wordt het token automatisch ingetrokken. Bij het herstellen van gegevens uit een back-up op een nieuw apparaat, werkt het oude token niet meer. Firebase retourneert de status UNREGISTERED bij een poging een melding naar een verouderd token te sturen.
Firebase Cloud Messaging genereert Registration Token bij de eerste start van de app, wanneer de methode getToken() wordt aangeroepen. Het proces omvat verificatie van Google Play Services-referenties en registratie van de app in de Firebase-infrastructuur.
Wanneer het apparaat de app voor het eerst met geïntegreerde FCM SDK start, gebeurt het volgende. Firebase SDK controleert de aanwezigheid van Google Play Services op het apparaat. Vervolgens stuurt de SDK een verzoek naar Firebase-servers, waarbij de app-identificatie en apparaatinformatie worden doorgegeven. De Firebase-server maakt een nieuw token aan en retourneert dit aan de app.
FCM gebruikt een architectuur gebaseerd op langdurige verbindingen. Na ontvangst van Registration Token maakt het apparaat een permanente verbinding met Firebase-servers via STOMP-protocol op Android of APNs-kanaal op iOS. Wanneer de serverzijde een melding naar het token stuurt, vindt FCM het apparaat via het token en levert de payload.
Registration Token kan door FCM opnieuw worden gegenereerd in de volgende gevallen. Bij het herstellen van de app uit een back-up op een nieuw apparaat. Bij het verwijderen en opnieuw installeren van de app. Bij het wissen van app-gegevens via systeeminstellingen. Bij het inloggen op een ander Google-account op het apparaat. Firebase raadt aan altijd de callback onNewToken te verwerken om wijzigingen te volgen.
Op Android wordt Registration Token verkregen via de Firebase Messaging SDK. Het proces verschilt per SDK-versie — in nieuwere versies wordt FirebaseInstallations API gebruikt in plaats van de verouderde FirebaseInstanceId.
Vanaf Firebase SDK versie 21.0.0 wordt getToken() aangeroepen via FirebaseMessaging. Deze benadering beheert automatisch de levenscyclus van het token en abonneert zich op de updates ervan.
class MyFirebaseMessagingService : FirebaseMessagingService() {
override fun onNewToken(token: String) {
sendRegistrationToServer(token)
}
private fun sendRegistrationToServer(token: String) {
// Verzenden van token naar serverzijde
Log.d("FCM", "New token: $token")
}
init {
FirebaseMessaging.getInstance()
.getToken()
.addOnCompleteListener { task ->
if (!task.isSuccessful) {
Log.w("FCM", "Ophalen van FCM-token mislukt")
return@addOnCompleteListener
}
val token = task.result
sendRegistrationToServer(token)
}
}
}
In sommige scenario's is het token niet in de service nodig, maar direct in Activity of ViewModel. Hiervoor kan getToken() op een geschikte plaats in de levenscyclus van de app worden aangeroepen. Het is belangrijk deze methode niet vanuit de hoofdthread aan te roepen zonder asynchroniteit te verwerken.
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")
}
}
}
}
In oude versies van Firebase SDK (vóór versie 20.x) werd het token verkregen via FirebaseInstanceId.getInstance().getToken(). Deze methode is gemarkeerd als deprecated en wordt niet aanbevolen voor nieuwe projecten. Ontwikkelaars die legacy-code onderhouden, moeten migreren naar FirebaseInstallations API.
Op iOS verschilt het verkrijgingsproces architectonisch — FCM werkt via Apple Push Notification service (APNs). Firebase SDK ontvangt van APNs een unieke device token, converteert deze naar FCM-formaat en geeft deze door aan de app.
Voor FCM op iOS moet een APNs-certificaat of -sleutel worden geconfigureerd in de Firebase-console. De app moet toestemming vragen voor meldingen via UNUserNotificationCenter. Na ontvangst van de APNs-token genereert Firebase SDK automatisch 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 op iOS is kleiner in vergelijking met Android-token omdat het gebaseerd is op APNs device token. Firebase SDK werkt FCM-token automatisch bij bij wijziging van de APNs-token, wat gebeurt bij het herstellen van het apparaat uit een back-up of het herinstalleren van de app.
Levenscyclusbeheer van Registration Token is een kritieke taak voor stabiele levering van pushmeldingen. Als de serverzijde een verouderd token opslaat, worden meldingen niet bezorgd en retourneert Firebase de fout UNREGISTERED.
Firebase SDK biedt twee mechanismen voor het volgen van tokenwijzigingen. Op Android wordt callback onNewToken in FirebaseMessagingService gebruikt. Op iOS — de delegate messaging:didReceiveRegistrationToken. Beide worden aangeroepen bij elke tokenupdate.
// Opslaan van token in SharedPreferences en verzenden naar 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)
}
}
De serverzijde moet Registration Token opslaan in combinatie met de gebruikersidentificatie. Bij tokenupdate stuurt de client het nieuwe token naar de server en de server vervangt het oude. Het wordt aanbevolen de tokenhistorie te bewaren: als een melding niet op het nieuwe token is bezorgd, kan het oude worden geprobeerd.
Firebase kan in verschillende gevallen een fout bij het verkrijgen van het token retourneren. Afwezigheid van Google Play Services op het apparaat — het token wordt niet verkregen. Overschrijding van de FCM-verzoeklimiet — implementeer exponentiële vertraging bij herhaalde pogingen. Verlopen van het token — SDK vraagt automatisch een nieuw token aan.
| Situatie | Resultaat | Actie ontwikkelaar |
|---|---|---|
| App verwijderen | Token ingetrokken | Token uit database verwijderen |
| Herstellen uit back-up | Nieuw token | Bijwerken in database |
| Google Play Services resetten | Token geregenereerd | onNewToken verwerken |
| Token verlopen | Automatische update | Abonneren op updates |
Veelgestelde vragen
Controleer de aanwezigheid van Google Play Services op het apparaat, de juistheid van het bestand google-services.json en de versie van Firebase SDK. Zorg ervoor dat de app toestemming heeft voor toegang tot internet.
Het token kan veranderen bij verwijderen en herinstalleren van de app, wissen van gegevens, herstellen uit back-up of inloggen op een ander Google-account. Er is geen strikt tijdsinterval.
Ja, elke app op het apparaat ontvangt zijn eigen FCM-token. Als er drie apps met Firebase op het apparaat zijn geïnstalleerd, heeft elk zijn eigen unieke Registration Token.
Stuur een testmelding via de Firebase-console of FCM HTTP API. Als het token ongeldig is, retourneert de API de fout UNREGISTERED of NOT_FOUND.
Registration Token is geen geheime sleutel, maar het lekken ervan maakt het mogelijk meldingen naar het apparaat van de gebruiker te sturen. Bewaar tokens in een beveiligde database en gebruik HTTPS voor overdracht.
Samenvatting
We ontwikkelen een mobiele applicatie turnkey
IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.
Lees ook