۱. مقدمه
اهداف
در این آزمایشگاه کد، یاد خواهید گرفت که چگونه برنامه چند پلتفرمی خود را ابزاربندی کنید تا بتوانید پیامهای push را با استفاده از مباحث FCM به زیرگروههای مختلف نمونههای برنامه خود ارسال کنید.
پس از اتمام، شما قادر خواهید بود از زیرساخت FCM برای مدیریت این زیرگروهها و همچنین پیامهای ارسالی چندپخشی روی زیرگروهها استفاده کنید.
مرور کلی مباحث
تاپیکها (موضوعات) یک روش پشتیبانیشده توسط زیرساخت FCM برای دسترسی به زیرگروههای نمونههای برنامه شما با پیامها هستند.
FCM رابطهای برنامهنویسی کاربردی (API) را برای ارسال پیامها و همچنین حفظ اشتراک در این تاپیکها فراهم میکند. عمل مرتبط کردن و جدا کردن یک نمونه برنامه با تاپیک، به ترتیب اشتراک و لغو اشتراک نامیده میشود.
موضوعات باید برای محتوای عمومی استفاده شوند. برای مثال، پیامهایی در مورد بهروزرسانیهای آب و هوا. اگر میخواهید پیامهای حساس به کاربر ارسال کنید، از Firebase Admin SDK برای ارسال پیامهای چندپخشی روی چندین دستگاه استفاده کنید.
چندپخشی مبتنی بر موضوعات برای افزایش توان عملیاتی بهینه شده است.
آنچه یاد خواهید گرفت
- نحوه اشتراک (و لغو اشتراک) کاربران در موضوعات از یک برنامه تلفن همراه.
- نحوه ارسال پیامهای چندپخشی با استفاده از تاپیکها.
- نحوه ارسال پیام به ترکیبی از موضوعات با استفاده از شرایط موضوع.
- نحوه مدیریت اشتراکهای موضوعی در سمت سرور و انجام اشتراکها و لغو اشتراکهای گروهی.
آنچه خواهید ساخت
- یک برنامه اندروید که در تاپیکها مشترک میشود/لغو اشتراک میکند و هنگام ارسال پیام به تاپیکها، آنها را دریافت میکند.
- یکپارچهسازی سمت سرور با استفاده از Firebase Admin SDK که برای ارسال پیامهای موضوعی از طریق APIهای FCM استفاده خواهد شد.
آنچه نیاز دارید
- یک مرورگر دلخواه مثل کروم.
- IntelliJ IDEA IDE برای توسعه برنامههای جاوا.
- هنگام نصب، حتماً پشتیبانی از Gradle را فعال کنید.
- محیط توسعه یکپارچه اندروید استودیو برای توسعه برنامههای اندروید.
- دستگاهی برای اجرای برنامه اندروید. هر یک از موارد زیر:
- شبیهساز اندروید (نیاز به راهاندازی در اندروید استودیو دارد).
- یک دستگاه اندروید فیزیکی که به رایانه شما متصل شده و روی حالت توسعهدهنده تنظیم شده باشد.
- یک حساب گوگل برای ایجاد و مدیریت پروژه Firebase شما.
۲. راهاندازی
کد را دریافت کنید
مخزن گیتهاب را از خط فرمان کلون کنید:
git clone https://github.com/firebase/quickstart-android.git fcm-codelab
کد نمونه در دایرکتوری fcm-codelab کپی خواهد شد.
cd fcm-codelab
برنامهی آغازین این codelab در دایرکتوری messaging از شاخهی fcm-topics-codelab قرار دارد. برای رسیدن به کد آغازین، مراحل زیر را دنبال کنید. این کد شامل دو دایرکتوری StockNewsApp و StockNewsServer است. اولی شامل برنامهی اندروید آغازین و دومی شامل کد سمت سرور آغازین است.
git checkout fcm-topics-codelab cd messaging/fcm-topics-codelab/starter
نسخه کاملشدهی این codelab در دایرکتوری messaging/fcm-topics-codelab/completed قرار دارد.
ایجاد یک پروژه فایربیس
- با استفاده از حساب گوگل خود وارد کنسول فایربیس شوید.
- برای ایجاد یک پروژه جدید، روی دکمه کلیک کنید و سپس نام پروژه را وارد کنید (برای مثال،
StockNews). - روی ادامه کلیک کنید.
- در صورت درخواست، شرایط Firebase را مرور و قبول کنید و سپس روی ادامه کلیک کنید.
- (اختیاری) دستیار هوش مصنوعی را در کنسول Firebase (با نام "Gemini در Firebase") فعال کنید.
- برای این codelab، به گوگل آنالیتیکس نیاز ندارید ، بنابراین گزینه گوگل آنالیتیکس را غیرفعال کنید .
- روی ایجاد پروژه کلیک کنید، منتظر بمانید تا پروژه شما آماده شود و سپس روی ادامه کلیک کنید.
تبریک! شما پروژه Firebase خود را ایجاد کردید.
۳. پیکربندی برنامه Firebase مخصوص پلتفرم
بیشتر تغییرات کد مورد نیاز برای فعال کردن پشتیبانی Firebase از قبل در پروژهای که روی آن کار میکنید بررسی شدهاند. با این حال، برای افزودن پشتیبانی برای پلتفرمهای موبایل، باید:
- پلتفرم مورد نظر را در پروژه Firebase ثبت کنید
- فایل پیکربندی مخصوص پلتفرم را دانلود کنید و آن را به کد اضافه کنید.
برای اهداف این آزمایشگاه کد، ما قصد داریم یک برنامه اندروید Firebase اضافه کنیم.
پیکربندی اندروید
- در کنسول فایربیس ، در بالای نوار ناوبری سمت چپ در چرخدنده تنظیمات، گزینه تنظیمات پروژه (Project Settings) را انتخاب کنید و در صفحه عمومی (General) در زیر قسمت برنامههای شما (Your apps) روی آیکون اندروید (Android) کلیک کنید.
شما باید دیالوگ زیر را ببینید: 
- مقدار مهمی که باید ارائه شود، نام بسته اندروید است. آن را روی
com.ticker.stocknewsتنظیم کنید.- نام بستهای که اینجا ارائه میشود باید با نامی که در
AndroidManifest.xmlکد اولیه StockNewsApp شما ارائه شده است، یکسان باشد. اگر میخواهید آن را پیدا کنید یا تغییر دهید، این مراحل را دنبال کنید:- در پوشهی StockNewsApp ، فایل
app/src/main/AndroidManifest.xmlرا باز کنید. - در عنصر
manifest، مقدار رشتهایِ ویژگیِpackage) را پیدا کنید. این مقدار، نام بستهی اندروید (Android package name) است.
- در پوشهی StockNewsApp ، فایل
- نام بستهای که اینجا ارائه میشود باید با نامی که در
- در پنجرهی فایربیس، نام بستهی کپیشده را در فیلد نام بستهی اندروید (Android package name) جایگذاری کنید.
- برای این codelab به گواهی امضای اشکالزدایی SHA-1 نیازی ندارید، زیرا این برنامه منتشر نخواهد شد. این قسمت را خالی بگذارید.
- روی ثبت برنامه کلیک کنید.
- در ادامه در کنسول Firebase، دستورالعملها را برای دانلود فایل پیکربندی
google-services.jsonدنبال کنید. - میتوانید از مراحل راهاندازی باقیمانده صرفنظر کنید، زیرا همه چیز از قبل در کد برنامه اولیه پیکربندی شده است. برنامه خود را در صفحه اصلی کنسول Firebase مشاهده خواهید کرد.
- فایل
google-services.json(که همین الان دانلود کردید) را در دایرکتوریmessaging/fcm-topics-codelab/starter/StockNewsApp/appکپی کنید.
۴. برنامه خود را بسازید و اجرا کنید
شما آمادهاید تا کار روی برنامهتان را شروع کنید! ابتدا، برنامه را بسازید و اجرا کنید.
برنامه شروع کننده را وارد کنید
اندروید استودیو را اجرا کنید و فایل messaging/fcm-topics-codelab/starter/StockNewsApp را از دایرکتوری کد استارتر وارد (import) کنید.
بعد از بارگذاری پروژه، ممکن است هشداری مبنی بر اینکه گیت تمام تغییرات محلی شما را ردیابی نمیکند، مشاهده کنید. میتوانید روی « نادیده گرفتن » یا « X » در بالا سمت راست کلیک کنید. (شما هیچ تغییری را به مخزن گیت ارسال نخواهید کرد.)
در گوشه سمت چپ بالای پنجره پروژه، اگر در نمای اندروید باشید، باید چیزی شبیه به تصویر زیر را ببینید. (اگر در نمای پروژه هستید، برای دیدن همین مورد باید پروژه را گسترش دهید)

لطفاً توجه داشته باشید که ممکن است کامپایل پروژه در پسزمینه برای اولین بار توسط اندروید استودیو چند ثانیه طول بکشد. در این مدت، یک چرخنده در نوار وضعیت پایین اندروید استودیو مشاهده خواهید کرد:

توصیه میکنیم قبل از ایجاد تغییرات در کد، تا پایان این مرحله صبر کنید. این کار به اندروید استودیو اجازه میدهد تا تمام اجزای لازم را دریافت کند.
علاوه بر این، اگر با پیامی با مضمون «برای اعمال تغییرات زبان، صفحه را مجدداً بارگذاری کنید؟» یا چیزی مشابه مواجه شدید، «بله» را انتخاب کنید.
راه اندازی شبیه ساز
اگر برای راهاندازی شبیهساز اندروید به کمک نیاز دارید، به مقاله اجرای برنامه خود مراجعه کنید.
کد شروع برنامه اندروید را درک کنید
- کد اولیه یک برنامه اندروید سبک با حداقل قابلیتها و رابط کاربری است.
- یک وابستگی به firebase-messaging SDK از قبل به فایل
app/build.gradleاضافه شده است.

- در فایل
AndroidManifest.xml، یک کنترلکنندهی فراخوانیMESSAGING_EVENTاز قبل اضافه شده است.- این هندلر،
StockNewsMessagingService.java، کلاسFirebaseMessagingServiceرا که قابلیتهای مختلف مرتبط با Firebase Cloud Messaging را ارائه میدهد، بسط میدهد. برای کسب اطلاعات بیشتر به مستندات FirebaseMessagingService مراجعه کنید.

- تابع
onNewTokenزمانی فراخوانی میشود که توکن ثبت FCM ایجاد یا بهروزرسانی شود. برای اطلاعات بیشتر به بخش نظارت بر تولید توکن مراجعه کنید. - تابع
onMessageReceivedزمانی فراخوانی میشود که پیامی دریافت شود و برنامه در پیشزمینه باشد. در حال حاضر، این تابع صرفاً پیام دریافتی را ثبت میکند.- برای کسب اطلاعات بیشتر در مورد تفاوتهای بین ارسال و مدیریت پیام در پسزمینه و پیشزمینه، به بخش دریافت پیام در یک برنامه اندروید مراجعه کنید.
- این هندلر،
- همچنین، در
AndroidManifest.xml، یک کلاس AndroidApplicationبا نامStockNewsApplicationارائه شده است.

- این کلاس اولین کلاسی خواهد بود که هنگام شروع برنامه، نمونهسازی میشود.
- در تابع
onCreateکلاسStockNewsApplication، یک فراخوانی برای ایجاد FCM Registration Token اضافه شده است. این تابع یک FCM Registration Token معتبر تولید و آن را ثبت میکند.
- فایل
MainActivity.javaیکRecyclerViewاضافه میکند که گزینههای دستهبندی موجودی را نمایش میدهد. -
SubscriptionAdapter.javaRecyclerView.Adapterرا پیادهسازی میکند که صفحه انتخاب دسته موجودی را ترسیم میکند.- هر دسته بندی سهام دارای یک نام و یک گزینه اشتراک در کنار آن است.
- تغییر این گزینه باید باعث ایجاد یک فراخوانی اشتراک/لغو اشتراک در تاپیک FCM شود.
- شما این فراخوانیها را در بخشهای بعدی پیادهسازی خواهید کرد.
- کلاس
model/StockCategories.javaشامل فهرستی از تمام دستههای سهام و نامهای موضوع مرتبط با آنها است.

برنامه شروع کننده را اجرا کنید
- دستگاه اندروید خود را به رایانه متصل کنید یا یک شبیهساز را اجرا کنید.
- در نوار ابزار بالا، دستگاه اندروید یا شبیهساز مورد نظر خود را انتخاب کنید و دکمه اجرا را فشار دهید.

- رابط کاربری برنامه به شکل زیر خواهد بود:

- برنامه یک FCM Registration Token ایجاد کرده و آن را ثبت میکند. با این حال، هیچ تغییری در رابط کاربری برنامه ایجاد نخواهد شد.
- توکن ثبت FCM را کپی و ذخیره کنید، زیرا در مراحل بعدی از آن استفاده خواهد شد.

۵. ارسال یک پیام آزمایشی
اکنون آماده ارسال یک پیام آزمایشی به نمونه برنامهای هستید که در مرحله قبل تنظیم کردهاید.
کد سرور اولیه را وارد کنید
IntelliJ IDEA را اجرا کنید و پروژه messaging/fcm-topics-codelab/starter/StockNewsServer را باز کنید.
نمای پروژه در نوار ناوبری سمت چپ شما باید چیزی شبیه به این باشد:

توجه داشته باشید، ممکن است ساخت پروژه شما، از جمله دریافت وابستگیهای مورد نیاز، توسط IntellIj IDEA چند دقیقه طول بکشد.
کد شروع سرور را درک کنید
- کد آغازین سرور یک پروژه جاوا مبتنی بر Gradle است.
- فایل
build.gradleاز قبل وابستگی به SDK مربوط به firebase-admin را دارد که به آن اضافه شده است. این SDK دسترسی به قابلیتهای مختلف ارسال پیام FCM را فراهم میکند.

- در نهایت، دو کلاس وجود دارد، یعنی:
-
FcmSender.java: این کلاس شامل متدهای زیر است:-
initFirebaseSDK: کیت توسعه نرمافزار firebase-admin را مقداردهی اولیه میکند. -
sendMessageToFcmRegistrationToken: ارسال پیام به یک توکن ثبت FCM. -
sendMessageToFcmTopic: ارسال پیام به یک تاپیک FCM. -
sendMessageToFcmTopicCondition: ارسال یک پیام به یک موضوع با شرط FCM.
-
-
FcmSubscriptionManager.java: این کلاس شامل متدهایی است که امکان مدیریت اشتراکهای موضوعی را از سمت سرور فراهم میکنند.-
initFirebaseSDK: کیت توسعه نرمافزار firebase-admin را مقداردهی اولیه میکند. -
subscribeFcmRegistrationTokensToTopic: توکن(های) ثبت نام FCM را در یک تاپیک FCM مشترک میکند. -
unsubscribeFcmRegistrationTokensFromTopic: لغو اشتراک توکن(های) ثبت FCM از یک تاپیک FCM.
-
-
تنظیم کد سرور
- ابتدا، باید یک حساب کاربری سرویس Firebase ایجاد کنیم که به firebase-admin SDK اجازه میدهد تا فراخوانیهای APIهای FCM را مجاز کند.
- به کنسول فایربیس بروید، روی نماد چرخدنده کنار نمای کلی پروژه در نوار ناوبری سمت چپ کلیک کنید و تنظیمات پروژه را انتخاب کنید.

- در صفحه تنظیمات، حسابهای سرویس (Service accounts) را انتخاب کرده و روی ایجاد حساب سرویس (Create service account) کلیک کنید.

- اکنون روی دکمهی «ایجاد کلید خصوصی جدید» کلیک کنید تا دانلود خودکار فایل کلید شما آغاز شود.
- فایل کلید را به
service-account.jsonتغییر نام دهید و آن را در پوشهmessaging/fcm-topics-codelab/starter/StockNewsServer/src/main/resourcesکپی کنید. - هر دو
FcmSender.javaوFcmSubscriptionManager.javaفایلservice-account.jsonرا با استفاده از کد زیر از classpath بارگذاری میکنند.
- به کنسول فایربیس بروید، روی نماد چرخدنده کنار نمای کلی پروژه در نوار ناوبری سمت چپ کلیک کنید و تنظیمات پروژه را انتخاب کنید.
- در این مرحله، کد سرور آماده است. از نوار منوی بالا، Build -> Build Project را اجرا کنید.
ارسال پیام آزمایشی
- در
FcmSender.javaتابعsendMessageToFcmRegistrationTokenرا پیدا کنید و توکن ثبت FCM که از بخش Run the starter app کپی کردهاید را در فیلدregistrationTokenوارد کنید. - در تابع
main، فقط تابعsendMessageToFcmRegistrationTokenرا از حالت کامنت خارج کنید و برای اجرای کد، روی run کلیک کنید.- مشاهده کنید که چگونه FCM Registration Token در فیلد
Tokenشیءmessageتنظیم شده است. - علاوه بر این، توجه کنید که چگونه از API
sendرابطFirebaseMessagingاستفاده کردهایم.
- مشاهده کنید که چگونه FCM Registration Token در فیلد

- این باید پیامی را به نمونه برنامهای که در مرحله قبل تنظیم کردهاید ارسال کند.
- وقتی نمونه برنامه در پیشزمینه است، باید محتوای پیام ثبتشده را ببینید.

- و وقتی نمونه برنامه در پسزمینه است، مشاهده خواهید کرد که پیام در قسمت اعلانها ظاهر میشود.

عالی شد، شما از Firebase Admin SDK برای ارسال پیام به یک نمونه برنامه استفاده کردید. درباره استفاده از Firebase Admin SDK در سرور خود بیشتر بخوانید.
۶. اشتراک/لغو اشتراک موضوعی را پیادهسازی کنید
در این مرحله، اقدامات اشتراک و لغو اشتراک موضوعی را در گزینه «رده سهام» برنامه اندروید پیادهسازی خواهید کرد.
وقتی کاربر برنامه، دکمهی مربوط به یک دستهی خاص از سهام را فعال یا غیرفعال میکند، یک فراخوانی برای اشتراک یا لغو اشتراک موضوعی انجام میشود.
کد را بررسی کنید
- به کلاس
SubscriptionAdapter.javaدر کد برنامه اندروید بروید و کلاسRecyclerViewViewHolderپیدا کنید.

- سازندهی کلاس با استفاده از
setOnCheckedChangeListenerیک شنونده برای فعال/غیرفعال کردن اشتراک ایجاد میکند. - بسته به دکمهی فعال/غیرفعال، اقدامات عضویت و لغو عضویت به ترتیب با فراخوانی متدهای
subscribeToStockCategoryوunsubscribeFromStockCategoryانجام میشوند. - متد
setDataتوسطonBindViewHolderمربوط به آداپتور RecyclerView فراخوانی میشود تا ViewHolder را با دسته موجودی مناسب پیوند دهد.
اشتراک موضوعی را پیادهسازی کنید
- در متد
subscribeToStockCategory، فراخوانی API مربوط بهsubscribeToTopicاز شیءFirebaseMessagingرا پیادهسازی خواهید کرد. کد میتواند چیزی شبیه به این باشد:
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، فراخوانی API برای
unsubscribeFromTopic) را پیادهسازی خواهید کرد. چیزی شبیه به موارد زیر:
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).- تفاوت این است که به جای تنظیم فیلد
Tokenاز شیءmessage، فیلد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فعال کنید.

ارسال پیام و تایید رسید
- قبل از ارسال پیام مربوط به موضوع، ابتدا مطمئن شوید که نمونه برنامه شما در موضوعی که میخواهید به آن پیام ارسال کنید، مشترک شده است.
- این کار را میتوان با چرخاندن دکمهی مربوطه انجام داد. برای مثال:

- اکنون میتوانید پیام موضوعی خود را با اجرای تابع
mainازFcmSender.javaارسال کنید. - مانند قبل، باید بتوانید رسید پیام را در نمونه برنامه مشاهده کنید.
- نمونه برنامه در پیشزمینه

- نمونه برنامه در پسزمینه

- نکتهی مثبت: سعی کنید از موضوعی که برایش پیام فرستادهاید، انصراف دهید و دوباره پیام را ارسال کنید. متوجه خواهید شد که پیام به نمونهی برنامه ارسال نمیشود.
۸. ارسال اولین پیام شرط موضوع
ویژگی شرط موضوع به شما امکان میدهد پیامها را به ترکیبی از موضوعات ارسال کنید که به شما امکان میدهد تعریف مخاطب رساتری ارائه دهید.
برای مثال، در برنامه StockNews ما، امکان ارسال پیام به گروهی از نمونههای برنامه که در موضوعات فناوری یا خودرو مشترک هستند را در نظر بگیرید. چنین موردی ممکن است رخ دهد، به عنوان مثال، اگر یک رویداد قابل توجه مربوط به Waymo وجود داشته باشد.
تاپیکها به شما این امکان را میدهند که ترکیب خود را در قالب یک عبارت بولی با استفاده از عملگرهای زیر بیان کنید.
- && : AND منطقی. برای مثال،
'Technology' in topics && 'Automotive' in topics- فقط نمونههای برنامهای را هدف قرار میدهد که در هر دو موضوع فناوری و خودرو مشترک هستند. - || : یا منطقی. برای مثال،
'Technology' in topics || 'Automotive' in topics- نمونههایی از برنامه را هدف قرار میدهد که در موضوعات فناوری یا خودرو مشترک هستند. - (): پرانتز برای گروهبندی. برای مثال،
'Technology' in topics && ('Automotive' in topics || 'Energy' in topics)- فقط نمونههای برنامهای را هدف قرار میدهد که در موضوعات فناوری و خودرو یا انرژی مشترک هستند.
درباره نحوه ساخت درخواستهای ارسال برای استفاده از این قابلیت بیشتر بخوانید.
پیادهسازی یکپارچهسازی سمت سرور برای ارسال پیام وضعیت موضوع
- به کد سرور برگردید، به
FcmSender.javaبروید و متدی با نامsendMessageToFcmTopicConditionرا پیدا کنید.

- در خط اول، برای متغیر
topicCondition، شرط موضوعی که میخواهید پیام به آن ارسال شود را وارد کنید. میتوانید آن را به صورت زیر تنظیم کنید:'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فعال کنید.

ارسال پیام و تایید رسید
- قبل از ارسال پیام موضوع، ابتدا با مشترک کردن نمونه برنامه در هر دو موضوع فناوری و خودرو، مطمئن شوید که نمونه برنامه شما شرایط موضوع مشخص شده را برآورده میکند.
- اکنون میتوانید پیام موضوعی خود را با اجرای تابع
mainازFcmSender.javaارسال کنید. - مانند قبل، باید بتوانید رسید پیام را در نمونه برنامه مشاهده کنید.
- نمونه برنامه در پیشزمینه

- نمونه برنامه در پسزمینه

- نکتهی مثبت: اکنون میتوانید از موضوع فناوری انصراف دهید و پیام وضعیت موضوع را دوباره ارسال کنید. باید مشاهده کنید که پیام توسط نمونهی برنامه دریافت نمیشود.
۹. خلاصه
بیایید خلاصهای سریع از آنچه تا به اینجا آموختهاید، ارائه دهیم.
- نحوه شروع اشتراک/لغو اشتراک یک موضوع از یک نمونه برنامه.
- ارسال پیام به تاپیک و تأیید دریافت در نمونههای برنامهی مشترکشده.
- ارسال پیام به یک موضوع با شرط و تأیید دریافت در یک نمونه برنامه که شرط را برآورده میکند.
در بخش بعدی، یاد خواهید گرفت که چگونه میتوانید نمونههای برنامه را در تاپیکها مشترک/لغو اشتراک کنید، بدون اینکه نیازی به نمونهسازی فراخوانیها از سمت کلاینت داشته باشید.

۱۰. مدیریت اشتراکهای موضوعی از سمت سرور
تاکنون، در این آزمایشگاه کد، تمام فراخوانیهای اشتراک و لغو اشتراک تاپیک از یک نمونه برنامه آغاز میشوند.
با این حال، در برخی موارد، ممکن است بخواهید اشتراکهای موضوعی را از سمت سرور مدیریت کنید. برای مثال، ممکن است بخواهید زیرگروهی از پایگاه کاربری فعلی خود را بدون انتظار برای انتشار برنامه، در یک موضوع جدید مشترک کنید.
در این بخش، یاد خواهید گرفت که چگونه از Firebase Admin SDK برای اشتراک و لغو اشتراک دستهای از توکنهای ثبت FCM در یک موضوع با برقراری تماس از سمت سرور استفاده کنید .
پیادهسازی اشتراک سمت سرور توکنهای ثبت FCM در تاپیک FCM
- در کد سرور، به کلاس
FcmSubscriptionManager.javaبروید. متدی با نامsubscribeFcmRegistrationTokensToTopicرا پیدا کنید. شما فراخوانی API مربوط بهsubscribeToTopicدر اینجا پیادهسازی خواهید کرد.

- بیایید نمونه برنامه را در تاپیک انرژی ثبت کنیم. برای انجام این کار، ابتدا دادههای مربوط به دو فیلد زیر را ارائه دهید:
-
registrationTokens: فهرستی از رشتههای جدا شده با کاما که نشاندهندهی FCM Registration Tokenهایی هستند که میخواهید برای آنها اشتراک موضوعی ایجاد کنید. -
topicName: نام تاپیک مربوط به مبحث انرژی، یعنی/topics/Energy.
-
- در چند خط بعدی، فراخوانی را در امتداد این خطوط پیادهسازی کنید:
TopicManagementResponse response = FirebaseMessaging.getInstance().subscribeToTopic(
registrationTokens, topicName);
- شما میتوانید
TopicManagementResponseبرای برخی آمار نتایج سطح بالا بررسی کنید. مانند چاپ تعداد اشتراکهای موفق ایجاد شده در موضوعات با استفاده ازgetSuccessCount.
System.out.printf("Num tokens successfully subscribed %d", response.getSuccessCount());
- در نهایت، در تابع
main، فراخوانیها را فقط برای تابعsubscribeFcmRegistrationTokensToTopicفعال کنید.
ایجاد اشتراک و ارسال پیام موضوعی
- در این مرحله شما آماده ایجاد اشتراک موضوع و ارسال پیام به آن هستید.
- تابع
mainاز کلاسFcmSubscriptionManager.javaرا اجرا کنید. این تابع یک اشتراک موضوعی ایجاد میکند. - حالا، کد ارسال پیام را تنظیم کنید. مشابه قبل،
- در فایل
FcmSender.java، تابعsendMessageToFcmTopicرا پیدا کنید. -
topicNameرا روی موضوع انرژی، یعنی/topics/Energy، تنظیم کنید. - یک شیء
Messageایجاد کنید و با استفاده ازsetTopicآن را به موضوع مورد نظر هدایت کنید. - در نهایت، متد
mainرا بهروزرسانی کنید تا فقط تابعsendMessageToFcmTopicفعال شود.
- در فایل
- تابع
mainاز فایلFcmSender.javaرا اجرا کنید. این کار پیام را به نمونه برنامه شما ارسال میکند و میتوانید آن را در برنامه خود به صورت زیر مشاهده کنید.- نمونه برنامه در پیشزمینه

- نمونه برنامه در پسزمینه

پیادهسازی لغو اشتراک توکنهای ثبت FCM در سمت سرور برای تاپیک FCM
- برای لغو اشتراک موضوع سمت سرور، از این API
unsubscribeFromTopicاستفاده کنید. کد مربوطه را به تابعunsubscribeFcmRegistrationTokensFromTopicاز کلاسFcmSubscriptionManager.javaاضافه خواهید کرد.

- پیادهسازی کد لغو اشتراک سمت سرور و اعتبارسنجی تأثیر آن با ارسال پیام موضوعی، به عنوان تمرین به شما واگذار میشود.
۱۱. تبریک
تبریک میگوییم، شما با موفقیت از تاپیکهای FCM برای ارسال پیامهای چندپخشی به زیرگروههای نمونههای برنامه خود استفاده کردید. این به شما کمک میکند تا به موقع به کاربران خود با محتوای مرتبط دسترسی پیدا کنید.

بعدش چی؟
حالا که آزمایشگاه کد خود را تکمیل کردهاید، با استفاده از راهنماهای زیر، موضوعات را برای پلتفرمهای دیگر امتحان کنید:

