Firebase Cloud Messaging (FCM), mobil ve web uygulamaları için tasarlanmış, Google'a ait çapraz platform push bildirimi ve mesaj iletim hizmetidir. FCM, sürekli bir ağ bağlantısını sürdürme gereksinimi olmadan sunucu ve istemci cihazlar arasında güvenilir veri aktarımı sağlar. Firebase Documentation, 2026'ya göre, FCM altyapısı aracılığıyla dünya çapında her gün 300 milyardan fazla mesaj iletilmektedir. Hizmet, hem otomatik görüntülemeli bildirimleri hem de arka planda veri aktarımı için data mesajlarını destekler.
Temel Noktalar
Firebase Cloud Messaging, uygulama sunucusu ve istemci cihazlar arasında push bildirimleri ve data mesajlarının teslimatını sağlayan bir Google bulut hizmetidir. Hizmet, eski Google Cloud Messaging'in (GCM) yerini almış ve Firebase ekosisteminde push teslimi için standart çözüm haline gelmiştir. FCM; Android, iOS, Web ve Unity'yi destekleyerek hedef platformdan bağımsız birleşik bir gönderim arayüzü sağlar.
Hizmet, her biri belirli bir görevi çözen birkaç mesaj teslim mekanizması sunar. Notification mesajları alındığında sistem tarafından otomatik olarak görüntülenir — geliştiricinin bildirimi göstermek için kod yazması gerekmez. Data mesajları, anahtar-değer çiftleri olarak isteğe bağlı yük aktarır ve uygulama içinde işlenir. Birleşik mesajlar, maksimum esneklik için hem görünür hem de gizli bölümler içerir.
Kendi push sunucunuzu uygulamak, her cihazla sürekli bir TCP bağlantısını sürdürmeyi gerektirir; bu verimsiz ve güvensizdir. FCM, Google'ın aynı anda milyarlarca cihazla bağlantıyı sürdüren birleşik altyapısını kullanır. Hizmet, teslim yeniden denemelerini, mesaj kuyruklarını ve yük dengelemeyi otomatik olarak yöneterek geliştiriciyi bu görevleri kendi başına çözmekten kurtarır.
FCM mimarisi üç temel bileşenden oluşur: sağlayıcı sunucu (arka uç), Firebase Cloud Messaging sunucusu ve cihazdaki istemci uygulaması. Sunucu bir mesaj gönderdiğinde, önce FCM altyapısına ulaşır ve bu altyapı onu hedef cihaza yönlendirir. Cihaz çevrimdışıysa, FCM mesajı bir kuyrukta saklar ve bağlantı yeniden kurulduğunda teslim eder.
İlk başlatmada, uygulama Firebase SDK'yı çağırır; SDK, cihazı FCM hizmetine kaydeder ve benzersiz bir Registration Token alır. Bu token, yaklaşık 150 karakter uzunluğunda bir dizedir ve belirli bir cihazdaki belirli bir uygulama örneğini tanımlar. Token, uygulama yeniden yüklendiğinde, veriler temizlendiğinde veya yedekten geri yüklendiğinde değişebilir — geliştirici, token güncellemelerini onNewToken temsilcisi aracılığıyla işlemelidir.
Sunucu, FCM API aracılığıyla bir istek gönderdiğinde, mesaj birkaç aşamadan geçer. Alma ve doğrulama — FCM, isteğin doğruluğunu ve hedef cihazın varlığını kontrol eder. Kuyruk — cihaz kullanılamıyorsa, mesaj bir depolama kuyruğuna girer. Yönlendirme — FCM en uygun teslim kanalını (WiFi veya mobil veri) belirler. Teslim — sistem mesajı hedef uygulamaya iletir. Başarılı teslimden sonra FCM, sunucuya bir mesaj tanımlayıcısı döndürür.
Firebase Cloud Messaging, her biri istemci tarafında kendi işleme özelliklerine sahip üç mesaj türünü destekler. Notification mesajları, Android'de Google Play Services ve iOS'ta APNs tarafından işlenir ve otomatik olarak push bannerları olarak görüntülenir. Data mesajları doğrudan uygulamaya teslim edilir ve Android'de onMessageReceived geri çağrımı ve iOS'ta application(_:didReceiveRemoteNotification:) aracılığıyla işlenir.
Notification mesajı önceden tanımlanmış alanlar içerir: başlık, gövde, görsel URL'si ve bildirim sesi. Sistem otomatik olarak bildirimi sistem tepsisinde oluşturur ve görüntüler; uygulama arka planda veya sonlandırılmış olsa bile. Kullanıcı, başlık ve metin içeren standart bir banner görür ve dokunduğunda, uygulama yükte gönderilen verilerle açılır. Uygulama etkinse, notification mesajı yakalanabilir ve kodda işlenebilir.
Data mesajı, önceden tanımlanmış alanları olmayan özel bir anahtar-değer çiftleri kümesidir. Yük, sistem tarafından otomatik olarak işlenmez — uygulama ham verileri alır ve bunları isteğe bağlı olarak yorumlayabilir. Data mesajları, arka planda veri senkronizasyonu, yerel önbellek güncelleme, senkronizasyon tetikleyicisi veya bildirim göstermeden komut göndermek için kullanılır. Android'de, uygulama sonlandırılmış veya arka planda olsa bile data mesajı her zaman teslim edilir.
FCM, hem notification bölümü (görüntüleme için) hem de data bölümü (işleme için) içeren bir mesaj göndermeye olanak tanır. Birleşik yük, hem önceden tanımlanmış notification alanlarını hem de isteğe bağlı data anahtarlarını içerir. Sistem, notification bölümünden bildirimi görüntülerken, data bölümü açıldığında uygulamanın intent ekstralarına iletilir. Bu, kullanıcıya bir bildirim göstermeniz ve aynı anda belirli bir ekrana gitmek için bağlam iletmeniz gereken senaryolar için kullanışlıdır.
| Tür | Otomatik görüntüleme | Arka plan işleme | Örnek |
|---|---|---|---|
| Notification | Evet, sistem tarafından | Otomatik, kod gerekmez | Karşılama push bildirimi |
| Data | Hayır | Uygulama geri çağrımı yoluyla | Arka planda veri senkronizasyonu |
| Birleşik | Evet, notification bölümü | Açıldığında data bölümü | Bildirim + sipariş bağlantısı |
Android'de FCM entegrasyonu, uygulama seviyesinde build.gradle dosyası aracılığıyla Firebase SDK'nın bağlanmasıyla başlar. Bağımlılıklar ve google-services.json dosyası eklendikten sonra, uygulama otomatik olarak FirebaseMessagingService geri çağrımı yoluyla iletilen bir Registration Token alır. Bildirimleri almak için, FirebaseMessagingService'i genişleten bir hizmet oluşturmak ve bunu AndroidManifest.xml'de kaydetmek gerekir.
Firebase SDK bağlandıktan sonra, cihaz tokenı ek kod gerektirmeden otomatik olarak oluşturulur. Token, Task<String> döndüren FirebaseMessaging.getInstance().token aracılığıyla kullanılabilir. Token güncellemelerini izlemek için hizmette onNewToken yöntemi geçersiz kılınır. Sunucunun bu cihaza push bildirimi gönderebilmesi için token sağlayıcı sunucuya gönderilmelidir.
class MyFirebaseMessagingService :
FirebaseMessagingService() {
override fun onNewToken(token: String) {
sendTokenToServer(token)
}
override fun onMessageReceived(
message: RemoteMessage
) {
val data = message.data
val title = "Yeni mesaj"
val body = data["body"] ?: ""
showNotification(title, body)
}
}
FCM mesajlarını almak için hizmet, uygun intent-filter ile AndroidManifest.xml'de kaydedilmelidir. INTERNET izni ve belirtilen eylemle birlikte service etiketi ekleyin. Hizmet kaydı olmadan, mesajlar arka planda uygulamaya teslim edilmeyecektir. Android 13+'te bildirimleri görüntülemek için çalışma zamanı izni POST_NOTIFICATIONS gereklidir.
<!-- AndroidManifest.xml -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name=
"android.permission.POST_NOTIFICATIONS" />
<service
android:name=".MyFirebaseMessagingService"
android:exported="false">
<intent-filter>
<action android:name=
"com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
iOS'ta FCM entegrasyonu, hem Apple Push Notification Service (APNs) tarafında hem de Firebase Console'da yapılandırma gerektirir. FCM'nin bağlantıyı doğrudan yönettiği Android'in aksine, iOS'ta FCM, APNs'yi taşıma katmanı olarak kullanır. Uygulama, UIApplication.shared.registerForRemoteNotifications aracılığıyla push bildirimleri için kaydolur ve Firebase SDK, alınan cihaz tokenını yakalar ve bunu FCM Registration Token'a bağlar.
FCM'nin iOS'ta çalışması için Firebase Console'a bir APNs anahtarı veya sertifikası yüklenmelidir. APNs anahtarı, sertifikasız modern bir kimlik doğrulama yöntemidir (Apple tarafından önerilir). Anahtar, Apple Developer Portal'da Keys bölümünde oluşturulur ve Firebase Console'daki Cloud Messaging ayarlarına yüklenir. APNs yapılandırmasından sonra uygulama, UNUserNotificationCenter aracılığıyla bildirim izni ister ve APNs üzerinden kaydolur.
import Firebase
import UserNotifications
class AppDelegate: NSObject, UIApplicationDelegate {
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions
launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
FirebaseApp.configure()
UNUserNotificationCenter.current()
.requestAuthorization(options: [.alert, .sound, .badge])
application.registerForRemoteNotifications()
return true
}
func application(
_ application: UIApplication,
didRegisterForRemoteNotificationsWithDeviceToken
deviceToken: Data
) {
Messaging.messaging()
.apnsToken = deviceToken
}
}
Alınan bildirimleri işlemek için UNUserNotificationCenter temsilcisi uygulanır. willPresent yöntemi, uygulama etkinken bir bildirim alındığında çağrılır — burada özel bir uygulama içi bildirim gösterebilir veya sistem banner'ını yok sayabilirsiniz. didReceive yöntemi, kullanıcı bildirime dokunduğunda çağrılır — burada ilgili ekrana gidilir. Data mesajları için, arka planda bir FCM mesajı alındığında yükü alan MessagingDelegate kullanılır.
Sunucu tarafından gönderme FCM mesajları, Firebase Cloud Messaging'in HTTP v1 API'si veya eski Firebase Cloud Messaging API'si aracılığıyla gerçekleştirilir. HTTP v1 API önerilen yöntemdir, Service Account aracılığıyla OAuth 2.0 kimlik doğrulaması kullanır ve teslim analitiği ve bildirimlerin A/B testi dahil tüm modern FCM özelliklerini destekler. İstek, https://fcm.googleapis.com/v1/projects/{project_id}/messages:send uç noktasına POST yöntemiyle gönderilir.
İstek gövdesi, mesaj bilgilerini içeren bir JSON nesnesi içerir: hedef (token, konu veya koşul), notification (görüntüleme için) ve data (özel yük). Kimlik doğrulama, sunucu ortam değişkenlerine yüklenen bir Service Account JSON anahtarı aracılığıyla yapılır. Erişim tokenı, google-auth-library kullanılarak oluşturulur. Google, otomatik kimlik doğrulama yönetimi ve yeniden denemeler için Firebase Admin SDK'nın kullanılmasını önerir.
const admin = require("firebase-admin")
const serviceAccount = require("./serviceAccountKey.json")
admin.initializeApp({ credential: admin.credential.cert(serviceAccount) })
const message = {
token: "device_registration_token",
notification: { title: "%20 indirim", body: "Bugün tüm hizmetlerde" },
data: { screen: "promo", promoId: "324" },
android: { priority: "high" },
apns: { payload: { aps: { sound: "default" } } }
}
admin.messaging().send(message)
.then(response => {
console.log("Başarıyla gönderildi:", response)
})
.catch(error => {
console.log("Gönderme hatası:", error)
})
Bir kullanıcı grubuna bildirim göndermek için FCM, konu aboneliklerini destekler. Konu (topic), istemci uygulamasının FirebaseMessaging.getInstance().subscribeToTopic() aracılığıyla abone olduğu adlandırılmış bir kanaldır. Sunucu bir konuya mesaj gönderebilir ve bu mesaj abone olan tüm cihazlara teslim edilir. Konular, haber bültenleri, promosyon bildirimleri ve etkinlik tabanlı push'lar için uygundur. Daha hassas segmentasyon için, mantıksal operatörlerle birden çok konuya dayalı koşullar kullanılır.
Sıkça Sorulan Sorular
FCM, Android'de Google'ın kendi altyapısı üzerinden çalışırken, iOS'ta taşıma protokolü olarak APNs'yi kullanır. FCM, her iki platform için de birleşik bir API, otomatik çevrimdışı mesaj depolama ve teslim analitiği sağlar; bunlar saf APNs'de bulunmaz.
Evet, Firebase Console içindeki Cloud Messaging bölümü aracılığıyla seçili cihazlara, konulara veya hedef kitle segmentlerine manuel olarak bildirim gönderebilirsiniz. Bu özellik test ve tek seferlik gönderimler için uygundur ancak üretim uygulamaları için sunucu entegrasyonunun yerini almaz.
FirebaseMessagingService (Android) içindeki onNewToken veya MessagingDelegate (iOS) aracılığıyla token güncellemelerine abone olun. Token değiştiğinde, yeni token'ı sunucuya gönderin ve eskiyi kaldırın. Sunucu, veritabanını güncellemeli ve eski token'a gönderme girişimlerini durdurmalıdır.
FCM, mesajı 28 güne kadar bir kuyrukta saklar ve bağlantı yeniden kurulduğunda teslim eder. Notification mesajları için, her daraltma grubunda yalnızca son mesaj daraltılır. Data mesajları ayrı olarak saklanır ve daraltma olmadan gönderim sırasına göre teslim edilir.
FCM tamamen ücretsizdir ve mesaj sayısında herhangi bir sınırlama yoktur. FCM kullanımı, Spark planında veya Blaze planında ücretlendirilmez. Yalnızca yük boyutunda sınırlamalar vardır: notification mesajları için 4 KB'a kadar ve data mesajları için 2 KB'a kadar.
Ö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