FCM (Firebase Cloud Messaging), push bildirimleri göndermek ve bir sunucu ile mobil uygulamalar arasında veri aktarmak için Google'ın çapraz platform hizmetidir. Tek bir API aracılığıyla Android, iOS ve web platformlarını destekler. Firebase Dokümantasyonu'na göre, FCM dünya çapında günlük 1 milyardan fazla mesaj işler.
Önemli Noktalar
Firebase Cloud Messaging (FCM), mobil cihazlara push bildirimleri ve veri mesajlarının güvenilir şekilde iletilmesini sağlayan Google'ın bulut hizmetidir. Daha önce Google Cloud Messaging (GCM) olarak bilinen FCM, Firebase ekosisteminde çapraz platform bildirimleri için birincil araç haline gelmiştir.
FCM, platforma bağlı olarak otomatik olarak en uygun teslimat kanalını seçer: Android'de kendi FCM bağlantısını kullanır; iOS'te APNS'yi (FCM ağ geçidi üzerinden) kullanır. Geliştiricinin iki farklı entegrasyon uygulaması gerekmez — FCM yönlendirmeyi halleder.
Hizmet, mesaj göndermek için birleşik bir REST API ve Admin SDK sağlar. Bu, belirli bir alıcı platformuna bağlı kalmadan sunucu tarafından bildirim gönderilmesine olanak tanır.
FCM birden çok teslimat modunu destekler: belirli bir cihaza tek mesaj, konuya göre grup yayını ve koşullara göre segmentli gönderme. Zamanlanmış gönderme ve bildirim içeriğinin A/B testi de mevcuttur.
FCM mimarisi üç bileşene dayanır: istemci uygulaması, Firebase Connection Server ve uygulama sunucusu. İstemci, başlangıçta FCM'ye kaydolur ve benzersiz bir kayıt tokeni alır — belirli bir uygulama için cihazı tanımlayan bir dize.
Uygulama sunucusu, alıcı tokenini veya konusunu belirterek FCM REST API'sine bir istek gönderir. Firebase Connection Server, kalıcı bir XMPP bağlantısı veya HTTP isteği kullanarak mesajı iletir. Cihaz çevrimdışıysa, mesaj sıraya alınır ve bağlantı yeniden kurulduğunda iletilir.
FCM, öncelikli kuyruklar ve bir onay mekanizması kullanarak teslimatı garanti eder. Android'de mesaj kuyrukta 28 güne kadar saklanır; iOS'te 4 haftaya kadar (APNS aracılığıyla). Son kullanma tarihinden sonra mesaj bildirimsiz silinir.
Kayıt tokeni birkaç durumda değişebilir: uygulama verileri geri yüklenirken, yeni bir sürüme güncellenirken veya önbellek temizlenirken. Uygulama, token güncellemelerini işlemek ve sunucuyla senkronize olmak için FirebaseMessagingService.onNewToken'ı uygulamalıdır.
FCM iki tür yükü destekler: notification ve data. Her tür, mesajın alıcı cihazda nasıl ve ne zaman işleneceğini belirler.
| Parametre | Notification | Data |
|---|---|---|
| Otomatik görüntüleme | Evet, uygulama arka plandaysa | Hayır, yalnızca uygulamada |
| İşleme | Sistem/NOS — arka planda; uygulama — ön planda | Her zaman uygulamada (onMessageReceived) |
| Maksimum boyut | 4 KB | 4 KB |
| Özel anahtarlar | Önceden tanımlanmış alanlarla sınırlı | Herhangi bir anahtar-değer çifti |
| CollapseKey gerektirir | İsteğe bağlı | Gruplama için isteğe bağlı |
Pratikte, uygulamanın onMessageReceived'de tam bildirim işleme ihtiyacı olduğunda data mesajlarının kullanılması önerilir. Notification mesajları, sistem görüntülemesinin yeterli olduğu basit senaryolar için uygundur.
FCM ve APNS iki ana push teslimat hizmetidir. FCM çapraz platform ağ geçidi olarak çalışırken, APNS yalnızca Apple ekosistemi içindir. Temel farklılıkları mimari, sertifika gereksinimleri ve yönlendirme mekanizmalarında yatmaktadır.
FCM ve doğrudan APNS arasındaki seçim proje mimarisine bağlıdır. Çapraz platform uygulamaları için FCM en uygun seçimdir. Yalnızca iOS projeleri için, HTTP/2 API aracılığıyla doğrudan APNS ile çalışmak kabul edilebilir.
FCM, proje aynı anda hem Android hem de iOS kullandığında ve ayrıca Firebase analitiği, bildirim A/B testi veya sunucu mantığı olmadan konular gerektiğinde uygundur. Doğrudan APNS, minimum bağımlılıklar ve katı teslimat gecikme gereksinimleri olan yalnızca iOS uygulamaları için tercih edilir.
FCM'yi bir Android uygulamasına bağlamak için Firebase SDK'sını eklemeniz ve proje kökünde google-services.json'ı yapılandırmanız gerekir. Token kaydından sonra uygulama, FirebaseMessagingService aracılığıyla mesaj almaya hazırdır.
// build.gradle (Module)
dependencies {
implementation("com.google.firebase:firebase-messaging:24.1.0")
}
// AndroidManifest.xml
<service android:name=".MyFirebaseMessagingService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
class MyFirebaseMessagingService :
FirebaseMessagingService() {
override fun onNewToken(token: String) {
sendTokenToServer(token)
}
override fun onMessageReceived(message: RemoteMessage) {
message.notification?.let {
showNotification(it.title, it.body)
}
}
}
Kurulumdan sonra uygulama, ilk başlatmada otomatik olarak bir FCM tokeni alır. Bu cihaza sonraki bildirim teslimatı için tokenin uygulama sunucusuna gönderilmesi gerekir.
Android 8+ üzerinde, otomatik görüntülemeli FCM bildirimi göndermeden önce bir NotificationChannel oluşturulmalıdır. FCM notification mesajları varsayılan kanal kimliğini kullanır, ancak ilk mesaj alındığında FirebaseMessagingService aracılığıyla özel bir kanal oluşturulması önerilir. Data mesajları kanal gerektirmez — uygulama bildirimi nasıl ve ne zaman göstereceğine kendisi karar verir.
iOS'te FCM, uygulama sunucusu ile APNS arasında bir aracı görevi görür. Firebase, sunucudan mesajı alır, APNS formatına sarar ve Apple ağ geçidi aracılığıyla gönderir. Geliştiricinin Firebase konsolunda bir APNS anahtarı veya sertifikası yapılandırması gerekir.
import FirebaseMessaging
import UserNotifications
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions options: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
FirebaseApp.configure()
UNUserNotificationCenter.current().delegate = self
Messaging.messaging().delegate = self
return true
}
}
extension AppDelegate: MessagingDelegate {
func messaging(
_ messaging: Messaging,
didReceiveRegistrationToken fcmToken: String?
) {
UserDefaults.standard.set(fcmToken, forKey: "fcm_token")
}
}
iOS'te APNS kaydı eşzamansız olarak gerçekleşir. FCM SDK otomatik olarak APNS tokenini alır ve Firebase sunucusuna iletir. didReceiveRegistrationToken, APNS tokenini proje tanımlayıcısıyla birleştiren yeni bir FCM tokeni alındığında tetiklenir.
FCM, teslimatı izlemek için bir Firebase konsolu sağlar: gönderilen, alınan ve görüntülenen bildirim sayısı. Sunucu tarafında teslimat hatalarını izlemek için Firebase Cloud Functions aracılığıyla bir durum geri araması da mevcuttur. Temel metrikler: bildirim gösterimleri ve açılmaları.
FCM ile çalışırken, her senaryo için doğru mesaj türünü seçmek önemlidir. Otomatik görüntülemeli basit bildirimler için notification mesajları kullanın. Uygulamanın görüntülemeden önce verileri işlemesi gereken durumlar için data mesajları kullanın. Karma tür (notification + data) yalnızca veriler bildirim içeriğini değiştirmek için değil, analitik için gerektiğinde önerilir.
Tokenları merkezi olarak yönetin. Geçerli tokenları sunucuda kullanıcıya ve platforma bağlı bir tabloda saklayın. Eski token temizleme mekanizması uygulayın: NotRegistered veya InvalidRegistration hatasıyla karşılaşıldığında, tokeni veritabanından silin. Tokenlar nadiren değişir, ancak temizlikleri FCM desteğinin zorunlu bir öğesidir.
Mesajları gruplamak için çökertme anahtarları (collapseKey) kullanın. Aynı türden birden çok bildirim gönderiyorsanız (örneğin, "döviz kuru güncellemesi"), aynı collapseKey'i ayarlayın. FCM gruptan yalnızca son mesajı ileterek cihaz yükünü azaltır ve kullanıcının bildirim yağmuruna tutulmasını önler.
Teslimatı Firebase Console ve Cloud Functions aracılığıyla izleyin. FCM analitiği, gönderilen, alınan ve görüntülenen bildirim sayısını gösterir. Görüntüleme oranı %70'in altındaysa, Android'de kanal ayarlarını ve iOS'te izin ayarlarını kontrol edin. Düşük teslimat genellikle devre dışı bırakılmış kanallar veya bildirim yasaklarıyla ilgilidir. Beşinci olarak: bildirim metnini ve gönderme zamanını optimize etmek için Firebase A/B testini kullanın — bu, Firebase verilerine göre açılma dönüşümünü %15–25 oranında artırır.
Sıkça sorulan sorular
FCM, GCM'nin (Google Cloud Messaging) evrimsel güncellemesidir. FCM, Firebase Console aracılığıyla basitleştirilmiş kurulum, yerleşik analitik, konular ve Web Push desteği sunar. GCM, Nisan 2019'da resmi olarak kullanımdan kaldırılmıştır ve tüm projeler FCM'ye taşınmalıdır.
Firebase Cloud Messaging, mesaj sayısında sınırlama olmayan ücretsiz bir hizmettir. Ödeme yalnızca Cloud Functions veya Firestore gibi diğer Firebase hizmetlerinin kullanımı için alınır. Temel bildirim teslimatı için FCM, Spark veya Blaze aboneliği gerektirmez.
FCM tokeni şu durumlarda değişir: uygulamanın yedekten geri yüklenmesi, uygulama verilerinin silinmesi, yeniden yükleme, değiştirilmiş Sender ID ile yeni bir sürüme güncelleme. Yeni tokeni sunucuya göndermek için FirebaseMessagingService'te her zaman onNewToken'ı işleyin.
Google FCM, Çin'de engellenmiştir. Çin'de bildirim teslimatı için alternatif hizmetler kullanılır: Huawei Push Kit, MiPush (Xiaomi), Oppo Push, Vivo Push. Çapraz platform teslimatı için Getui gibi çoklu sağlayıcı hizmetleri kullanılır.
Yerleşik Firebase konsolunu kullanın: "Cloud Messaging" — "Send Test Message" seçeneğini seçin. Bir test tokeni girin ve bir notification mesajı gönderin. Bildirim cihazda görünmelidir. Ayrıca FirebaseMessagingService.onMessageReceived günlüklerini de izleyebilirsiniz.
Ö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