اولین پیام فشار چندپخشی شما با استفاده از موضوعات FCM

۱. مقدمه

اهداف

در این آزمایشگاه کد، یاد خواهید گرفت که چگونه برنامه چند پلتفرمی خود را ابزاربندی کنید تا بتوانید پیام‌های 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 قرار دارد.

ایجاد یک پروژه فایربیس

  1. با استفاده از حساب گوگل خود وارد کنسول فایربیس شوید.
  2. برای ایجاد یک پروژه جدید، روی دکمه کلیک کنید و سپس نام پروژه را وارد کنید (برای مثال، StockNews ).
  3. روی ادامه کلیک کنید.
  4. در صورت درخواست، شرایط Firebase را مرور و قبول کنید و سپس روی ادامه کلیک کنید.
  5. (اختیاری) دستیار هوش مصنوعی را در کنسول Firebase (با نام "Gemini در Firebase") فعال کنید.
  6. برای این codelab، به گوگل آنالیتیکس نیاز ندارید ، بنابراین گزینه گوگل آنالیتیکس را غیرفعال کنید .
  7. روی ایجاد پروژه کلیک کنید، منتظر بمانید تا پروژه شما آماده شود و سپس روی ادامه کلیک کنید.

تبریک! شما پروژه Firebase خود را ایجاد کردید.

۳. پیکربندی برنامه Firebase مخصوص پلتفرم

بیشتر تغییرات کد مورد نیاز برای فعال کردن پشتیبانی Firebase از قبل در پروژه‌ای که روی آن کار می‌کنید بررسی شده‌اند. با این حال، برای افزودن پشتیبانی برای پلتفرم‌های موبایل، باید:

  • پلتفرم مورد نظر را در پروژه Firebase ثبت کنید
  • فایل پیکربندی مخصوص پلتفرم را دانلود کنید و آن را به کد اضافه کنید.

برای اهداف این آزمایشگاه کد، ما قصد داریم یک برنامه اندروید Firebase اضافه کنیم.

84e0b3199bef6d8a.png پیکربندی اندروید

  1. در کنسول فایربیس ، در بالای نوار ناوبری سمت چپ در چرخ‌دنده تنظیمات، گزینه تنظیمات پروژه (Project Settings) را انتخاب کنید و در صفحه عمومی (General) در زیر قسمت برنامه‌های شما (Your apps) روی آیکون اندروید (Android) کلیک کنید.

شما باید دیالوگ زیر را ببینید: 8254fc299e82f528.png

  1. مقدار مهمی که باید ارائه شود، نام بسته اندروید است. آن را روی com.ticker.stocknews تنظیم کنید.
    1. نام بسته‌ای که اینجا ارائه می‌شود باید با نامی که در AndroidManifest.xml کد اولیه StockNewsApp شما ارائه شده است، یکسان باشد. اگر می‌خواهید آن را پیدا کنید یا تغییر دهید، این مراحل را دنبال کنید:
      1. در پوشه‌ی StockNewsApp ، فایل app/src/main/AndroidManifest.xml را باز کنید.
      2. در عنصر manifest ، مقدار رشته‌ایِ ویژگیِ package ) را پیدا کنید. این مقدار، نام بسته‌ی اندروید (Android package name) است.
  1. در پنجره‌ی فایربیس، نام بسته‌ی کپی‌شده را در فیلد نام بسته‌ی اندروید (Android package name) جای‌گذاری کنید.
  2. برای این codelab به گواهی امضای اشکال‌زدایی SHA-1 نیازی ندارید، زیرا این برنامه منتشر نخواهد شد. این قسمت را خالی بگذارید.
  3. روی ثبت برنامه کلیک کنید.
  4. در ادامه در کنسول Firebase، دستورالعمل‌ها را برای دانلود فایل پیکربندی google-services.json دنبال کنید.
  5. می‌توانید از مراحل راه‌اندازی باقی‌مانده صرف‌نظر کنید، زیرا همه چیز از قبل در کد برنامه اولیه پیکربندی شده است. برنامه خود را در صفحه اصلی کنسول Firebase مشاهده خواهید کرد.
  6. فایل google-services.json (که همین الان دانلود کردید) را در دایرکتوری messaging/fcm-topics-codelab/starter/StockNewsApp/app کپی کنید.

۴. برنامه خود را بسازید و اجرا کنید

شما آماده‌اید تا کار روی برنامه‌تان را شروع کنید! ابتدا، برنامه را بسازید و اجرا کنید.

برنامه شروع کننده را وارد کنید

اندروید استودیو را اجرا کنید و فایل messaging/fcm-topics-codelab/starter/StockNewsApp را از دایرکتوری کد استارتر وارد (import) کنید.

بعد از بارگذاری پروژه، ممکن است هشداری مبنی بر اینکه گیت تمام تغییرات محلی شما را ردیابی نمی‌کند، مشاهده کنید. می‌توانید روی « نادیده گرفتن » یا « X » در بالا سمت راست کلیک کنید. (شما هیچ تغییری را به مخزن گیت ارسال نخواهید کرد.)

در گوشه سمت چپ بالای پنجره پروژه، اگر در نمای اندروید باشید، باید چیزی شبیه به تصویر زیر را ببینید. (اگر در نمای پروژه هستید، برای دیدن همین مورد باید پروژه را گسترش دهید)

b574ea0089ee87c6.png

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

4bc64eb3b99eb0ae.png

توصیه می‌کنیم قبل از ایجاد تغییرات در کد، تا پایان این مرحله صبر کنید. این کار به اندروید استودیو اجازه می‌دهد تا تمام اجزای لازم را دریافت کند.

علاوه بر این، اگر با پیامی با مضمون «برای اعمال تغییرات زبان، صفحه را مجدداً بارگذاری کنید؟» یا چیزی مشابه مواجه شدید، «بله» را انتخاب کنید.

راه اندازی شبیه ساز

اگر برای راه‌اندازی شبیه‌ساز اندروید به کمک نیاز دارید، به مقاله اجرای برنامه خود مراجعه کنید.

کد شروع برنامه اندروید را درک کنید

  • کد اولیه یک برنامه اندروید سبک با حداقل قابلیت‌ها و رابط کاربری است.
  • یک وابستگی به firebase-messaging SDK از قبل به فایل app/build.gradle اضافه شده است.

f04ff8f48d186dff.png

  • در فایل AndroidManifest.xml ، یک کنترل‌کننده‌ی فراخوانی MESSAGING_EVENT از قبل اضافه شده است.
    • این هندلر، StockNewsMessagingService.java ، کلاس FirebaseMessagingService را که قابلیت‌های مختلف مرتبط با Firebase Cloud Messaging را ارائه می‌دهد، بسط می‌دهد. برای کسب اطلاعات بیشتر به مستندات FirebaseMessagingService مراجعه کنید. b843c4d33ee53166.png
    88fad1960f4a6ff5.png
    • تابع onNewToken زمانی فراخوانی می‌شود که توکن ثبت FCM ایجاد یا به‌روزرسانی شود. برای اطلاعات بیشتر به بخش نظارت بر تولید توکن مراجعه کنید.
    • تابع onMessageReceived زمانی فراخوانی می‌شود که پیامی دریافت شود و برنامه در پیش‌زمینه باشد. در حال حاضر، این تابع صرفاً پیام دریافتی را ثبت می‌کند.
  • همچنین، در AndroidManifest.xml ، یک کلاس Android Application با نام StockNewsApplication ارائه شده است. a4982a8731492dfc.pngccde692f7f68dc5a.png
    • این کلاس اولین کلاسی خواهد بود که هنگام شروع برنامه، نمونه‌سازی می‌شود.
    • در تابع onCreate کلاس StockNewsApplication ، یک فراخوانی برای ایجاد FCM Registration Token اضافه شده است. این تابع یک FCM Registration Token معتبر تولید و آن را ثبت می‌کند.
  • فایل MainActivity.java یک RecyclerView اضافه می‌کند که گزینه‌های دسته‌بندی موجودی را نمایش می‌دهد.
  • SubscriptionAdapter.java RecyclerView.Adapter را پیاده‌سازی می‌کند که صفحه انتخاب دسته موجودی را ترسیم می‌کند.
    • هر دسته بندی سهام دارای یک نام و یک گزینه اشتراک در کنار آن است.
    • تغییر این گزینه باید باعث ایجاد یک فراخوانی اشتراک/لغو اشتراک در تاپیک FCM شود.
    • شما این فراخوانی‌ها را در بخش‌های بعدی پیاده‌سازی خواهید کرد.
  • کلاس model/StockCategories.java شامل فهرستی از تمام دسته‌های سهام و نام‌های موضوع مرتبط با آنها است.

b32663ec4e865a18.png

برنامه شروع کننده را اجرا کنید

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

5b27fc5b237e06b9.png

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

ff5b1a1c53231c54.png

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

۹۲۷eb66bc909f36b.png

۵. ارسال یک پیام آزمایشی

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

کد سرور اولیه را وارد کنید

IntelliJ IDEA را اجرا کنید و پروژه messaging/fcm-topics-codelab/starter/StockNewsServer را باز کنید.

نمای پروژه در نوار ناوبری سمت چپ شما باید چیزی شبیه به این باشد:

da20711f6527dff6.png

توجه داشته باشید، ممکن است ساخت پروژه شما، از جمله دریافت وابستگی‌های مورد نیاز، توسط IntellIj IDEA چند دقیقه طول بکشد.

کد شروع سرور را درک کنید

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

650fc733298588f8.png

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

تنظیم کد سرور

  1. ابتدا، باید یک حساب کاربری سرویس Firebase ایجاد کنیم که به firebase-admin SDK اجازه می‌دهد تا فراخوانی‌های APIهای FCM را مجاز کند.
    1. به کنسول فایربیس بروید، روی نماد چرخ‌دنده کنار نمای کلی پروژه در نوار ناوبری سمت چپ کلیک کنید و تنظیمات پروژه را انتخاب کنید. 8c2108d4d7c915e9.png
    2. در صفحه تنظیمات، حساب‌های سرویس (Service accounts) را انتخاب کرده و روی ایجاد حساب سرویس (Create service account) کلیک کنید. 84b128cc5dac0a85.png
    3. اکنون روی دکمه‌ی «ایجاد کلید خصوصی جدید» کلیک کنید تا دانلود خودکار فایل کلید شما آغاز شود.
    4. فایل کلید را به service-account.json تغییر نام دهید و آن را در پوشه messaging/fcm-topics-codelab/starter/StockNewsServer/src/main/resources کپی کنید.
    5. هر دو FcmSender.java و FcmSubscriptionManager.java فایل service-account.json را با استفاده از کد زیر از classpath بارگذاری می‌کنند. 8dffbee658e0bdd.png
  2. در این مرحله، کد سرور آماده است. از نوار منوی بالا، Build -> Build Project را اجرا کنید.

ارسال پیام آزمایشی

  1. در FcmSender.java تابع sendMessageToFcmRegistrationToken را پیدا کنید و توکن ثبت FCM که از بخش Run the starter app کپی کرده‌اید را در فیلد registrationToken وارد کنید.
  2. در تابع main ، فقط تابع sendMessageToFcmRegistrationToken را از حالت کامنت خارج کنید و برای اجرای کد، روی run کلیک کنید.
    1. مشاهده کنید که چگونه FCM Registration Token در فیلد Token شیء message تنظیم شده است.
    2. علاوه بر این، توجه کنید که چگونه از API send رابط FirebaseMessaging استفاده کرده‌ایم.

52e4a3ec3f816473.png

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

d3540ec1089f97dd.png

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

31203deca59c03fe.png

عالی شد، شما از Firebase Admin SDK برای ارسال پیام به یک نمونه برنامه استفاده کردید. درباره استفاده از Firebase Admin SDK در سرور خود بیشتر بخوانید.

۶. اشتراک/لغو اشتراک موضوعی را پیاده‌سازی کنید

در این مرحله، اقدامات اشتراک و لغو اشتراک موضوعی را در گزینه «رده سهام» برنامه اندروید پیاده‌سازی خواهید کرد.

وقتی کاربر برنامه، دکمه‌ی مربوط به یک دسته‌ی خاص از سهام را فعال یا غیرفعال می‌کند، یک فراخوانی برای اشتراک یا لغو اشتراک موضوعی انجام می‌شود.

کد را بررسی کنید

  • به کلاس SubscriptionAdapter.java در کد برنامه اندروید بروید و کلاس RecyclerViewViewHolder پیدا کنید.

6c0614199e684f6.png

  • سازنده‌ی کلاس با استفاده از setOnCheckedChangeListener یک شنونده برای فعال/غیرفعال کردن اشتراک ایجاد می‌کند.
  • بسته به دکمه‌ی فعال/غیرفعال، اقدامات عضویت و لغو عضویت به ترتیب با فراخوانی متدهای subscribeToStockCategory و unsubscribeFromStockCategory انجام می‌شوند.
  • متد setData توسط onBindViewHolder مربوط به آداپتور RecyclerView فراخوانی می‌شود تا ViewHolder را با دسته موجودی مناسب پیوند دهد.

اشتراک موضوعی را پیاده‌سازی کنید

  1. در متد 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();
          });
    }

پیاده‌سازی لغو اشتراک تاپیک

  1. به طور مشابه، در شرط 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();
          });
    }

بیایید آن را امتحان کنیم

  1. برنامه را اجرا کنید و گزینه‌های دسته بندی سهام را برای اجرای اقدامات اشتراک و لغو اشتراک تغییر دهید. چیزی شبیه به این خواهد بود:

اشتراک

لغو اشتراک

۷. ارسال اولین پیام موضوعی شما

در این مرحله، کد سمت سرور را برای ارسال پیام موضوعی FCM پیاده‌سازی خواهید کرد.

پیاده‌سازی یکپارچه‌سازی سمت سرور برای ارسال پیام موضوعی

  1. در کد سرور، به FcmSender.java بروید و متدی با نام sendMessageToFcmTopic را پیدا کنید.

56381dd1b40cde9c.png

  1. در خط اول، موضوع FCM که می‌خواهید پیام را برایش ارسال کنید، مشخص کنید.
    • این یک رشته به شکل /topics/<Topic Name> است. برای مثال، /topics/Technology .
  2. در خطوط بعدی یک شیء 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();
  1. حالا فراخوانی را به نمونه FirebaseMessaging اضافه کنید تا پیام ارسال شود (مشابه فراخوانی ارسال که در تابع sendMessageToFcmRegistrationToken انجام شد).
FirebaseMessaging.getInstance().send(message);
  1. در نهایت، تابع main را به‌روزرسانی کنید و فراخوانی را فقط برای تابع sendMessageToFcmTopic فعال کنید.

9a6aa08dd7c28898.png

ارسال پیام و تایید رسید

  1. قبل از ارسال پیام مربوط به موضوع، ابتدا مطمئن شوید که نمونه برنامه شما در موضوعی که می‌خواهید به آن پیام ارسال کنید، مشترک شده است.
    1. این کار را می‌توان با چرخاندن دکمه‌ی مربوطه انجام داد. برای مثال:
    ۴۶۶۸۲۴۷۴۰۸۳۷۷۱۲.png
  2. اکنون می‌توانید پیام موضوعی خود را با اجرای تابع main از FcmSender.java ارسال کنید.
  3. مانند قبل، باید بتوانید رسید پیام را در نمونه برنامه مشاهده کنید.
    1. نمونه برنامه در پیش‌زمینه
    c144721399f610fe.png
    1. نمونه برنامه در پس‌زمینه
    44efc7dfd57e8e9a.png
  4. نکته‌ی مثبت: سعی کنید از موضوعی که برایش پیام فرستاده‌اید، انصراف دهید و دوباره پیام را ارسال کنید. متوجه خواهید شد که پیام به نمونه‌ی برنامه ارسال نمی‌شود.

۸. ارسال اولین پیام شرط موضوع

ویژگی شرط موضوع به شما امکان می‌دهد پیام‌ها را به ترکیبی از موضوعات ارسال کنید که به شما امکان می‌دهد تعریف مخاطب رساتری ارائه دهید.

برای مثال، در برنامه StockNews ما، امکان ارسال پیام به گروهی از نمونه‌های برنامه که در موضوعات فناوری یا خودرو مشترک هستند را در نظر بگیرید. چنین موردی ممکن است رخ دهد، به عنوان مثال، اگر یک رویداد قابل توجه مربوط به Waymo وجود داشته باشد.

تاپیک‌ها به شما این امکان را می‌دهند که ترکیب خود را در قالب یک عبارت بولی با استفاده از عملگرهای زیر بیان کنید.

  • && : AND منطقی. برای مثال، 'Technology' in topics && 'Automotive' in topics - فقط نمونه‌های برنامه‌ای را هدف قرار می‌دهد که در هر دو موضوع فناوری و خودرو مشترک هستند.
  • || : یا منطقی. برای مثال، 'Technology' in topics || 'Automotive' in topics - نمونه‌هایی از برنامه را هدف قرار می‌دهد که در موضوعات فناوری یا خودرو مشترک هستند.
  • (): پرانتز برای گروه‌بندی. برای مثال، 'Technology' in topics && ('Automotive' in topics || 'Energy' in topics) - فقط نمونه‌های برنامه‌ای را هدف قرار می‌دهد که در موضوعات فناوری و خودرو یا انرژی مشترک هستند.

درباره نحوه ساخت درخواست‌های ارسال برای استفاده از این قابلیت بیشتر بخوانید.

پیاده‌سازی یکپارچه‌سازی سمت سرور برای ارسال پیام وضعیت موضوع

  1. به کد سرور برگردید، به FcmSender.java بروید و متدی با نام sendMessageToFcmTopicCondition را پیدا کنید.

3719a86c274522cf.png

  1. در خط اول، برای متغیر topicCondition ، شرط موضوعی که می‌خواهید پیام به آن ارسال شود را وارد کنید. می‌توانید آن را به صورت زیر تنظیم کنید: 'Technology' in topics && 'Automotive' in topics .
  2. در خطوط بعدی، یک شیء message جدید ایجاد کنید (مشابه شیء تعریف شده در تابع sendMessageToFcmTopic ).
    1. تفاوت این است که به جای تنظیم فیلد 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();
  1. حالا فراخوانی را به نمونه FirebaseMessaging اضافه کنید تا پیام ارسال شود (مشابه فراخوانی ارسال انجام شده در تابع sendMessageToFcmTopic ).
FirebaseMessaging.getInstance().send(message);
  1. در نهایت، تابع main را به‌روزرسانی کنید و فراخوانی را فقط برای تابع sendMessageToFcmTopicCondition فعال کنید.

db9588d40d2a0da6.png

ارسال پیام و تایید رسید

  1. قبل از ارسال پیام موضوع، ابتدا با مشترک کردن نمونه برنامه در هر دو موضوع فناوری و خودرو، مطمئن شوید که نمونه برنامه شما شرایط موضوع مشخص شده را برآورده می‌کند.
  2. اکنون می‌توانید پیام موضوعی خود را با اجرای تابع main از FcmSender.java ارسال کنید.
  3. مانند قبل، باید بتوانید رسید پیام را در نمونه برنامه مشاهده کنید.
    1. نمونه برنامه در پیش‌زمینه
    6f612ace15aa6515.png
    1. نمونه برنامه در پس‌زمینه
    78044a56ac2359cb.png
  4. نکته‌ی مثبت: اکنون می‌توانید از موضوع فناوری انصراف دهید و پیام وضعیت موضوع را دوباره ارسال کنید. باید مشاهده کنید که پیام توسط نمونه‌ی برنامه دریافت نمی‌شود.

۹. خلاصه

بیایید خلاصه‌ای سریع از آنچه تا به اینجا آموخته‌اید، ارائه دهیم.

  • نحوه شروع اشتراک/لغو اشتراک یک موضوع از یک نمونه برنامه.
  • ارسال پیام به تاپیک و تأیید دریافت در نمونه‌های برنامه‌ی مشترک‌شده.
  • ارسال پیام به یک موضوع با شرط و تأیید دریافت در یک نمونه برنامه که شرط را برآورده می‌کند.

در بخش بعدی، یاد خواهید گرفت که چگونه می‌توانید نمونه‌های برنامه را در تاپیک‌ها مشترک/لغو اشتراک کنید، بدون اینکه نیازی به نمونه‌سازی فراخوانی‌ها از سمت کلاینت داشته باشید.

c0dc20655d392690.gif

۱۰. مدیریت اشتراک‌های موضوعی از سمت سرور

تاکنون، در این آزمایشگاه کد، تمام فراخوانی‌های اشتراک و لغو اشتراک تاپیک از یک نمونه برنامه آغاز می‌شوند.

با این حال، در برخی موارد، ممکن است بخواهید اشتراک‌های موضوعی را از سمت سرور مدیریت کنید. برای مثال، ممکن است بخواهید زیرگروهی از پایگاه کاربری فعلی خود را بدون انتظار برای انتشار برنامه، در یک موضوع جدید مشترک کنید.

در این بخش، یاد خواهید گرفت که چگونه از Firebase Admin SDK برای اشتراک و لغو اشتراک دسته‌ای از توکن‌های ثبت FCM در یک موضوع با برقراری تماس از سمت سرور استفاده کنید .

پیاده‌سازی اشتراک سمت سرور توکن‌های ثبت FCM در تاپیک FCM

  1. در کد سرور، به کلاس FcmSubscriptionManager.java بروید. متدی با نام subscribeFcmRegistrationTokensToTopic را پیدا کنید. شما فراخوانی API مربوط به subscribeToTopic در اینجا پیاده‌سازی خواهید کرد.

5d5709e7b3cbcb04.png

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

ایجاد اشتراک و ارسال پیام موضوعی

  1. در این مرحله شما آماده ایجاد اشتراک موضوع و ارسال پیام به آن هستید.
  2. تابع main از کلاس FcmSubscriptionManager.java را اجرا کنید. این تابع یک اشتراک موضوعی ایجاد می‌کند.
  3. حالا، کد ارسال پیام را تنظیم کنید. مشابه قبل،
    1. در فایل FcmSender.java ، تابع sendMessageToFcmTopic را پیدا کنید.
    2. topicName را روی موضوع انرژی، یعنی /topics/Energy ، تنظیم کنید.
    3. یک شیء Message ایجاد کنید و با استفاده از setTopic آن را به موضوع مورد نظر هدایت کنید.
    4. در نهایت، متد main را به‌روزرسانی کنید تا فقط تابع sendMessageToFcmTopic فعال شود.
  4. تابع main از فایل FcmSender.java را اجرا کنید. این کار پیام را به نمونه برنامه شما ارسال می‌کند و می‌توانید آن را در برنامه خود به صورت زیر مشاهده کنید.
    1. نمونه برنامه در پیش‌زمینه
    40ab6cf71e0e4116.png
    1. نمونه برنامه در پس‌زمینه
    8fba81037198209e.png

پیاده‌سازی لغو اشتراک توکن‌های ثبت FCM در سمت سرور برای تاپیک FCM

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

8d9e8ea9d34016bd.png

  1. پیاده‌سازی کد لغو اشتراک سمت سرور و اعتبارسنجی تأثیر آن با ارسال پیام موضوعی، به عنوان تمرین به شما واگذار می‌شود.

۱۱. تبریک

تبریک می‌گوییم، شما با موفقیت از تاپیک‌های FCM برای ارسال پیام‌های چندپخشی به زیرگروه‌های نمونه‌های برنامه خود استفاده کردید. این به شما کمک می‌کند تا به موقع به کاربران خود با محتوای مرتبط دسترسی پیدا کنید.

۹۴۷def3eb33b1e4a.gif

بعدش چی؟

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

اسناد مرجع