Registration Token, Firebase Cloud Messaging (FCM) tarafından push bildirimleri göndermek için kullanılan benzersiz bir cihaz tanımlayıcısıdır. Her cihazdaki her uygulama kendi token'ını alır ve bu token olmadan bildirim göndermek imkansızdır. Firebase, 2025'e göre, Registration Token uygulama ilk kez başlatıldığında otomatik olarak oluşturulur ve belirli koşullar altında değişebilir.
Önemli Noktalar
Registration Token, Firebase Cloud Messaging'in her uygulama örneğine atadığı 4096 karaktere kadar benzersiz bir dizedir. Token, uygulama kimliği, cihaz kimliği ve cihazdaki Google hesabı temel alınarak oluşturulur.
Registration Token, Base64 formatında kodlanmış rastgele bir karakter dizisinden oluşur. FCM bu token'ı teslimat adresi olarak kullanır — sunucu token'a bir bildirim gönderir ve FCM bunu belirli cihaza yönlendirir. Token olmadan belirli bir kullanıcıya push bildirimi göndermek imkansızdır.
Registration Token, Device ID (IMEI) veya Advertising ID ile karıştırılmamalıdır. Device ID cihazın donanım tanımlayıcısıdır, Advertising ID ise reklam amaçları için kullanılır. Registration Token, uygulama ve cihaz kombinasyonuna bağlıdır ve bir cihaz farklı uygulamalar için birden fazla token'a sahip olabilir.
| Tanımlayıcı | Amaç | Değişebilirlik |
|---|---|---|
| Registration Token | FCM push bildirimi teslimatı | Değişebilir |
| Device ID (IMEI) | Donanım tanımlama | Kalıcı |
| Advertising ID | Hedefli reklam | Sıfırlanabilir |
| Instance ID | Eski Firebase mekanizması | Silindiğinde değişirdi |
FCM, Registration Token'ı çeşitli durumlarda geçersiz sayabilir. Uygulama cihazdan kaldırılırsa, token otomatik olarak iptal edilir. Yeni bir cihazda yedekten veri geri yüklenirken eski token çalışmayı durdurur. Ayrıca, güncel olmayan bir token'a bildirim göndermeye çalışırken Firebase UNREGISTERED durumu döndürür.
Firebase Cloud Messaging, uygulama ilk kez başlatıldığında ve getToken() metodu çağrıldığında Registration Token oluşturur. Süreç, Google Play Services kimlik bilgilerinin doğrulanmasını ve uygulamanın Firebase altyapısına kaydedilmesini içerir.
Bir cihaz, entegre FCM SDK'ya sahip bir uygulamayı ilk kez çalıştırdığında şunlar olur. Firebase SDK, cihazda Google Play Services'in varlığını kontrol eder. Ardından SDK, uygulama kimliğini ve cihaz bilgilerini ileterek Firebase sunucularına bir istek gönderir. Firebase sunucusu yeni bir token oluşturur ve uygulamaya döndürür.
FCM, uzun ömürlü bağlantılara dayalı bir mimari kullanır. Registration Token alındıktan sonra, cihaz Android'de STOMP protokolü veya iOS'te APNs kanalı aracılığıyla Firebase sunucularıyla kalıcı bir bağlantı kurar. Sunucu token'a bir bildirim gönderdiğinde, FCM token ile cihazı bulur ve yükü teslim eder.
Registration Token aşağıdaki durumlarda FCM tarafından yeniden oluşturulabilir. Yeni bir cihazda yedekten uygulama geri yüklenirken. Uygulama silinip yeniden yüklendiğinde. Sistem ayarları aracılığıyla uygulama verileri temizlendiğinde. Cihazda farklı bir Google hesabına giriş yapıldığında. Firebase, değişiklikleri izlemek için her zaman onNewToken geri aramasının işlenmesini önerir.
Android'de, Registration Token Firebase Messaging SDK aracılığıyla alınır. Süreç SDK sürümüne göre farklılık gösterir — yeni sürümler, kullanımdan kaldırılan FirebaseInstanceId yerine FirebaseInstallations API'sini kullanır.
Firebase SDK sürüm 21.0.0'dan itibaren, getToken() metodu FirebaseMessaging aracılığıyla çağrılır. Bu yaklaşım, token yaşam döngüsünü otomatik olarak yönetir ve güncellemelerine abone olur.
class MyFirebaseMessagingService : FirebaseMessagingService() {
override fun onNewToken(token: String) {
sendRegistrationToServer(token)
}
private fun sendRegistrationToServer(token: String) {
// Token'ı sunucuya gönderme
Log.d("FCM", "New token: $token")
}
init {
FirebaseMessaging.getInstance()
.getToken()
.addOnCompleteListener { task ->
if (!task.isSuccessful) {
Log.w("FCM", "FCM token'ı alınamadı")
return@addOnCompleteListener
}
val token = task.result
sendRegistrationToServer(token)
}
}
}
Bazı senaryolarda, token serviste değil doğrudan bir Activity veya ViewModel'de gerekir. Bunun için, uygulama yaşam döngüsünde uygun bir noktada getToken() çağrılabilir. Eşzamansızlığı yönetmeden bu metodu ana iş parçacığından çağırmamak önemlidir.
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'nın eski sürümlerinde (20.x öncesi), token FirebaseInstanceId.getInstance().getToken() aracılığıyla alınırdı. Bu metod kullanımdan kaldırılmıştır ve yeni projelerde kullanılması önerilmez. Eski kodu koruyan geliştiriciler FirebaseInstallations API'sine geçiş yapmalıdır.
iOS'te, Registration Token alma süreci mimari olarak farklıdır — FCM, Apple Push Notification service (APNs) aracılığıyla çalışır. Firebase SDK, APNs'den benzersiz bir cihaz token'ı alır, FCM formatına dönüştürür ve uygulamaya iletir.
iOS'te FCM kullanmak için Firebase konsolunda bir APNs sertifikası veya anahtarı yapılandırılmalıdır. Uygulama, UNUserNotificationCenter aracılığıyla bildirim izni istemelidir. APNs token'ı alındıktan sonra Firebase SDK otomatik olarak Registration Token'ı oluşturur.
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'teki Registration Token, APNs cihaz token'ına dayandığı için Android token'ına kıyasla daha küçük boyuttadır. Firebase SDK, APNs token'ı değiştiğinde FCM token'ını otomatik olarak günceller; bu, bir cihazın yedekten geri yüklenmesi veya uygulamanın yeniden yüklenmesi sırasında gerçekleşir.
Registration Token'ın yaşam döngüsünü yönetmek, güvenilir push bildirimi teslimatı için kritik bir görevdir. Sunucu güncel olmayan bir token saklarsa, bildirimler teslim edilmez ve Firebase UNREGISTERED hatası döndürür.
Firebase SDK, token değişikliklerini izlemek için iki mekanizma sağlar. Android'de, FirebaseMessagingService'te onNewToken geri çağrısı kullanılır. iOS'te, messaging:didReceiveRegistrationToken delegesi kullanılır. Token her güncellendiğinde her ikisi de çağrılır.
// Token'ı SharedPreferences'a kaydetme ve sunucuya gönderme
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)
}
}
Sunucu, Registration Token'ı kullanıcı tanımlayıcısıyla ilişkili olarak saklamalıdır. Token güncellendiğinde, istemci sunucuya yeni token'ı gönderir ve sunucu eski olanı değiştirir. Token geçmişinin tutulması önerilir: yeni token'a bildirim teslim edilmezse, eski olan denenebilir.
Firebase, çeşitli durumlarda token alma hatası döndürebilir. Cihazda Google Play Services'in olmaması — token alınamaz. FCM'ye istek kotasının aşılması — yeniden denemelerde üstel geri çekilme uygulanmalıdır. Token'ın süresinin dolması — SDK otomatik olarak yeni bir tane ister.
| Durum | Sonuç | Geliştirici Eylemi |
|---|---|---|
| Uygulama silme | Token iptal edilir | Veritabanından token'ı sil |
| Yedekten geri yükleme | Yeni token | Veritabanında güncelle |
| Google Play Services sıfırlama | Token yeniden oluşturulur | onNewToken'ı işle |
| Token süresinin dolması | Otomatik güncelleme | Güncellemelere abone ol |
Sıkça Sorulan Sorular
Cihazda Google Play Services'in mevcut olup olmadığını kontrol edin, google-services.json dosyasının doğruluğunu ve Firebase SDK sürümünü kontrol edin. Uygulamanın internet iznine sahip olduğundan emin olun.
Token, uygulama kaldırılıp yeniden yüklendiğinde, veriler temizlendiğinde, yedekten geri yüklendiğinde veya farklı bir Google hesabına giriş yapıldığında değişebilir. Sabit bir zaman aralığı yoktur.
Evet, cihazdaki her uygulama kendi FCM token'ını alır. Bir cihazda Firebase kullanan üç uygulama varsa, her birinin kendi benzersiz Registration Token'ı olur.
Firebase konsolu veya FCM HTTP API aracılığıyla bir test bildirimi gönderin. Token geçersizse, API UNREGISTERED veya NOT_FOUND hatası döndürecektir.
Registration Token gizli bir anahtar değildir, ancak sızması kullanıcının cihazına bildirim gönderilmesine olanak tanır. Token'ları güvenli bir veritabanında saklayın ve iletim için HTTPS kullanın.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun