Topic Subscription — Firebase Cloud Messaging mexanizmi bo'lib, u qurilmalarni qiziqishlariga ko'ra guruhlash va butun obunachilar toifalariga bildirishnomalar yuborish imkonini beradi. Minglab alohida Registration Token-ga yuborish o'rniga, bitta mavzuga bitta xabar yuborish kifoya. Firebase, 2025 ma'lumotlariga ko'ra, Topic Subscription yangilik ilovalarida, sport translatsiyalarida va marketing kampaniyalarida bildirishnomalarni ommaviy yetkazish uchun ishlatiladi.
Asosiy ma'lumotlar
Topic Subscription — qurilmalar nomlangan kanallarga (mavzularga) obuna bo'ladigan va shu kanallarga yuborilgan xabarlarni oladigan guruhli push-bildirishnoma mexanizmi. Har bir mavzu satr nomi bilan aniqlanadi, masalan news_sports yoki weather_alerts.
Qurilma mavzuga obuna bo'lganda, FCM uning Registration Token-ni shu mavzuning qabul qiluvchilar ro'yxatiga qo'shadi. Mavzuga xabar yuborilganda, FCM avtomatik ravishda har bir obuna qilingan qurilmaga nusxasini yetkazadi. Firebase bitta qurilmadagi obunalar sonini cheklamaydi — ilova foydalanuvchini bir vaqtning o'zida o'nlab mavzularga obuna qilishi mumkin.
Mavzularning asosiy afzalligi — masshtablashuvchanlik. Bir million foydalanuvchiga bildirishnoma yuborish uchun FCM-ga mavzu nomi bilan bitta HTTP so'rovi kifoya. Individual yuborishda bir million so'rov yoki har safar 500 token-gacha guruhli yuborish talab qilinadi. Mavzular, shuningdek, server qismining mantig'ini soddalashtiradi — har bir toifa uchun tokenlar ro'yxatini saqlash shart emas.
| Parametr | Individual yuborish | Topic Subscription |
|---|---|---|
| So'rovlar soni | Har bir token uchun bitta yoki guruhli 500-gacha | Har bir mavzu uchun bitta |
| Obuna boshqaruvi | Serverda (tokenlar ro'yxati) | Mijoz yoki serverda |
| Dinamik guruhlar | Ro'yxatni yangilash talab qiladi | Obuna orqali avtomatik |
| Qabul qiluvchilar chegarasi | Bitta so'rovda 500-gacha | Cheksiz |
Topic Subscription kontentni kategorizatsiya qilish uchun yangilik ilovalarida keng qo'llaniladi — "Sport", "Siyosat", "Texnologiyalar" mavzulariga obuna bo'lish tegishli bildirishnomalarni yetkazish imkonini beradi. E-commerce-da mavzular ma'lum mahsulot toifalaridagi chegirmalar haqida bildirishnomalar uchun ishlatiladi. Messenjerlarda va ijtimoiy tarmoqlarda mavzular guruhlardagi voqealar haqida xabarlar uchun qo'llaniladi.
Firebase mavzular bilan ishlashda cheklovlar o'rnatadi. Bitta ilova 2000 tagacha mavzuga ega bo'lishi mumkin. Har bir qurilma 2000 dan ko'p bo'lmagan mavzuga obuna bo'lishi mumkin. Obuna/obunani bekor qilish chastotasi ham cheklangan — loyiha uchun daqiqada 3000 dan ortiq bo'lmagan operatsiya. Limitlardan oshib ketish vaqtinchalik blokirovkaga olib keladi. Ko'p sonli mavzulari bo'lgan loyihalar uchun mavzu o'rniga shart (condition) ishlatish tavsiya etiladi — FCM nishonga olish uchun mantiqiy ifodalarni qo'llab-quvvatlaydi.
Topic Subscription jarayoni uch bosqichdan iborat: mijozda obunani boshlash, FCM infratuzilmasida ro'yxatdan o'tish va operatsiyani tasdiqlash. Muvaffaqiyatli obunadan so'ng, qurilma shu mavzuga yuborilgan xabarlarni qabul qila boshlaydi.
Mijoz subscribeToTopic() metodini chaqirganda, Firebase SDK FCM serverlariga so'rov yuboradi. Server operatsiyaning ruxsat etilganligini tekshiradi va qurilma tokenini mavzu obunachilari ro'yxatiga qo'shadi. FCM mijozga muvaffaqiyatli obuna haqida tasdiq qaytaradi. Shu paytdan boshlab, ushbu mavzuga barcha xabarlar qurilmaga yetkaziladi.
Mavzuni Firebase konsolida oldindan yaratish shart emas. Har qanday qurilma news_promo nomli mavzuga birinchi marta obuna bo'lganda, FCM uni avtomatik yaratadi. Agar oxirgi qurilma obunani bekor qilsa, mavzu tizimda qoladi, lekin faol bo'lmaydi va yangi obuna bilan ishni tiklaydi.
Android-da mavzularga obuna va obunani bekor qilish FirebaseMessaging SDK orqali amalga oshiriladi. subscribeToTopic() va unsubscribeFromTopic() metodlari parametr sifatida mavzu nomini qabul qiladi. Operatsiyalar asinxrondir va natijani qayta ishlashni talab qiladi.
Obuna bo'lish uchun maqsadli mavzu nomi bilan subscribeToTopic() chaqirish kifoya. Firebase SDK tarmoq so'rovlarini va nosozliklarda qayta urinishlarni mustaqil boshqaradi. Registration Token muvaffaqiyatli olingandan so'ng mavzularga obuna bo'lish tavsiya etiladi.
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", "Obuna bekor qilindi: ${task.isSuccessful}")
}
}
}
Haqiqiy ilovalarda foydalanuvchi bir nechta toifalarga obuna bo'lishi mumkin. Qulay boshqarish uchun obuna holatini server qismi bilan sinxronlashtiradigan boshqaruvchi sinf yarating. Foydalanuvchi tizimga kirganda, uning obunalarini profildan tiklang.
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 mavzuga obuna jarayoni mantiqan Android bilan bir xil, lekin Firebase Messaging-ning Swift API-sidan foydalanadi. subscribe va unsubscribe metodlari Messaging instansiyasida chaqiriladi va ular ham asinxrondir.
iOS ilovasida mavzuga obuna bo'lish uchun Messaging.subscribe() metodidan foydalaniladi. Obunani Firebase ishga tushirilgandan va Registration Token olingandan so'ng chaqirish muhimdir. Apple mavzularga obuna bo'lishdan oldin bildirishnomalar uchun ruxsat so'rashni tavsiya qiladi.
import FirebaseMessaging
class PushTopicManager {
func subscribeToTopic(topic: String) {
Messaging.messaging().subscribe(toTopic: topic) { error in
if let error = error {
Log.e("FCM", "Obuna xatosi: \(error)")
} else {
Log.d("FCM", "Obuna bo'lingan: \(topic)")
}
}
}
func unsubscribeFromTopic(topic: String) {
Messaging.messaging().unsubscribe(fromTopic: topic) { error in
if let error = error {
Log.e("FCM", "Obuna bekor qilish xatosi: \(error)")
}
}
}
}
iOS-da mavzuga obuna ham Firebase APNs-dan oladigan Registration Token bilan bog'lanadi. Agar APNs tokeni o'zgarsa (masalan, qurilma tiklangandan so'ng), Firebase avtomatik ravishda obunalarni yangi tokenga o'tkazadi. Biroq, kamdan-kam hollarda Registration Token yangilangandan so'ng qayta obuna talab qilinishi mumkin.
Server boshqaruvi obunalarni mijoz ilovasi ishtirokisiz qurilmalarni obuna qilish va obunani bekor qilish imkonini beradi. Bu administratsiya, A/B testlash va backend tomonda obunalarni boshqarish uchun foydalidir.
Firebase ommaviy obuna boshqaruvi uchun REST API taqdim etadi. /v1/projects/{project_id}/subscriptions metodi bitta so'rovda 1000 tagacha qurilmani obuna qilish imkonini beradi. API identifikatsiya uchun qurilmalarning Registration Token-laridan foydalanadi.
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("Obuna xatosi", error)
}
}
Server tomonidan obuna boshqaruvi bir nechta stsenariylarda qo'llaniladi. Foydalanuvchi ro'yxatdan o'tishda server uni avtomatik ravishda asosiy mavzularga obuna qiladi. Veb versiyada sozlamalar o'zgarganda server mobil qurilmadagi obunalarni sinxronlashtiradi. Administratorlar disk raskadrovka uchun test qurilmalarini ichki mavzularga obuna qilishi mumkin. Ommaviy operatsiyalar uchun FCM Instance Group metodini taqdim etadi, bu bir guruh identifikatori orqali qurilmalar guruhining obunalarini boshqarish imkonini beradi.
Firebase qurilmaning joriy obunalarini tekshirish uchun o'rnatilgan API taqdim etmaydi. Dasturchilarga o'z server tomonida obuna bazasini yuritish tavsiya etiladi. Ilovaning har bir ishga tushishida mijoz faol mavzular ro'yxatini yuborib, obunalarini server bilan sinxronlashtiradi. Bu desinxronizatsiyani aniqlash va kerak bo'lganda obunalarni tiklash imkonini beradi. Audit uchun Firebase Cloud Functions jurnallaridan foydalaning — har bir subscribe/unsubscribe operatsiyasi qayd etilishi mumkin.
Tez-tez beriladigan savollar
Maksimal mavzular soni — bitta ilova uchun 2000. Agar ko'proq kerak bo'lsa, Device Groups (qurilmalar guruhi) yoki tokenlar bo'yicha individual yuborishni ko'rib chiqing.
Firebase qurilmaning obuna ro'yxatini olish uchun to'g'ridan-to'g'ri API taqdim etmaydi. Dasturchilarga obuna holatini o'z serverida saqlash va uni mijoz bilan sinxronlashtirish tavsiya etiladi.
FCM muvaffaqiyatli natija qaytaradi. Firebase mavjud bo'lmagan mavzudan obunani bekor qilishni no-op operatsiyasi sifatida qayta ishlaydi — hech qanday xato yuzaga kelmaydi, holat o'zgarmaydi.
Ha, Firebase konsolida Cloud Messaging bo'limida mavzuni maqsadli auditoriya sifatida tanlab, veb interfeys orqali test yoki jonli bildirishnoma yuborishingiz mumkin.
Odatda obuna bir necha soniya ichida faollashadi. Biroq, kamdan-kam hollarda FCM serverlarida ma'lumot tarqalishi sababli kechikish 30–60 soniyagacha yetishi mumkin.
Yakuniy xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.