টপিক সাবস্ক্রিপশন হল Firebase Cloud Messaging-এর একটি পদ্ধতি যা আগ্রহ অনুযায়ী ডিভাইসগুলিকে গ্রুপ করতে এবং গ্রাহকদের সম্পূর্ণ বিভাগে বিজ্ঞপ্তি পাঠাতে দেয়। হাজার হাজার পৃথক Registration Token-এ পাঠানোর পরিবর্তে, একটি টপিকে একটি বার্তা পাঠানোই যথেষ্ট। Firebase, 2025 অনুসারে, টপিক সাবস্ক্রিপশন নিউজ অ্যাপ, স্পোর্টস সম্প্রচার এবং মার্কেটিং ক্যাম্পেইনে ব্যাপক বিজ্ঞপ্তি বিতরণের জন্য ব্যবহৃত হয়।
মূল পয়েন্ট
টপিক সাবস্ক্রিপশন হল একটি গ্রুপ পুশ বিজ্ঞপ্তি বিতরণ পদ্ধতি যেখানে ডিভাইসগুলি নামযুক্ত চ্যানেলে (টপিক) সাবস্ক্রাইব করে এবং সেই চ্যানেলগুলিতে পাঠানো বার্তা গ্রহণ করে। প্রতিটি টপিক একটি স্ট্রিং নাম দ্বারা চিহ্নিত করা হয়, যেমন news_sports বা weather_alerts।
যখন একটি ডিভাইস একটি টপিকে সাবস্ক্রাইব করে, FCM তার Registration Token টি সেই টপিকের প্রাপকদের তালিকায় যুক্ত করে। একটি টপিকে বার্তা পাঠানোর সময়, FCM স্বয়ংক্রিয়ভাবে প্রতিটি সাবস্ক্রাইব করা ডিভাইসে একটি কপি রুট করে। Firebase প্রতি ডিভাইসে সাবস্ক্রিপশনের সংখ্যা সীমাবদ্ধ করে না — একটি অ্যাপ ব্যবহারকারীকে একসাথে ডজন খানেক টপিকে সাবস্ক্রাইব করতে পারে।
টপিকগুলির প্রধান সুবিধা হল স্কেলেবিলিটি। দশ লক্ষ ব্যবহারকারীকে একটি বিজ্ঞপ্তি পাঠাতে, টপিকের নাম সহ FCM-এ শুধুমাত্র একটি HTTP অনুরোধ প্রয়োজন। পৃথক পাঠানোর জন্য দশ লক্ষ অনুরোধ বা একবারে 500 টোকেন পর্যন্ত ব্যাচ পাঠানো প্রয়োজন হবে। টপিকগুলি সার্ভার-সাইড লজিককেও সহজ করে — প্রতিটি বিভাগের জন্য টোকেন তালিকা সংরক্ষণের প্রয়োজন নেই।
| প্যারামিটার | পৃথক পাঠানো | টপিক সাবস্ক্রিপশন |
|---|---|---|
| অনুরোধের সংখ্যা | প্রতি টোকেনে একটি বা 500 পর্যন্ত ব্যাচ | প্রতি টপিকে একটি |
| সাবস্ক্রিপশন ব্যবস্থাপনা | সার্ভারে (টোকেন তালিকা) | ক্লায়েন্ট বা সার্ভারে |
| গতিশীল গ্রুপ | তালিকা আপডেট প্রয়োজন | সাবস্ক্রিপশনের মাধ্যমে স্বয়ংক্রিয় |
| প্রাপক সীমা | প্রতি অনুরোধে 500 পর্যন্ত | অসীম |
টপিক সাবস্ক্রিপশন নিউজ অ্যাপে বিষয়বস্তু শ্রেণীবিভাগের জন্য ব্যাপকভাবে ব্যবহৃত হয় — “খেলা”, “রাজনীতি”, “প্রযুক্তি” টপিকে সাবস্ক্রাইব করা প্রাসঙ্গিক বিজ্ঞপ্তি প্রদান করে। ই-কমার্সে, টপিকগুলি নির্দিষ্ট পণ্য বিভাগে ডিসকাউন্ট সম্পর্কে বিজ্ঞপ্তির জন্য ব্যবহৃত হয়। মেসেঞ্জার এবং সোশ্যাল নেটওয়ার্কে, টপিকগুলি গ্রুপে ইভেন্ট সম্পর্কে বিজ্ঞপ্তির জন্য ব্যবহৃত হয়।
Firebase টপিক নিয়ে কাজ করার উপর বিধিনিষেধ আরোপ করে। একটি অ্যাপে সর্বাধিক 2000 টপিক থাকতে পারে। প্রতিটি ডিভাইস সর্বাধিক 2000 টপিকে সাবস্ক্রাইব করতে পারে। সাবস্ক্রাইব/আনসাবস্ক্রাইব অপারেশনের ফ্রিকোয়েন্সিও সীমিত — প্রতি প্রকল্পে প্রতি মিনিটে 3000 অপারেশনের বেশি নয়। এই সীমা অতিক্রম করলে অস্থায়ী ব্লকিং হয়। প্রচুর সংখ্যক টপিকযুক্ত প্রকল্পের জন্য, টপিকের পরিবর্তে শর্ত (condition) ব্যবহার করার পরামর্শ দেওয়া হয় — FCM টার্গেটিংয়ের জন্য লজিক্যাল এক্সপ্রেশন সমর্থন করে।
টপিক সাবস্ক্রিপশন প্রক্রিয়াটি তিনটি ধাপ নিয়ে গঠিত: ক্লায়েন্টে সাবস্ক্রিপশন শুরু করা, FCM পরিকাঠামোতে নিবন্ধন এবং অপারেশন নিশ্চিতকরণ। সফল সাবস্ক্রিপশনের পরে, ডিভাইসটি সেই টপিকে পাঠানো বার্তা গ্রহণ করা শুরু করে।
যখন ক্লায়েন্ট subscribeToTopic() মেথড কল করে, Firebase SDK FCM সার্ভারে একটি অনুরোধ পাঠায়। সার্ভার অপারেশনের বৈধতা পরীক্ষা করে এবং টপিকের সাবস্ক্রাইবার তালিকায় ডিভাইস টোকেন যুক্ত করে। FCM ক্লায়েন্টকে সফল সাবস্ক্রিপশনের নিশ্চিতকরণ ফেরত দেয়। এই মুহূর্ত থেকে, এই টপিকের সমস্ত বার্তা ডিভাইসে বিতরণ করা হবে।
Firebase কনসোলে আগে থেকে টপিক তৈরি করার প্রয়োজন নেই। যখন প্রথম ডিভাইসটি news_promo নামে একটি টপিকে সাবস্ক্রাইব করে, FCM স্বয়ংক্রিয়ভাবে এটি তৈরি করে। যদি শেষ ডিভাইসটি আনসাবস্ক্রাইব করে, টপিকটি সিস্টেমে থাকে তবে নিষ্ক্রিয় থাকে এবং নতুন সাবস্ক্রিপশন হলে আবার কাজ শুরু করে।
Android-এ, টপিকে সাবস্ক্রাইব এবং আনসাবস্ক্রাইব করা FirebaseMessaging SDK-এর মাধ্যমে করা হয়। subscribeToTopic() এবং unsubscribeFromTopic() মেথডগুলি প্যারামিটার হিসাবে টপিকের নাম নেয়। অপারেশনগুলি অ্যাসিনক্রোনাস এবং ফলাফল প্রক্রিয়াকরণ প্রয়োজন।
সাবস্ক্রাইব করতে, লক্ষ্য টপিকের নাম সহ subscribeToTopic() কল করাই যথেষ্ট। Firebase SDK স্বয়ংক্রিয়ভাবে নেটওয়ার্ক অনুরোধ এবং ব্যর্থতায় পুনরায় চেষ্টা পরিচালনা করে। সফলভাবে Registration Token পাওয়ার পরে টপিকে সাবস্ক্রাইব করার পরামর্শ দেওয়া হয়।
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", "আনসাবস্ক্রাইব করা হয়েছে: ${task.isSuccessful}")
}
}
}
বাস্তব অ্যাপে, একজন ব্যবহারকারী বেশ কয়েকটি বিভাগে সাবস্ক্রাইব করতে পারে। সুবিধাজনক পরিচালনার জন্য, একটি ম্যানেজার ক্লাস তৈরি করুন যা সার্ভার সাইডের সাথে সাবস্ক্রিপশনের অবস্থা সিঙ্ক্রোনাইজ করে। যখন ব্যবহারকারী লগ ইন করে, তাদের প্রোফাইল থেকে তাদের সাবস্ক্রিপশন পুনরুদ্ধার করুন।
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-এ, টপিক সাবস্ক্রিপশন প্রক্রিয়াটি লজিকে Android-এর মতোই কিন্তু Swift Firebase Messaging API ব্যবহার করে। subscribe এবং unsubscribe মেথডগুলি Messaging ইনস্ট্যান্সে কল করা হয় এবং এগুলিও অ্যাসিনক্রোনাস।
iOS অ্যাপে একটি টপিকে সাবস্ক্রাইব করতে, Messaging.subscribe() মেথড ব্যবহার করুন। Firebase আরম্ভকরণ এবং Registration Token পাওয়ার পরে সাবস্ক্রিপশন কল করা গুরুত্বপূর্ণ। Apple টপিকে সাবস্ক্রাইব করার আগে বিজ্ঞপ্তির অনুমতি চাওয়ার পরামর্শ দেয়।
import FirebaseMessaging
class PushTopicManager {
func subscribeToTopic(topic: String) {
Messaging.messaging().subscribe(toTopic: topic) { error in
if let error = error {
Log.e("FCM", "সাবস্ক্রিপশন ত্রুটি: \(error)")
} else {
Log.d("FCM", "সাবস্ক্রাইব করা হয়েছে \(topic)")
}
}
}
func unsubscribeFromTopic(topic: String) {
Messaging.messaging().unsubscribe(fromTopic: topic) { error in
if let error = error {
Log.e("FCM", "আনসাবস্ক্রাইব ত্রুটি: \(error)")
}
}
}
}
iOS-এ, টপিক সাবস্ক্রিপশন Registration Token-এর সাথেও সংযুক্ত থাকে যা Firebase APNs থেকে গ্রহণ করে। যদি APNs টোকেন পরিবর্তিত হয় (যেমন, ডিভাইস পুনরুদ্ধারের পরে), Firebase স্বয়ংক্রিয়ভাবে সাবস্ক্রিপশনগুলি নতুন টোকেনে স্থানান্তর করে। তবে, বিরল ক্ষেত্রে, Registration Token আপডেটের পরে পুনরায় সাবস্ক্রিপশনের প্রয়োজন হতে পারে।
সার্ভার-সাইড পরিচালনা ক্লায়েন্ট অ্যাপকে জড়িত না করেই ডিভাইসগুলিকে সাবস্ক্রাইব এবং আনসাবস্ক্রাইব করতে দেয়। এটি প্রশাসন, A/B পরীক্ষা এবং ব্যাকএন্ডে সাবস্ক্রিপশন পরিচালনার জন্য দরকারী।
Firebase ব্যাপক সাবস্ক্রিপশন পরিচালনার জন্য REST API সরবরাহ করে। /v1/projects/{project_id}/subscriptions এন্ডপয়েন্ট একটি অনুরোধে 1000 ডিভাইস পর্যন্ত সাবস্ক্রাইব করার অনুমতি দেয়। API শনাক্তকরণের জন্য ডিভাইসের Registration Token ব্যবহার করে।
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("সাবস্ক্রিপশন ত্রুটি", error)
}
}
সার্ভার-সাইড সাবস্ক্রিপশন পরিচালনা বিভিন্ন পরিস্থিতিতে ব্যবহৃত হয়। যখন একজন ব্যবহারকারী নিবন্ধন করে, সার্ভার স্বয়ংক্রিয়ভাবে তাদের মৌলিক টপিকে সাবস্ক্রাইব করে। যখন ওয়েব সংস্করণে পছন্দ পরিবর্তিত হয়, সার্ভার মোবাইল ডিভাইসে সাবস্ক্রিপশন সিঙ্ক্রোনাইজ করে। প্রশাসকরা ডিবাগিংয়ের জন্য পরীক্ষার ডিভাইসগুলিকে অভ্যন্তরীণ টপিকে সাবস্ক্রাইব করতে পারেন। ব্যাপক অপারেশনের জন্য, FCM Instance Group পদ্ধতি সরবরাহ করে, যা একটি একক গ্রুপ শনাক্তকারীর মাধ্যমে ডিভাইসগুলির একটি গ্রুপের সাবস্ক্রিপশন পরিচালনা করতে দেয়।
Firebase একটি ডিভাইসের বর্তমান সাবস্ক্রিপশন পরীক্ষা করার জন্য বিল্ট-ইন API সরবরাহ করে না। ডেভেলপারদের সার্ভার সাইডে তাদের নিজস্ব সাবস্ক্রিপশন ডাটাবেস বজায় রাখার পরামর্শ দেওয়া হয়। প্রতিটি অ্যাপ লঞ্চে, ক্লায়েন্ট সক্রিয় টপিকের তালিকা পাঠিয়ে সার্ভারের সাথে তার সাবস্ক্রিপশন সিঙ্ক্রোনাইজ করে। এটি ডিসিঙ্ক্রোনাইজেশন সনাক্ত করতে এবং প্রয়োজন হলে সাবস্ক্রিপশন পুনরুদ্ধার করতে সহায়তা করে। অডিটের জন্য, Firebase Cloud Functions লগ ব্যবহার করুন — প্রতিটি subscribe/unsubscribe অপারেশন লগ করা যেতে পারে।
সচরাচর জিজ্ঞাসিত প্রশ্ন
সর্বাধিক টপিক সংখ্যা প্রতি অ্যাপে 2000। যদি আরও প্রয়োজন হয়, ডিভাইস গ্রুপ বা টোকেন দ্বারা পৃথক পাঠানো বিবেচনা করুন।
Firebase একটি ডিভাইসের সাবস্ক্রিপশন তালিকা পাওয়ার জন্য সরাসরি API সরবরাহ করে না। ডেভেলপারদের তাদের নিজস্ব সার্ভারে সাবস্ক্রিপশনের অবস্থা সংরক্ষণ এবং ক্লায়েন্টের সাথে সিঙ্ক্রোনাইজ করার পরামর্শ দেওয়া হয়।
FCM একটি সফল ফলাফল ফেরত দেয়। Firebase অবিদ্যমান টপিক থেকে আনসাবস্ক্রাইব করাকে no-op অপারেশন হিসাবে পরিচালনা করে — কোনো ত্রুটি তৈরি হয় না, অবস্থা পরিবর্তন হয় না।
হ্যাঁ, Firebase কনসোলে Cloud Messaging বিভাগে, আপনি একটি টপিককে লক্ষ্য দর্শক হিসাবে নির্বাচন করতে পারেন এবং ওয়েব ইন্টারফেসের মাধ্যমে পরীক্ষা বা উৎপাদন বিজ্ঞপ্তি পাঠাতে পারেন।
সাধারণত, সাবস্ক্রিপশন কয়েক সেকেন্ডের মধ্যে সক্রিয় হয়। তবে, বিরল ক্ষেত্রে, FCM সার্ভারে প্রচারের কারণে বিলম্ব 30–60 সেকেন্ড পর্যন্ত পৌঁছাতে পারে।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন