Topic Subscription — cihazları maraqlarına görə qruplaşdırmağa və bütün abunəçi kateqoriyalarına bildiriş göndərməyə imkan verən Firebase Cloud Messaging mexanizmidir. Minlərlə fərdi Registration Token-a göndərmək əvəzinə, bir mövzuya bir mesaj göndərmək kifayətdir. Firebase, 2025 məlumatlarına görə, Topic Subscription xəbər tətbiqlərində, idman yayımlarında və marketinq kampaniyalarında bildirişlərin kütləvi çatdırılması üçün istifadə olunur.
Əsas məqamlar
Topic Subscription — cihazların adlandırılmış kanallara (mövzulara) abunə olduğu və bu kanallara göndərilən mesajları aldığı qrup push bildiriş mexanizmidir. Hər bir mövzu bir sətir adı ilə müəyyən edilir, məsələn news_sports və ya weather_alerts.
Cihaz bir mövzuya abunə olduqda, FCM onun Registration Token-nı bu mövzunun alıcılar siyahısına əlavə edir. Mövzuya mesaj göndərildikdə, FCM avtomatik olaraq hər bir abunə olunmuş cihaza surəti çatdırır. Firebase bir cihazdakı abunəlik sayını məhdudlaşdırmır — tətbiq istifadəçini eyni anda onlarla mövzuya abunə edə bilər.
Mövzuların əsas üstünlüyü miqyaslana bilməsidir. Bir milyon istifadəçiyə bildiriş göndərmək üçün FCM-ə mövzu adı ilə bir HTTP sorğusu kifayətdir. Fərdi göndərmədə bir milyon sorğu və ya hər dəfə 500 token-lik toplu göndərmə tələb olunardı. Mövzular həmçinin server hissəsinin məntiqini sadələşdirir — hər kateqoriya üçün token siyahılarını saxlamağa ehtiyac yoxdur.
| Parametr | Fərdi göndərmə | Topic Subscription |
|---|---|---|
| Sorğu sayı | Hər token üçün bir və ya toplu 500-ə qədər | Hər mövzu üçün bir |
| Abunəlik idarəsi | Serverdə (token siyahısı) | Müştəri və ya serverdə |
| Dinamik qruplar | Siyahı yenilənməsi tələb edir | Abunəlik vasitəsilə avtomatik |
| Alıcı limiti | Bir sorğuda 500-ə qədər | Limitsiz |
Topic Subscription məzmunu kateqoriyalaşdırmaq üçün xəbər tətbiqlərində geniş istifadə olunur — "İdman", "Siyasət", "Texnologiyalar" mövzularına abunəlik müvafiq bildirişlər çatdırmağa imkan verir. E-commerce-də mövzular müəyyən məhsul kateqoriyalarında endirimlər barədə bildirişlər üçün istifadə olunur. Messencerlərdə və sosial şəbəkələrdə mövzular qruplardakı hadisələr barədə xəbərdarlıqlar üçün tətbiq edilir.
Firebase mövzularla işə məhdudiyyətlər qoyur. Bir tətbiq 2000 mövzuya qədər sahib ola bilər. Hər bir cihaz 2000-dən çox olmayan mövzuya abunə ola bilər. Abunəlik/ləğv tezliyi də məhduddur — layihə başına dəqiqədə 3000-dən çox olmayan əməliyyat. Limitlərin aşılması müvəqqəti blokadaya səbəb olur. Çox sayda mövzusu olan layihələr üçün mövzu əvəzinə şərt (condition) istifadə etmək tövsiyə olunur — FCM hədəfləmə üçün məntiqi ifadələri dəstəkləyir.
Topic Subscription prosesi üç mərhələdən ibarətdir: müştəridə abunəliyin başladılması, FCM infrastrukturunda qeydiyyat və əməliyyatın təsdiqi. Uğurlu abunəlikdən sonra cihaz həmin mövzuya göndərilən mesajları almağa başlayır.
Müştəri subscribeToTopic() metodunu çağırdıqda, Firebase SDK FCM serverlərinə sorğu göndərir. Server əməliyyatın icazəliliyini yoxlayır və cihazın token-nı mövzunun abunəçilər siyahısına əlavə edir. FCM müştəriyə uğurlu abunəlik barədə təsdiq qaytarır. Bu andan etibarən həmin mövzuya bütün mesajlar cihaza çatdırılacaq.
Mövzunu Firebase konsolunda əvvəlcədən yaratmaq tələb olunmur. Hər hansı bir cihaz news_promo adlı mövzuya ilk dəfə abunə olduqda, FCM onu avtomatik yaradır. Son cihaz abunəliyi ləğv edərsə, mövzu sistemdə qalır, lakin qeyri-aktiv olur və yeni abunəlikdə işini bərpa edir.
Android-də mövzulara abunəlik və ləğv FirebaseMessaging SDK vasitəsilə həyata keçirilir. subscribeToTopic() və unsubscribeFromTopic() metodları parametr kimi mövzu adını qəbul edir. Əməliyyatlar asinxrondur və nəticənin işlənməsini tələb edir.
Abunə olmaq üçün hədəf mövzu adı ilə subscribeToTopic() çağırmaq kifayətdir. Firebase SDK şəbəkə sorğularını və nasazlıqlar zamanı təkrar cəhdləri müstəqil idarə edir. Registration Token uğurla alındıqdan sonra mövzulara abunə olmaq tövsiyə olunur.
class TopicSubscriber(private val context: Context) {
fun subscribeToNewsTopic() {
FirebaseMessaging.getInstance()
.subscribeToTopic("news_latest")
.addOnCompleteListener { task ->
val msg = if (task.isSuccessful) {
"Subscribed to news topic"
} else {
"Subscription failed"
}
Log.d("FCM", msg)
}
}
fun unsubscribeFromNewsTopic() {
FirebaseMessaging.getInstance()
.unsubscribeFromTopic("news_latest")
.addOnCompleteListener { task ->
Log.d("FCM", "Abunəlik ləğv edildi: ${task.isSuccessful}")
}
}
}
Real tətbiqlərdə istifadəçi bir neçə kateqoriyaya abunə ola bilər. Rahat idarəetmə üçün abunəlik vəziyyətini server hissəsi ilə sinxronlaşdıran menecer sinfi yaradın. İstifadəçi sistemə daxil olduqda onun abunəliklərini profildən bərpa edin.
class SubscriptionManager(private val context: Context) {
private val fcm = FirebaseMessaging.getInstance()
suspend fun syncSubscriptions(topics: List<String>) {
topics.forEach { topic ->
fcm.subscribeToTopic(topic).await()
}
}
suspend fun removeAllSubscriptions() {
val savedTopics = getSavedTopics()
savedTopics.forEach { topic ->
fcm.unsubscribeFromTopic(topic).await()
}
}
private fun getSavedTopics(): List<String> {
return listOf("news_latest", "promotions", "updates")
}
}
iOS-da mövzu abunəliyi prosesi məntiqən Android ilə eynidir, lakin Firebase Messaging-in Swift API-sindən istifadə edir. subscribe və unsubscribe metodları Messaging nümunəsində çağırılır və həmçinin asinxrondur.
iOS tətbiqində mövzuya abunə olmaq üçün Messaging.subscribe() metodundan istifadə olunur. Abunəliyi Firebase-in başladılması və Registration Token alındıqdan sonra çağırmaq vacibdir. Apple mövzulara abunə olmadan əvvəl bildirişlərə icazə istəməyi tövsiyə edir.
import FirebaseMessaging
class PushTopicManager {
func subscribeToTopic(topic: String) {
Messaging.messaging().subscribe(toTopic: topic) { error in
if let error = error {
Log.e("FCM", "Abunəlik xətası: \(error)")
} else {
Log.d("FCM", "Abunə olundu \(topic)")
}
}
}
func unsubscribeFromTopic(topic: String) {
Messaging.messaging().unsubscribe(fromTopic: topic) { error in
if let error = error {
Log.e("FCM", "Abunəliyin ləğvi xətası: \(error)")
}
}
}
}
iOS-da mövzu abunəliyi də Firebase-in APNs-dən aldığı Registration Token ilə əlaqələndirilir. APNs tokeni dəyişərsə (məsələn, cihaz bərpa edildikdən sonra), Firebase avtomatik olaraq abunəlikləri yeni tokenə köçürür. Bununla belə, nadir hallarda Registration Token yeniləndikdən sonra təkrar abunəlik tələb oluna bilər.
Server idarəsi abunəlikləri müştəri tətbiqi iştirak etmədən cihazları abunə etməyə və ləğv etməyə imkan verir. Bu, administrasiya, A/B testi və backend tərəfdə abunəliklərin idarə edilməsi üçün faydalıdır.
Firebase kütləvi abunəlik idarəsi üçün REST API təmin edir. /v1/projects/{project_id}/subscriptions metodu bir sorğuda 1000 cihaza qədər abunə olmağa imkan verir. API identifikasiya üçün cihazların Registration Token-nı istifadə edir.
const admin = require("firebase-admin")
async function subscribeUsersToTopic(tokens, topic) {
try {
const response = await admin
.messaging()
.subscribeToTopic(tokens, topic)
Log.info(`Success: ${response.successCount}`)
Log.info(`Failures: ${response.failureCount}`)
} catch (error) {
Log.error("Abunəlik xətası", error)
}
}
Server tərəfindən abunəlik idarəsi bir neçə ssenaridə tətbiq olunur. İstifadəçi qeydiyyatı zamanı server onu avtomatik olaraq əsas mövzulara abunə edir. Veb versiyada seçimlər dəyişdikdə server mobil cihazdakı abunəlikləri sinxronlaşdırır. Administratorlar debug üçün test cihazlarını daxili mövzulara abunə edə bilər. Kütləvi əməliyyatlar üçün FCM Instance Group metodunu təqdim edir ki, bu da bir qrup identifikatoru vasitəsilə cihaz qrupunun abunəliklərini idarə etməyə imkan verir.
Firebase cihazın cari abunəliklərini yoxlamaq üçün daxili API təmin etmir. Developerlərə öz server tərəfində abunəlik bazasını saxlamaq tövsiyə olunur. Tətbiqin hər başladılmasında müştəri aktiv mövzular siyahısını göndərərək abunəliklərini serverlə sinxronlaşdırır. Bu, desinxronizasiyanı aşkar etməyə və lazım olduqda abunəlikləri bərpa etməyə imkan verir. Audit üçün Firebase Cloud Functions loglarından istifadə edin — hər bir subscribe/unsubscribe əməliyyatı qeydə alına bilər.
Tez-tez verilən suallar
Maksimum mövzu sayı — bir tətbiq üçün 2000. Daha çox lazımdırsa, Device Groups (cihaz qrupları) və ya tokenlər üzrə fərdi göndərməyə baxın.
Firebase cihazın abunəlik siyahısını əldə etmək üçün birbaşa API təmin etmir. Developerlərə abunəlik vəziyyətini öz serverlərində saxlamaq və onu müştəri ilə sinxronlaşdırmaq tövsiyə olunur.
FCM uğurlu nəticə qaytarır. Firebase mövcud olmayan mövzudan abunəliyin ləğvini no-op əməliyyatı kimi emal edir — heç bir xəta yaranmır, vəziyyət dəyişmir.
Bəli, Firebase konsolunda Cloud Messaging bölməsində mövzunu hədəf auditoriya kimi seçib veb interfeys vasitəsilə test və ya canlı bildiriş göndərə bilərsiniz.
Adətən abunəlik bir neçə saniyə ərzində aktivləşir. Bununla belə, nadir hallarda FCM serverlərində məlumat yayılması səbəbindən gecikmə 30–60 saniyəyə çata bilər.
Yekun
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun