১. ভূমিকা
লক্ষ্য
এই কোডল্যাবে আপনি শিখবেন কিভাবে আপনার মাল্টি-প্ল্যাটফর্ম অ্যাপকে ইন্সট্রুমেন্ট করতে হয়, যাতে আপনি FCM টপিক ব্যবহার করে আপনার অ্যাপ ইনস্ট্যান্সের বিভিন্ন সাবগ্রুপে পুশ মেসেজ মাল্টিকাস্ট করতে পারেন।
একবার সম্পন্ন হলে, আপনি FCM পরিকাঠামো ব্যবহার করে এই সাবগ্রুপগুলি পরিচালনা করতে এবং সেইসাথে সাবগ্রুপগুলির মধ্যে মাল্টিকাস্ট পুশ মেসেজ পাঠাতে সক্ষম হবেন।
বিষয়বস্তুর সংক্ষিপ্ত বিবরণ
টপিক হলো আপনার অ্যাপ ইনস্ট্যান্সগুলোর উপগোষ্ঠীতে বার্তা পাঠানোর একটি FCM পরিকাঠামো-সমর্থিত উপায়।
FCM মেসেজ পাঠানোর পাশাপাশি এই টপিকগুলোতে সাবস্ক্রিপশন বজায় রাখার জন্য API প্রদান করে। কোনো অ্যাপ ইনস্ট্যান্সকে টপিকের সাথে যুক্ত করা এবং বিচ্ছিন্ন করার প্রক্রিয়াকে যথাক্রমে সাবস্ক্রাইব এবং আনসাবস্ক্রাইব বলা হয়।
সর্বজনীনভাবে উপলব্ধ কন্টেন্টের জন্য টপিক ব্যবহার করা উচিত। উদাহরণস্বরূপ, আবহাওয়ার আপডেট সম্পর্কিত বার্তা। আপনি যদি ব্যবহারকারী-সংবেদনশীল বার্তা পাঠাতে চান, তাহলে একাধিক ডিভাইসে মাল্টিকাস্টিং বার্তার জন্য ফায়ারবেস অ্যাডমিন এসডিকে (Firebase Admin SDK) ব্যবহার করুন।
টপিক-ভিত্তিক মাল্টিকাস্টিং থ্রুপুটের জন্য অপ্টিমাইজ করা হয়েছে।
আপনি যা শিখবেন
- মোবাইল অ্যাপ থেকে কীভাবে ব্যবহারকারীদের বিভিন্ন টপিকে সাবস্ক্রাইব (এবং আনসাবস্ক্রাইব) করানো যায়।
- টপিক ব্যবহার করে কীভাবে মাল্টিকাস্ট পুশ মেসেজ পাঠাতে হয়।
- টপিক কন্ডিশন ব্যবহার করে একাধিক টপিকে কীভাবে মেসেজ পাঠানো যায়।
- সার্ভার সাইডে কীভাবে টপিক সাবস্ক্রিপশন পরিচালনা করবেন এবং একসাথে অনেক সাবস্ক্রিপশন ও আনসাবস্ক্রিপশন করবেন।
আপনি যা তৈরি করবেন
- একটি অ্যান্ড্রয়েড অ্যাপ যা টপিকে সাবস্ক্রাইব/আনসাবস্ক্রাইব করে এবং টপিকে পাঠানো মেসেজ গ্রহণ করে।
- ফায়ারবেস অ্যাডমিন এসডিকে ব্যবহার করে একটি সার্ভার সাইড ইন্টিগ্রেশন, যা এফসিএম এপিআই-এর মাধ্যমে টপিক মেসেজ পাঠাতে ব্যবহৃত হবে।
আপনার যা যা লাগবে
- আপনার পছন্দের একটি ব্রাউজার, যেমন ক্রোম।
- জাভা অ্যাপ্লিকেশন তৈরির জন্য ইন্টেলিজ আইডিয়া (IntelliJ IDEA )।
- ইনস্টল করার সময় গ্রেডলের জন্য সমর্থন চালু করতে ভুলবেন না।
- অ্যান্ড্রয়েড অ্যাপ্লিকেশন তৈরির জন্য অ্যান্ড্রয়েড স্টুডিও আইডিই।
- অ্যান্ড্রয়েড অ্যাপ্লিকেশনটি চালানোর জন্য একটি ডিভাইস। নিম্নলিখিতগুলির মধ্যে যেকোনো একটি:
- অ্যান্ড্রয়েড এমুলেটর। ( অ্যান্ড্রয়েড স্টুডিওতে সেটআপ করা প্রয়োজন)।
- আপনার কম্পিউটারের সাথে সংযুক্ত এবং ডেভেলপার মোডে সেট করা একটি ফিজিক্যাল অ্যান্ড্রয়েড ডিভাইস।
- আপনার ফায়ারবেস প্রজেক্ট তৈরি ও পরিচালনার জন্য একটি গুগল অ্যাকাউন্ট।
২. প্রস্তুতি গ্রহণ
কোডটি নিন
কমান্ড লাইন থেকে গিটহাব রিপোজিটরিটি ক্লোন করুন:
git clone https://github.com/firebase/quickstart-android.git fcm-codelab
নমুনা কোডটি fcm-codelab ডিরেক্টরিতে ক্লোন করা হবে।
cd fcm-codelab
এই কোডল্যাবের স্টার্টার অ্যাপটি fcm-topics-codelab ব্রাঞ্চের messaging ডিরেক্টরিতে রয়েছে। স্টার্টার কোডটিতে পৌঁছানোর জন্য নিচের ধাপগুলো অনুসরণ করুন। এতে StockNewsApp এবং StockNewsServer নামে দুটি ডিরেক্টরি রয়েছে। প্রথমটিতে স্টার্টার অ্যান্ড্রয়েড অ্যাপ এবং দ্বিতীয়টিতে স্টার্টার সার্ভার সাইড কোড রয়েছে।
git checkout fcm-topics-codelab cd messaging/fcm-topics-codelab/starter
এই কোডল্যাবটির সম্পূর্ণ সংস্করণটি messaging/fcm-topics-codelab/completed ডিরেক্টরিতে রাখা হয়েছে।
একটি ফায়ারবেস প্রজেক্ট তৈরি করুন
- আপনার গুগল অ্যাকাউন্ট ব্যবহার করে ফায়ারবেস কনসোলে সাইন ইন করুন।
- নতুন প্রজেক্ট তৈরি করতে বাটনটিতে ক্লিক করুন এবং তারপর একটি প্রজেক্টের নাম লিখুন (উদাহরণস্বরূপ,
StockNews)। - চালিয়ে যান-এ ক্লিক করুন।
- অনুরোধ করা হলে, Firebase-এর শর্তাবলী পর্যালোচনা করে গ্রহণ করুন এবং তারপর 'চালিয়ে যান' (Continue ) বোতামে ক্লিক করুন।
- (ঐচ্ছিক) Firebase কনসোলে AI সহায়তা সক্রিয় করুন (Firebase-এ এটিকে "Gemini" বলা হয়)।
- এই কোডল্যাবের জন্য আপনার গুগল অ্যানালিটিক্স-এর প্রয়োজন নেই , তাই গুগল অ্যানালিটিক্স অপশনটি বন্ধ করে দিন ।
- Create project-এ ক্লিক করুন, আপনার প্রজেক্টটি প্রস্তুত হওয়া পর্যন্ত অপেক্ষা করুন, এবং তারপর Continue-তে ক্লিক করুন।
অভিনন্দন! আপনি এইমাত্র আপনার ফায়ারবেস প্রজেক্টটি তৈরি করেছেন।
৩. প্ল্যাটফর্ম-ভিত্তিক ফায়ারবেস অ্যাপ কনফিগারেশন
ফায়ারবেস সাপোর্ট চালু করার জন্য প্রয়োজনীয় বেশিরভাগ কোড পরিবর্তন আপনি যে প্রজেক্টে কাজ করছেন তাতে ইতিমধ্যেই চেক ইন করা আছে। তবে, মোবাইল প্ল্যাটফর্মের জন্য সাপোর্ট যোগ করতে হলে আপনাকে যা করতে হবে তা হলো:
- ফায়ারবেস প্রকল্পে কাঙ্ক্ষিত প্ল্যাটফর্মটি নিবন্ধন করুন।
- প্ল্যাটফর্ম-নির্দিষ্ট কনফিগারেশন ফাইলটি ডাউনলোড করুন এবং কোডে যোগ করুন।
এই কোডল্যাবের উদ্দেশ্যে, আমরা একটি অ্যান্ড্রয়েড ফায়ারবেস অ্যাপ যুক্ত করতে যাচ্ছি।
অ্যান্ড্রয়েড কনফিগার করুন
- Firebase Console- এ, বাম দিকের নেভিগেশন বারের উপরের দিকে থাকা সেটিংস কগ (Settings cog) থেকে প্রজেক্ট সেটিংস (Project Settings) নির্বাচন করুন এবং জেনারেল (General) পেজে আপনার অ্যাপস (Your apps)- এর নিচে থাকা অ্যান্ড্রয়েড আইকনে ক্লিক করুন।
আপনি নিম্নলিখিত ডায়ালগটি দেখতে পাবেন: 
- যে গুরুত্বপূর্ণ মানটি প্রদান করতে হবে তা হলো অ্যান্ড্রয়েড প্যাকেজ নেম । এটিকে
com.ticker.stocknewsএ সেট করুন।- এখানে প্রদত্ত প্যাকেজ নামটি অবশ্যই আপনার স্টার্টার StockNewsApp কোডের
AndroidManifest.xmlএ প্রদত্ত নামের সাথে একই হতে হবে। আপনি যদি এটি খুঁজে বের করতে বা পরিবর্তন করতে চান, তাহলে এই ধাপগুলো অনুসরণ করুন:- StockNewsApp ডিরেক্টরিতে,
app/src/main/AndroidManifest.xmlফাইলটি খুলুন। -
manifestএলিমেন্টের মধ্যে,packageঅ্যাট্রিবিউটের স্ট্রিং ভ্যালুটি খুঁজুন। এই ভ্যালুটিই হলো অ্যান্ড্রয়েড প্যাকেজ নেম।
- StockNewsApp ডিরেক্টরিতে,
- এখানে প্রদত্ত প্যাকেজ নামটি অবশ্যই আপনার স্টার্টার StockNewsApp কোডের
- Firebase ডায়ালগ বক্সে, কপি করা প্যাকেজ নামটি Android প্যাকেজ নামের ফিল্ডে পেস্ট করুন।
- এই কোডল্যাবের জন্য আপনার ডিবাগ সাইনিং সার্টিফিকেট SHA-1 এর প্রয়োজন নেই, কারণ এই অ্যাপটি রিলিজ করা হবে না। এই স্থানটি খালি রাখুন।
- অ্যাপটি নিবন্ধন করুন- এ ক্লিক করুন।
- এরপর Firebase Console-এ
google-services.jsonকনফিগারেশন ফাইলটি ডাউনলোড করার জন্য নির্দেশাবলী অনুসরণ করুন। - আপনি বাকি সেটআপ ধাপগুলো এড়িয়ে যেতে পারেন, কারণ স্টার্টার অ্যাপ কোডে অন্য সবকিছু আগে থেকেই কনফিগার করা আছে। আপনি ফায়ারবেস কনসোলের মূল পাতায় আপনার অ্যাপটি তালিকাভুক্ত দেখতে পাবেন।
- আপনি এইমাত্র ডাউনলোড করা
google-services.jsonফাইলটিmessaging/fcm-topics-codelab/starter/StockNewsApp/appডিরেক্টরিতে কপি করুন।
৪. আপনার অ্যাপটি তৈরি করুন এবং চালান।
আপনি এখন আপনার অ্যাপের কাজ শুরু করার জন্য প্রস্তুত! প্রথমে, অ্যাপটি বিল্ড এবং রান করুন।
স্টার্টার অ্যাপটি ইম্পোর্ট করুন
অ্যান্ড্রয়েড স্টুডিও চালু করুন এবং স্টার্টার কোড ডিরেক্টরি থেকে messaging/fcm-topics-codelab/starter/StockNewsApp ইম্পোর্ট করুন।
প্রজেক্টটি লোড হওয়ার পরে, আপনি একটি অ্যালার্টও দেখতে পারেন যে গিট আপনার সমস্ত লোকাল পরিবর্তন ট্র্যাক করছে না, সেক্ষেত্রে আপনি উপরের ডানদিকে থাকা " ইগনোর " বা " X " চিহ্নে ক্লিক করতে পারেন। (আপনি গিট রিপোতে কোনো পরিবর্তন পুশ করবেন না।)
আপনি যদি অ্যান্ড্রয়েড ভিউতে থাকেন, তাহলে প্রজেক্ট উইন্ডোর উপরের-বাম কোণায় নিচের ছবির মতো কিছু দেখতে পাবেন। (আপনি যদি প্রজেক্ট ভিউতে থাকেন, তবে একই জিনিস দেখতে আপনাকে প্রজেক্টটি এক্সপ্যান্ড করতে হবে)

অনুগ্রহ করে মনে রাখবেন যে, প্রথমবার ব্যাকগ্রাউন্ডে প্রজেক্টটি কম্পাইল করতে অ্যান্ড্রয়েড স্টুডিওর কয়েক সেকেন্ড সময় লাগতে পারে। এই সময়ে আপনি অ্যান্ড্রয়েড স্টুডিওর নিচের স্ট্যাটাস বারে একটি স্পিনার দেখতে পাবেন:

আমরা পরামর্শ দিচ্ছি যে, কোডে কোনো পরিবর্তন করার আগে এটি সম্পূর্ণ হওয়া পর্যন্ত অপেক্ষা করুন। এর ফলে অ্যান্ড্রয়েড স্টুডিও সমস্ত প্রয়োজনীয় উপাদান সংগ্রহ করতে পারবে।
এছাড়াও, যদি "ভাষার পরিবর্তন কার্যকর করার জন্য রিলোড করুন?" বা এই ধরনের কোনো বার্তা আসে, তাহলে "হ্যাঁ" নির্বাচন করুন।
এমুলেটর সেটআপ
অ্যান্ড্রয়েড এমুলেটর সেট আপ করতে সাহায্যের প্রয়োজন হলে, "আপনার অ্যাপ চালান" নিবন্ধটি দেখুন।
অ্যান্ড্রয়েড অ্যাপ স্টার্টার কোড বুঝুন
- স্টার্টার কোডটি হলো ন্যূনতম কার্যকারিতা ও ইউজার ইন্টারফেস সম্বলিত একটি হালকা অ্যান্ড্রয়েড অ্যাপ।
-
app/build.gradleফাইলে firebase-messaging SDK- এর একটি ডিপেন্ডেন্সি ইতিমধ্যেই যোগ করা হয়েছে।

-
AndroidManifest.xmlএ আগে থেকেই একটিMESSAGING_EVENTকলব্যাক হ্যান্ডলার যোগ করা আছে।- এই হ্যান্ডলার,
StockNewsMessagingService.javaFirebaseMessagingServiceক্লাসকে এক্সটেন্ড করে, যা ফায়ারবেস ক্লাউড মেসেজিং সম্পর্কিত বিভিন্ন কার্যকারিতা প্রদান করে। আরও জানতে FirebaseMessagingService ডকুমেন্টেশন দেখুন।
* যখন FCM রেজিস্ট্রেশন টোকেন তৈরি বা রিফ্রেশ করা হয়, তখন `onNewToken` ফাংশনটি কল করা হয়। আরও তথ্যের জন্য [টোকেন জেনারেশন মনিটর করুন](https://firebase.google.com/docs/cloud-messaging/android/client#monitor-token-generation) দেখুন। * যখন একটি মেসেজ আসে এবং অ্যাপটি ফোরগ্রাউন্ডে থাকে, তখন `onMessageReceived` ফাংশনটি কল করা হয়। বর্তমানে, এটি কেবল প্রাপ্ত মেসেজটি লগ করে। * ব্যাকগ্রাউন্ড এবং ফোরগ্রাউন্ড মেসেজ ডেলিভারি ও হ্যান্ডলিং-এর মধ্যে পার্থক্য সম্পর্কে আরও জানতে [অ্যান্ড্রয়েড অ্যাপে মেসেজ গ্রহণ করুন](https://firebase.google.com/docs/cloud-messaging/android/receive) দেখুন। - এই হ্যান্ডলার,
- এছাড়াও,
AndroidManifest.xmlএStockNewsApplicationনামে একটি AndroidApplicationক্লাসও দেওয়া আছে।
* অ্যাপটি চালু হওয়ার সময় এই ক্লাসটিই সর্বপ্রথম ইনস্ট্যানশিয়েট করা হবে। * `StockNewsApplication` ক্লাসের `onCreate` ফাংশনে একটি FCM রেজিস্ট্রেশন টোকেন তৈরির কল যোগ করা হয়েছে। এটি একটি বৈধ FCM রেজিস্ট্রেশন টোকেন তৈরি করবে এবং তা লগ করবে। -
MainActivity.javaফাইলটিRecyclerViewযোগ করে, যা স্টক ক্যাটাগরির বিকল্পগুলো প্রদর্শন করে। -
SubscriptionAdapter.javaRecyclerView.Adapterইমপ্লিমেন্ট করে, যা স্টক ক্যাটাগরি নির্বাচনের স্ক্রিনটি প্রদর্শন করে।- প্রতিটি স্টক ক্যাটাগরির একটি নাম এবং তার পাশে একটি সাবস্ক্রিপশন টগল রয়েছে।
- টগলটি পরিবর্তন করলে একটি FCM টপিক সাবস্ক্রিপশন / আনসাবস্ক্রিপশন কল হওয়া উচিত।
- আপনি পরবর্তী বিভাগগুলিতে এই কলগুলি বাস্তবায়ন করবেন।
-
model/StockCategories.javaক্লাসে সমস্ত স্টক ক্যাটাগরি এবং তাদের সংশ্লিষ্ট টপিকের নামগুলোর একটি তালিকা রয়েছে।

স্টার্টার অ্যাপটি চালান
- আপনার অ্যান্ড্রয়েড ডিভাইসটি কম্পিউটারের সাথে সংযুক্ত করুন অথবা একটি এমুলেটর চালু করুন।
- উপরের টুলবারে, আপনার কাঙ্ক্ষিত অ্যান্ড্রয়েড ডিভাইস বা এমুলেটরটি নির্বাচন করুন এবং রান বোতামটি চাপুন।

- অ্যাপের ইউজার ইন্টারফেসটি দেখতে নিম্নরূপ হবে:

- অ্যাপটি একটি এফসিএম রেজিস্ট্রেশন টোকেন তৈরি করে তা লগ করবে। তবে অ্যাপের ইউজার ইন্টারফেসে (UI) কোনো পরিবর্তন হবে না।
- এফসিএম রেজিস্ট্রেশন টোকেনটি কপি করে সংরক্ষণ করুন, কারণ এটি পরবর্তী ধাপগুলিতে ব্যবহার করা হবে।

৫. একটি পরীক্ষামূলক বার্তা পাঠান
এখন আপনি গত ধাপে সেট আপ করা অ্যাপ ইনস্ট্যান্সটিতে একটি পরীক্ষামূলক বার্তা পাঠানোর জন্য প্রস্তুত।
স্টার্টার সার্ভার কোড ইম্পোর্ট করুন
IntelliJ IDEA চালু করুন এবং messaging/fcm-topics-codelab/starter/StockNewsServer প্রজেক্টটি খুলুন।
আপনার বাম দিকের নেভিগেশন বারে থাকা প্রজেক্ট ভিউটি দেখতে অনেকটা এইরকম হবে:

উল্লেখ্য, প্রয়োজনীয় ডিপেন্ডেন্সিগুলো পুল করা সহ আপনার প্রজেক্টটি বিল্ড করতে ইন্টেলিজ আইডিয়া-র কয়েক মিনিট সময় লাগতে পারে।
সার্ভার স্টার্টার কোডটি বুঝুন।
- সার্ভার স্টার্টার কোডটি একটি গ্রেডল-ভিত্তিক জাভা প্রজেক্ট।
-
build.gradleফাইলটিতে ইতিমধ্যেই firebase-admin SDK- এর ডিপেন্ডেন্সি যুক্ত করা আছে। এই SDK-টি বিভিন্ন FCM মেসেজ পাঠানোর কার্যকারিতা ব্যবহারের সুযোগ দেয়।

- পরিশেষে, দুটি শ্রেণী রয়েছে, যথা:
-
FcmSender.java: এই ক্লাসে নিম্নলিখিত উল্লেখযোগ্য মেথডগুলো রয়েছে:-
initFirebaseSDK: firebase-admin SDK চালু করে। -
sendMessageToFcmRegistrationToken: একটি FCM রেজিস্ট্রেশন টোকেনে বার্তা পাঠান। -
sendMessageToFcmTopic: একটি FCM টপিকে বার্তা পাঠান। -
sendMessageToFcmTopicCondition: একটি FCM টপিক কন্ডিশনে বার্তা পাঠান।
-
-
FcmSubscriptionManager.java: এই ক্লাসে এমন সব মেথড রয়েছে যা সার্ভার সাইড থেকে টপিক সাবস্ক্রিপশন পরিচালনা করতে সাহায্য করে।-
initFirebaseSDK: firebase-admin SDK চালু করে। -
subscribeFcmRegistrationTokensToTopic: একটি FCM টপিকে FCM রেজিস্ট্রেশন টোকেন(গুলি) সাবস্ক্রাইব করুন। -
unsubscribeFcmRegistrationTokensFromTopic: একটি FCM টপিক থেকে FCM রেজিস্ট্রেশন টোকেন(গুলি) আনসাবস্ক্রাইব করুন।
-
-
সার্ভার কোড সেট আপ করা
- প্রথমে, আমাদের একটি Firebase সার্ভিস অ্যাকাউন্ট সেট আপ করতে হবে, যা firebase-admin SDK-কে FCM API-গুলিতে কল অনুমোদন করার অনুমতি দেবে।
- Firebase Console-এ যান, বাম দিকের নেভিগেশন বারে Project Overview- এর পাশে থাকা গিয়ার আইকনে ক্লিক করুন এবং Project settings নির্বাচন করুন।

- সেটিংস পৃষ্ঠায়, 'সার্ভিস অ্যাকাউন্টস' নির্বাচন করুন এবং 'ক্রিয়েট সার্ভিস অ্যাকাউন্ট'-এ ক্লিক করুন।

- এখন 'Generate new private key' বাটনে ক্লিক করুন এবং আপনার কী ফাইলটি স্বয়ংক্রিয়ভাবে ডাউনলোড হতে শুরু করবে।
- key ফাইলটির নাম পরিবর্তন করে
service-account.jsonরাখুন এবং এটিmessaging/fcm-topics-codelab/starter/StockNewsServer/src/main/resourcesফোল্ডারে কপি করুন। -
FcmSender.javaএবংFcmSubscriptionManager.javaউভয়ই নিম্নলিখিত কোড ব্যবহার করে ক্লাসপাথ থেকেservice-account.jsonফাইলটি লোড করে।
- Firebase Console-এ যান, বাম দিকের নেভিগেশন বারে Project Overview- এর পাশে থাকা গিয়ার আইকনে ক্লিক করুন এবং Project settings নির্বাচন করুন।
- এই পর্যায়ে, সার্ভার কোড প্রস্তুত। উপরের মেনু বার থেকে Build -> Build Project চালান।
একটি পরীক্ষামূলক বার্তা পাঠানো হচ্ছে
-
FcmSender.javaফাইলেsendMessageToFcmRegistrationTokenফাংশনটি খুঁজুন এবং "Run the starter app" সেকশন থেকে কপি করা FCM রেজিস্ট্রেশন টোকেনটিregistrationTokenফিল্ডে প্রবেশ করান। -
mainফাংশনে, শুধুsendMessageToFcmRegistrationTokenফাংশনটির কমেন্ট তুলে দিন এবং কোডটি কার্যকর করতে run-এ ক্লিক করুন।- লক্ষ্য করুন কিভাবে
messageঅবজেক্টেরTokenফিল্ডে এফসিএম রেজিস্ট্রেশন টোকেনটি সেট করা হয়েছে। - এছাড়াও, লক্ষ্য করুন আমরা কীভাবে
FirebaseMessagingইন্টারফেসেরsendAPI ব্যবহার করেছি।
- লক্ষ্য করুন কিভাবে

- এটি পূর্ববর্তী ধাপে আপনার সেট আপ করা অ্যাপ ইনস্ট্যান্সটিতে একটি বার্তা পাঠাবে।
- যখন অ্যাপ ইনস্ট্যান্সটি ফোরগ্রাউন্ডে থাকবে, তখন আপনি লগ করা বার্তার বিষয়বস্তু দেখতে পাবেন।

- এবং যখন অ্যাপটি ব্যাকগ্রাউন্ডে থাকবে, তখন আপনি নোটিফিকেশন ট্রে-তে বার্তাটি দেখতে পাবেন।

চমৎকার, আপনি একটি অ্যাপ ইনস্ট্যান্সে মেসেজ পাঠাতে Firebase Admin SDK ব্যবহার করেছেন। আপনার সার্ভারে Firebase Admin SDK ব্যবহার সম্পর্কে আরও পড়ুন।
৬. টপিক সাবস্ক্রিপশন / আনসাবস্ক্রিপশন বাস্তবায়ন করুন
এই ধাপে আপনি অ্যান্ড্রয়েড অ্যাপের স্টক ক্যাটাগরি টগলে টপিক সাবস্ক্রিপশন এবং আনসাবস্ক্রিপশন অ্যাকশনগুলো প্রয়োগ করবেন।
যখন কোনো অ্যাপ ব্যবহারকারী একটি নির্দিষ্ট স্টক ক্যাটাগরির জন্য সুইচটি টগল করেন, তখন একটি টপিক সাবস্ক্রিপশন বা আনসাবস্ক্রিপশনের অনুরোধ করা হবে।
কোড পর্যালোচনা করুন
- অ্যান্ড্রয়েড অ্যাপ কোডে
SubscriptionAdapter.javaক্লাসে যান এবংRecyclerViewViewHolderক্লাসটি সনাক্ত করুন।

- ক্লাস কনস্ট্রাক্টরটি
setOnCheckedChangeListenerব্যবহার করে সাবস্ক্রিপশন টগলের জন্য একটি লিসেনার সেট আপ করে। - সুইচ টগলের উপর নির্ভর করে, যথাক্রমে
subscribeToStockCategoryএবংunsubscribeFromStockCategoryমেথড কল করার মাধ্যমে সাবস্ক্রাইব এবং আনসাবস্ক্রাইব অ্যাকশনগুলো সম্পন্ন করা হয়। - RecyclerView অ্যাডাপ্টারের
onBindViewHolderফাংশন দ্বারাsetDataমেথডটি কল করা হয়, যা ViewHolder-কে উপযুক্ত স্টক ক্যাটাগরির সাথে বাইন্ড করে।
টপিক সাবস্ক্রিপশন বাস্তবায়ন করুন
-
subscribeToStockCategoryমেথডে, আপনিFirebaseMessagingঅবজেক্টেরsubscribeToTopicAPI-এর কলটি ইমপ্লিমেন্ট করবেন। কোডটি দেখতে অনেকটা এরকম হতে পারে:
void subscribeToStockCategory() {
// Making call to FCM for subscribing to the topic for stockCategory
FirebaseMessaging.getInstance().subscribeToTopic(stockCategory.getTopicName()).addOnSuccessListener(
unused -> {
// Subscribing action successful
Log.i(TAG, "Subscribed to topic: " + stockCategory.getTopicName());
Toast.makeText(itemView.getContext(), "Subscribed to " + stockCategory.getCategoryName(),
Toast.LENGTH_SHORT).show();
});
}
বিষয় সাবস্ক্রিপশন বাতিল বাস্তবায়ন করুন
- একইভাবে, else কন্ডিশনে, আপনি
unsubscribeFromTopicAPI-এর কলটি ইমপ্লিমেন্ট করবেন। কোডটি অনেকটা নিচের মতো হবে:
void unsubscribeFromStockCategory() {
// Making call to FCM for unsubscribing from the topic for stockCategory
FirebaseMessaging.getInstance().unsubscribeFromTopic(stockCategory.getTopicName())
.addOnSuccessListener(unused -> {
// Unsubscribing action successful
Log.i(TAG, "Unsubscribed from topic: " + stockCategory.getTopicName());
Toast.makeText(itemView.getContext(), "Unsubscribed from " + stockCategory.getCategoryName(),
Toast.LENGTH_SHORT).show();
});
}
চলুন চেষ্টা করে দেখি
- অ্যাপটি চালান এবং সাবস্ক্রাইব ও আনসাবস্ক্রাইব করার জন্য স্টক ক্যাটাগরি অপশনগুলো টগল করুন। এটি দেখতে অনেকটা এইরকম হবে:
সাবস্ক্রাইব করুন | সদস্যতা বাতিল করুন |
|
|
৭. আপনার প্রথম টপিক মেসেজ পাঠানো
এই ধাপে আপনি একটি FCM টপিক মেসেজ পাঠানোর জন্য সার্ভার সাইড কোড বাস্তবায়ন করবেন।
টপিক মেসেজ পাঠানোর জন্য সার্ভার সাইড ইন্টিগ্রেশন বাস্তবায়ন করুন
- সার্ভার কোডে,
FcmSender.javaফাইলে যান এবংsendMessageToFcmTopicনামের মেথডটি খুঁজুন।

- প্রথম লাইনে, আপনি যে FCM টপিকে বার্তাটি পাঠাতে চান, সেটি উল্লেখ করুন।
- এটি
/topics/<Topic Name>এই ধরনের একটি স্ট্রিং। উদাহরণস্বরূপ,/topics/Technology।
- এটি
- পরবর্তী লাইনগুলোতে একটি নতুন
messageঅবজেক্ট তৈরি করুন (sendMessageToFcmRegistrationTokenফাংশনে সংজ্ঞায়িত অবজেক্টটির অনুরূপ)।- পার্থক্যটি হবে এই যে,
messageঅবজেক্টেরTokenফিল্ড সেট করার পরিবর্তে আপনাকেTopicফিল্ড সেট করতে হবে।
- পার্থক্যটি হবে এই যে,
Message message = Message.builder()
.putData("FOOTECH", "$1000")
.setNotification(
Notification.builder()
.setTitle("Investor confidence in Tech Stocks growing")
.setBody("Foo Tech leading the way in stock growth for Tech sector.")
.build())
.setTopic(topicName)
.build();
- এখন মেসেজ পাঠানোর জন্য
FirebaseMessagingইনস্ট্যান্সে কলটি যোগ করুন (sendMessageToFcmRegistrationTokenফাংশনে করা সেন্ড কলের অনুরূপ)।
FirebaseMessaging.getInstance().send(message);
- অবশেষে,
mainফাংশনটি আপডেট করুন এবং শুধুমাত্রsendMessageToFcmTopicফাংশনটি কল করার সুবিধা চালু করুন।

বার্তা পাঠান এবং প্রাপ্তি যাচাই করুন
- টপিক মেসেজ পাঠানোর আগে, প্রথমে নিশ্চিত করুন যে আপনার অ্যাপ ইনস্ট্যান্সটি আপনি যে টপিকে মেসেজ পাঠাতে চান, সেটিতে সাবস্ক্রাইব করা আছে।
- এটি সংশ্লিষ্ট টগলটি ফ্লিপ করে করা যেতে পারে। উদাহরণস্বরূপ:

- এখন আপনি
FcmSender.javaএরmainফাংশনটি এক্সিকিউট করে আপনার টপিক মেসেজ পাঠাতে পারেন। - আগের মতোই আপনি অ্যাপ ইনস্ট্যান্সটিতে মেসেজ প্রাপ্তি দেখতে পাবেন।
- অ্যাপ ইনস্ট্যান্সটি ফোরগ্রাউন্ডে রয়েছে

- ব্যাকগ্রাউন্ডে অ্যাপ ইনস্ট্যান্স

- অতিরিক্ত পরামর্শ: আপনি যে টপিকে মেসেজটি পাঠিয়েছিলেন, সেটি থেকে আনসাবস্ক্রাইব করে আবার পাঠান। আপনি লক্ষ্য করবেন যে মেসেজটি অ্যাপ ইনস্ট্যান্সে ডেলিভার হচ্ছে না।
৮. আপনার প্রথম টপিক কন্ডিশন মেসেজ পাঠানো
টপিক কন্ডিশন ফিচারটি আপনাকে একাধিক টপিকের সমন্বয়ে মেসেজ পাঠানোর সুযোগ দেয়, যার ফলে আপনি আরও সুস্পষ্টভাবে শ্রোতা নির্ধারণ করতে পারেন।
উদাহরণস্বরূপ, আমাদের স্টকনিউজ অ্যাপে, টেকনোলজি বা অটোমোটিভ টপিকে সাবস্ক্রাইব করা একদল অ্যাপ ইনস্ট্যান্সকে মেসেজ পাঠানোর সম্ভাবনাটি বিবেচনা করুন। এমন একটি পরিস্থিতি ঘটতে পারে, যেমন, যদি ওয়েমো-কে নিয়ে কোনো উল্লেখযোগ্য ঘটনা ঘটে।
টপিকস আপনাকে নিম্নলিখিত অপারেটরগুলি ব্যবহার করে আপনার সংমিশ্রণকে একটি বুলিয়ান এক্সপ্রেশন আকারে প্রকাশ করার সুযোগ দেয়।
- && : লজিক্যাল AND। উদাহরণস্বরূপ,
'Technology' in topics && 'Automotive' in topics- এটি শুধুমাত্র সেই অ্যাপ ইনস্ট্যান্সগুলোকে টার্গেট করে যেগুলো Technology এবং Automotive উভয় টপিকেই সাবস্ক্রাইব করা আছে। - || : লজিক্যাল OR। উদাহরণস্বরূপ,
'Technology' in topics || 'Automotive' in topics- এটি সেইসব অ্যাপ ইনস্ট্যান্সকে টার্গেট করে যেগুলো Technology অথবা Automotive টপিকগুলোর যেকোনো একটিতে সাবস্ক্রাইব করা আছে। - () : গ্রুপ করার জন্য বন্ধনী। উদাহরণস্বরূপ,
'Technology' in topics && ('Automotive' in topics || 'Energy' in topics)- শুধুমাত্র সেই অ্যাপ ইনস্ট্যান্সগুলিকে টার্গেট করে যেগুলি Technology এবং Automotive অথবা Energy টপিকের যেকোনো একটিতে সাবস্ক্রাইব করা আছে।
এই কার্যকারিতাটি ব্যবহার করার জন্য কীভাবে অনুরোধ পাঠাতে হয় তা তৈরি করতে হয় সে সম্পর্কে আরও পড়ুন।
টপিক কন্ডিশন মেসেজ পাঠানোর জন্য সার্ভার সাইড ইন্টিগ্রেশন বাস্তবায়ন করুন
- সার্ভার কোডে ফিরে এসে,
FcmSender.javaফাইলে যান এবংsendMessageToFcmTopicConditionনামের মেথডটি খুঁজুন।

- In the first line, for the
topicConditionvariable, provide the topic condition you want to send the message to. You can set it to:'Technology' in topics && 'Automotive' in topics. - পরবর্তী লাইনগুলোতে, একটি নতুন
messageঅবজেক্ট তৈরি করুন (যাsendMessageToFcmTopicফাংশনে সংজ্ঞায়িত অবজেক্টটির অনুরূপ)।- পার্থক্যটি হবে এই যে, অবজেক্টের
Topicফিল্ড সেট করার পরিবর্তে আপনিConditionফিল্ড সেট করবেন।
- পার্থক্যটি হবে এই যে, অবজেক্টের
Message message = Message.builder()
.putData("FOOCAR", "$500")
.setNotification(
Notification.builder()
.setTitle("Foo Car shows strong Q2 results")
.setBody("Foo Car crosses 1B miles. Stocks rally.")
.build())
.setCondition(topicCondition)
.build();
- এখন মেসেজ পাঠানোর জন্য
FirebaseMessagingইনস্ট্যান্সে কলটি যোগ করুন (sendMessageToFcmTopicফাংশনে করা সেন্ড কলের অনুরূপ)।
FirebaseMessaging.getInstance().send(message);
- অবশেষে,
mainফাংশনটি আপডেট করুন এবং শুধুমাত্রsendMessageToFcmTopicConditionফাংশনটি কল করার সুবিধা চালু করুন।

বার্তাটি পাঠান এবং প্রাপ্তি যাচাই করুন।
- টপিক মেসেজ পাঠানোর আগে, প্রথমে আপনার অ্যাপ ইনস্ট্যান্সটিকে টেকনোলজি এবং অটোমোটিভ উভয় টপিকে সাবস্ক্রাইব করে নিশ্চিত করুন যে এটি নির্দিষ্ট টপিক শর্ত পূরণ করছে।
- এখন আপনি
FcmSender.javaএরmainফাংশনটি এক্সিকিউট করে আপনার টপিক মেসেজ পাঠাতে পারেন। - আগের মতোই, আপনি অ্যাপ ইনস্ট্যান্সটিতে মেসেজ প্রাপ্তিটি দেখতে পাবেন।
- অ্যাপ ইনস্ট্যান্সটি ফোরগ্রাউন্ডে রয়েছে

- ব্যাকগ্রাউন্ডে অ্যাপ ইনস্ট্যান্স

- বোনাস: আপনি এখন টেকনোলজি টপিক থেকে আনসাবস্ক্রাইব করতে এবং টপিক কন্ডিশন মেসেজটি পুনরায় পাঠাতে পারবেন। আপনি লক্ষ্য করবেন যে মেসেজটি অ্যাপ ইনস্ট্যান্স দ্বারা গৃহীত হচ্ছে না।
৯. পুনরালোচনা
এ পর্যন্ত আপনি যা শিখেছেন, চলুন তা সংক্ষেপে আরেকবার দেখে নেওয়া যাক।
- একটি অ্যাপ ইনস্ট্যান্স থেকে কীভাবে টপিক সাবস্ক্রিপশন / আনসাবস্ক্রিপশন শুরু করবেন।
- টপিকে একটি বার্তা পাঠানো এবং সাবস্ক্রাইব করা অ্যাপ ইনস্ট্যান্সগুলিতে তার প্রাপ্তি যাচাই করা।
- একটি টপিকের শর্তানুযায়ী বার্তা পাঠানো এবং শর্তটি পূরণকারী একটি অ্যাপ ইনস্ট্যান্সে বার্তাটির প্রাপ্তি যাচাই করা।
পরবর্তী অংশে আপনি শিখবেন, কীভাবে ক্লায়েন্ট সাইড থেকে কল ইনস্ট্যানশিয়েট করার প্রয়োজন ছাড়াই অ্যাপ ইনস্ট্যান্সগুলোকে টপিকে সাবস্ক্রাইব বা আনসাবস্ক্রাইব করা যায়।

১০. সার্ভার সাইড থেকে টপিক সাবস্ক্রিপশন পরিচালনা করুন
এখন পর্যন্ত এই কোডল্যাবে, সমস্ত টপিক সাবস্ক্রিপশন এবং আনসাবস্ক্রিপশন কল একটি অ্যাপ ইনস্ট্যান্স থেকে শুরু করা হয়েছে।
তবে, কিছু ক্ষেত্রে আপনি সার্ভার সাইড থেকে টপিক সাবস্ক্রিপশনগুলো পরিচালনা করতে চাইতে পারেন। উদাহরণস্বরূপ, আপনি কোনো অ্যাপ চালুর জন্য অপেক্ষা না করেই আপনার বিদ্যমান ব্যবহারকারীদের একটি উপগোষ্ঠীকে একটি নতুন টপিকে সাবস্ক্রাইব করাতে চাইতে পারেন।
এই অংশে আপনি শিখবেন, কীভাবে ফায়ারবেস অ্যাডমিন এসডিকে ব্যবহার করে সার্ভার সাইড থেকে কল করার মাধ্যমে একযোগে একাধিক এফসিএম রেজিস্ট্রেশন টোকেনকে একটি টপিকে সাবস্ক্রাইব এবং আনসাবস্ক্রাইব করতে হয়।
FCM টপিকে FCM রেজিস্ট্রেশন টোকেনগুলির সার্ভার সাইড সাবস্ক্রিপশন বাস্তবায়ন করুন।
- সার্ভার কোডে,
FcmSubscriptionManager.javaক্লাসে যান।subscribeFcmRegistrationTokensToTopicনামের মেথডটি খুঁজুন। এখানেই আপনিsubscribeToTopicAPI-এর কলটি ইমপ্লিমেন্ট করবেন।

- চলুন অ্যাপ ইনস্ট্যান্সটিকে এনার্জি টপিকে সাবস্ক্রাইব করি। তা করার জন্য, প্রথমে নিম্নলিখিত দুটি ফিল্ডে ডেটা সরবরাহ করুন:
-
registrationTokens: কমা দ্বারা পৃথক করা স্ট্রিংগুলির একটি তালিকা, যা সেই FCM রেজিস্ট্রেশন টোকেনগুলিকে উপস্থাপন করে যেগুলির জন্য আপনি টপিক সাবস্ক্রিপশন তৈরি করতে চান। -
topicName: এনার্জি টপিকের নাম, যেমন/topics/Energy।
-
- পরবর্তী কয়েকটি লাইনে কলটি নিম্নোক্তভাবে প্রয়োগ করুন:
TopicManagementResponse response = FirebaseMessaging.getInstance().subscribeToTopic(
registrationTokens, topicName);
- কিছু উচ্চ-স্তরের ফলাফল পরিসংখ্যানের জন্য আপনি
TopicManagementResponseপরীক্ষা করতে পারেন। যেমন,getSuccessCountব্যবহার করে সফলভাবে তৈরি হওয়া টপিক সাবস্ক্রিপশনের সংখ্যা প্রিন্ট করা।
System.out.printf("Num tokens successfully subscribed %d", response.getSuccessCount());
- অবশেষে,
mainফাংশনে শুধুমাত্রsubscribeFcmRegistrationTokensToTopicফাংশনটিকে কল করার অনুমতি দিন।
সাবস্ক্রিপশন তৈরি করুন এবং টপিক মেসেজ পাঠান
- এই পর্যায়ে আপনি টপিক সাবস্ক্রিপশন তৈরি করতে এবং তাতে একটি বার্তা পাঠাতে প্রস্তুত।
-
FcmSubscriptionManager.javaক্লাসেরmainফাংশনটি চালান। এটি একটি টপিক সাবস্ক্রিপশন তৈরি করবে। - এখন, বার্তা পাঠানোর জন্য কোডটি সেট আপ করুন। আগের মতোই,
-
FcmSender.javaফাইলে,sendMessageToFcmTopicফাংশনটি খুঁজুন। -
topicNameকে Energy টপিকে সেট করুন, যেমন,/topics/Energy। - একটি
Messageঅবজেক্ট তৈরি করুন এবংsetTopicব্যবহার করে সেটিকে টপিকে টার্গেট করুন। - অবশেষে, শুধুমাত্র
sendMessageToFcmTopicফাংশনটি সক্রিয় করার জন্যmainমেথডটি আপডেট করুন।
-
-
FcmSender.javaএরmainফাংশনটি চালান। এটি আপনার অ্যাপ ইনস্ট্যান্সে বার্তাটি পাঠাবে এবং আপনি আপনার অ্যাপে তা নিম্নরূপভাবে দেখতে পাবেন।- অ্যাপ ইনস্ট্যান্সটি ফোরগ্রাউন্ডে রয়েছে

- ব্যাকগ্রাউন্ডে অ্যাপ ইনস্ট্যান্স

FCM টপিক থেকে FCM রেজিস্ট্রেশন টোকেনগুলোর সার্ভার সাইড আনসাবস্ক্রিপশন বাস্তবায়ন করুন।
- সার্ভার সাইড টপিক আনসাবস্ক্রিপশনের জন্য, এই
unsubscribeFromTopicAPI-টি ব্যবহার করুন। আপনাকেFcmSubscriptionManager.javaক্লাসেরunsubscribeFcmRegistrationTokensFromTopicফাংশনে প্রাসঙ্গিক কোডটি যোগ করতে হবে।

- সার্ভার সাইডে আনসাবস্ক্রিপশন কোড প্রয়োগ করা এবং একটি টপিক মেসেজ পাঠিয়ে তার কার্যকারিতা যাচাই করার কাজটি আপনার জন্য অনুশীলন হিসেবে রেখে দেওয়া হলো।
১১. অভিনন্দন
অভিনন্দন, আপনি আপনার অ্যাপ ইনস্ট্যান্সের সাবগ্রুপগুলিতে মাল্টিকাস্ট বার্তা পাঠাতে সফলভাবে এফসিএম টপিক ব্যবহার করেছেন। এটি আপনাকে সময়মতো প্রাসঙ্গিক বিষয়বস্তু দিয়ে আপনার ব্যবহারকারীদের কাছে পৌঁছাতে সাহায্য করবে।

এরপর কী?
আপনার কোডল্যাবটি এখন সম্পন্ন হয়েছে, এবার নিচের নির্দেশিকাগুলো ব্যবহার করে অন্যান্য প্ল্যাটফর্মের জন্য বিভিন্ন টপিক চেষ্টা করে দেখতে পারেন:

