הודעת הדחיפה הראשונה שלך ב-Multicast באמצעות נושאי FCM

1. מבוא

מטרות עסקיות

ב-codelab הזה תלמדו איך להתקין מודולים באפליקציה שלכם לפלטפורמות שונות כדי שתוכלו לשלוח הודעות push ב-multicast לקבוצות משנה שונות של מכונות האפליקציה באמצעות נושאי FCM.

בסיום, תוכלו להשתמש בתשתית של FCM כדי לנהל את קבוצות המשנה האלה, וגם לשלוח הודעות דחיפה (push) למספר משתמשים בו-זמנית (multicast) דרך קבוצות המשנה.

סקירה כללית של הנושאים

נושאים הם דרך נתמכת בתשתית של FCM לשלוח הודעות לקבוצות משנה של מכונות האפליקציה.

FCM מספק את ממשקי ה-API לשליחת הודעות ולתחזוקה של מינויים לנושאים האלה. פעולת השיוך וההפרדה של מכונה של אפליקציה לנושא נקראת הרשמה וביטול הרשמה, בהתאמה.

כדאי להשתמש בנושאים לתוכן שגלוי לכולם. לדוגמה, הודעות על עדכוני מזג אוויר. אם אתם רוצים לשלוח הודעות עם מידע אישי רגיש של משתמשים, תוכלו להשתמש ב-Firebase Admin SDK כדי לשלוח הודעות למספר משתמשים בו-זמנית במספר מכשירים.

השידור הקבוצתי מבוסס-הנושאים עבר אופטימיזציה לשיפור הקצב של העברת הנתונים.

מה תלמדו

  • איך להירשם (לבטל הרשמה) משתמשים לנושאים מאפליקציה לנייד.
  • איך שולחים הודעות דחיפה למספר נמענים באמצעות נושאים.
  • איך שולחים הודעות לשילוב של נושאים באמצעות תנאי נושאים.
  • איך לנהל מינויים לנושאים בצד השרת, לבצע מינויים בכמות גדולה ולבטל מינויים בכמות גדולה.

מה תפַתחו

  • אפליקציה ל-Android שמשתמשים בה כדי להירשם לנושאים או לבטל את ההרשמה אליהם, ומקבלת הודעות שנשלחות לנושאים האלה.
  • שילוב בצד השרת באמצעות Firebase Admin SDK, שישמש לשליחת הודעות בנושאים באמצעות ממשקי FCM API.

מה צריך להכין

  • דפדפן לבחירתכם, כמו Chrome.
  • סביבת הפיתוח המשולבת (IDE) IntelliJ IDEA לפיתוח אפליקציות Java.
    • חשוב להביע הסכמה לתמיכה ב-Gradle במהלך ההתקנה.
  • סביבת הפיתוח המשולבת (IDE) Android Studio לפיתוח אפליקציות ל-Android.
  • מכשיר להפעלת אפליקציית Android. אחת משתי האפשרויות:
    • אמולטור Android. (נדרשת הגדרה ב-Android Studio).
    • מכשיר Android פיזי שמחובר למחשב ומוגדר למצב פיתוח.
  • חשבון Google ליצירה ולניהול של פרויקט Firebase.

2. תהליך ההגדרה

קבלת הקוד

משכפלים את המאגר ב-GitHub משורת הפקודה:

git clone https://github.com/firebase/quickstart-android.git fcm-codelab

הקוד לדוגמה יועתק לספרייה fcm-codelab.

cd fcm-codelab

האפליקציה הבסיסית של סדנת הקוד הזו נמצאת בספרייה messaging בהסתעפות fcm-topics-codelab. כדי להגיע לקוד ההתחלה, מבצעים את השלבים הבאים. הוא מכיל שתי ספריות: StockNewsApp ו-StockNewsServer. קובץ ה-zip הראשון מכיל את אפליקציית Android להתחלה, והקובץ השני מכיל את הקוד להתחלה בצד השרת.

git checkout fcm-topics-codelab
cd messaging/fcm-topics-codelab/starter

הגרסה המושלמת של הקוד ב-codelab הזה תופיע בספרייה messaging/fcm-topics-codelab/completed.

יצירת פרויקט Firebase

  1. במסוף Firebase, לוחצים על Add project (הוספת פרויקט), נותנים שם לפרויקט ב-Firebase (StockNews) ולוחצים על Continue (המשך). הערה: חשוב לזכור את מזהה הפרויקט ב-Firebase (או ללחוץ על הסמל Edit (עריכה) כדי להגדיר את מזהה הפרויקט המועדף).

fc08f9a7808e4553.png

  1. אפשר לדלג על הפעלת Google Analytics. לצורכי הקודלאב הזה, אין צורך בכך. לוחצים על המשך.
  2. לוחצים על Create project.

כל הכבוד! סיימתם ליצור את פרויקט Firebase. עכשיו אפשר ללחוץ על שם הפרויקט כדי להיכנס למסוף.

3. הגדרת אפליקציה ספציפית לפלטפורמה ב-Firebase

רוב השינויים בקוד שנדרשים כדי להפעיל תמיכה ב-Firebase כבר נמצאים בפרויקט שבו אתם עובדים. עם זאת, כדי להוסיף תמיכה בפלטפורמות לנייד, צריך:

  • רישום הפלטפורמה הרצויה בפרויקט Firebase
  • מורידים את קובץ התצורה הספציפי לפלטפורמה ומוסיפים אותו לקוד.

במסגרת הקודלאב הזה, נוסיף אפליקציית Android ל-Firebase.

84e0b3199bef6d8a.pngהגדרת Android

  1. במסוף Firebase, בוחרים באפשרות Project Settings (הגדרות הפרויקט) בחלק העליון של סרגל הניווט הימני, בסמל גלגל השיניים של ההגדרות, ולוחצים על הסמל Android בקטע Your apps (האפליקציות שלך) בדף General (כללי).

אמורה להופיע תיבת הדו-שיח הבאה : 8254fc299e82f528.png

  1. הערך החשוב שצריך לציין הוא שם החבילה ל-Android. מגדירים אותו כ-com.ticker.stocknews.
    1. שם החבילה שצריך לציין כאן חייב להיות זהה לשם שצוין ב-AndroidManifest.xml של קוד ה-starter‏ StockNewsApp. כדי לאתר או לשנות אותו, פועלים לפי השלבים הבאים:
      1. בספרייה StockNewsApp, פותחים את הקובץ app/src/main/AndroidManifest.xml.
      2. ברכיב manifest, מחפשים את ערך המחרוזת של המאפיין package. הערך הזה הוא שם החבילה ב-Android.
  1. בתיבת הדו-שיח של Firebase, מדביקים את שם החבילה שהעתקתם בשדה Android package name.
  2. לא צריך את האישור לחתימה לצורך ניפוי באגים SHA-1 בסדנת הקוד הזו, כי האפליקציה הזו לא תפורסם. משאירים את השדה הזה ריק.
  3. לוחצים על Register App.
  4. ממשיכים במסוף Firebase ופועלים לפי ההוראות כדי להוריד את קובץ התצורה google-services.json.
  5. אפשר לדלג על שאר שלבי ההגדרה, כי כל השאר כבר מוגדר בקוד של אפליקציית ההתחלה. האפליקציה תופיע בדף הראשי של מסוף Firebase.
  6. מעתיקים את הקובץ google-services.json (שהורדתם עכשיו) לספרייה messaging/fcm-topics-codelab/starter/StockNewsApp/app.

4. פיתוח והרצה של האפליקציה

עכשיו אפשר להתחיל לעבוד על האפליקציה. קודם כל, צריך ליצור ולהריץ את האפליקציה.

ייבוא האפליקציה לתחילת הדרך

מפעילים את Android Studio ומביאים את messaging/fcm-topics-codelab/starter/StockNewsApp מהספרייה של קוד ההתחלה.

אחרי שהפרויקט נטען, יכול להיות שתופיע גם התראה על כך ש-Git לא עוקב אחרי כל השינויים המקומיים. אפשר ללחוץ על Ignore (התעלמות) או על X בפינה השמאלית העליונה. (לא תדחפו שינויים בחזרה למאגר Git).

אם אתם בתצוגה Android, בפינה הימנית העליונה של חלון הפרויקט אמור להופיע משהו שדומה לתמונה שבהמשך. (אם אתם בתצוגה Project, תצטרכו להרחיב את הפרויקט כדי לראות את אותו הדבר)

b574ea0089ee87c6.png

לתשומת ליבכם: יכול להיות שיחלפו כמה שניות עד ש-Android Studio יתעדכן את הפרויקט ברקע בפעם הראשונה. במהלך הזמן הזה יופיע סמל ספינר בשורת הסטטוס שבתחתית Android Studio:

4bc64eb3b99eb0ae.png

מומלץ להמתין עד שהפעולה הזו תסתיים לפני שמבצעים שינויים בקוד. כך Android Studio תוכל לשלוף את כל הרכיבים הנדרשים.

בנוסף, אם מופיעה ההודעה 'רוצים לטעון מחדש כדי שהשינויים בשפה ייכנסו לתוקף?' או הודעה דומה, בוחרים באפשרות 'כן'.

הגדרת המהדר

אם אתם זקוקים לעזרה בהגדרה של אמולטור Android, תוכלו לעיין במאמר הרצת האפליקציה.

הסבר על קוד ההתחלה של אפליקציות ל-Android

  • קוד ההתחלה הוא אפליקציית Android קלה עם פונקציונליות וממשק משתמש מינימליים.
  • כבר נוספה תלות ב-firebase-messaging SDK לקובץ app/build.gradle.

f04ff8f48d186dff.png

  • ב-AndroidManifest.xml כבר נוסף טיפול בקריאה חוזרת (callback) של MESSAGING_EVENT.
    • הטיפול הזה, StockNewsMessagingService.java, הוא תוספת לכיתה FirebaseMessagingService שמספקת פונקציונליות שקשורה להעברת הודעות בענן ב-Firebase. מידע נוסף זמין במסמכי התיעוד של FirebaseMessagingService. b843c4d33ee53166.png
    88fad1960f4a6ff5.png
    • הפונקציה onNewToken נקראת כשאסימון הרישום ב-FCM נוצר או מתעדכן. מידע נוסף זמין במאמר מעקב אחר יצירת אסימונים.
    • הפונקציה onMessageReceived נקראת כשמתקבלת הודעה והאפליקציה בחזית. נכון לעכשיו, המערכת רק מתעדת את ההודעה שהתקבלה.
  • בנוסף, ב-AndroidManifest.xml קיימת גם כיתה Application של Android בשם StockNewsApplication. a4982a8731492dfc.pngccde692f7f68dc5a.png
    • הכיתה הזו תהיה הראשונה שתיווצר כשהאפליקציה תופעל.
    • בפונקציה onCreate של הכיתה StockNewsApplication, מתווספת קריאה ליצירת אסימון רישום של FCM. הוא ייצור טוקן הרשמה חוקי ל-FCM וירשום אותו ביומן.
  • ה-MainActivity.java מוסיף את ה-RecyclerView שמוצגות בו האפשרויות של קטגוריית המלאי.
  • SubscriptionAdapter.java מיישם את RecyclerView.Adapter, שמצייר את מסך הבחירה של קטגוריית המלאי.
    • לכל קטגוריית מניות יש שם ולחצן החלפת מצב של המינוי לצדה.
    • שינוי המתג אמור להפעיל קריאה להרשמה או לביטול הרשמה לנושא ב-FCM.
    • תבצעו את ההפעלה של הקריאות האלה בקטעים הבאים.
  • הכיתה model/StockCategories.java מכילה רשימה של כל קטגוריות המניות ושמות הנושאים המשויכים אליהן.

b32663ec4e865a18.png

הפעלת האפליקציה למתחילים

  1. מחברים את מכשיר Android למחשב או מפעילים אמולטור.
  2. בסרגל הכלים העליון, בוחרים את מכשיר היעד או את הסימולטור של Android ולוחצים על לחצן ההפעלה.

5b27fc5b237e06b9.png

  1. ממשק המשתמש של האפליקציה ייראה כך:

ff5b1a1c53231c54.png

  1. האפליקציה תיצור אסימון רישום ל-FCM ותתעד אותו ביומן. עם זאת, ממשק המשתמש של האפליקציה לא ישתנה.
    1. מעתיקים ושומרים את אסימון הרישום של FCM, כי תצטרכו אותו בשלבים הבאים.

927eb66bc909f36b.png

5. שליחת הודעת בדיקה

עכשיו אתם מוכנים לשלוח הודעת בדיקה למכונה של האפליקציה שהגדרתם בשלב האחרון.

ייבוא קוד השרת לתחילת הדרך

מריצים את IntelliJ IDEA ופותחים את הפרויקט messaging/fcm-topics-codelab/starter/StockNewsServer.

תצוגת הפרויקט בסרגל הניווט הימני אמורה להיראות כך:

da20711f6527dff6.png

הערה: יכול להיות שיחלפו כמה דקות עד ש-IntelliJ IDEA תבנה את הפרויקט, כולל משיכת יחסי התלות הנדרשים.

הסבר על קוד ההתחלה של השרת

  • קוד ההתחלה של השרת הוא פרויקט Java שמבוסס על Gradle.
  • התלות ב-firebase-admin SDK כבר נוספה לקובץ build.gradle. ה-SDK הזה מספק גישה לפונקציונליות שונות לשליחת הודעות ב-FCM.

650fc733298588f8.png

  • לסיום, יש שתי כיתות:
    • FcmSender.java: המחלקה הזו מכילה את השיטות הבאות של הערות:
      • initFirebaseSDK: הפעלת ה-SDK של firebase-admin.
      • sendMessageToFcmRegistrationToken: שולחים הודעה לאסימון רישום של FCM.
      • sendMessageToFcmTopic: שליחת הודעה לנושא ב-FCM.
      • sendMessageToFcmTopicCondition: שליחת הודעה לתנאי של נושא FCM.
    • FcmSubscriptionManager.java: הכיתה הזו מכילה שיטות שמאפשרות לנהל מינויים לנושאים מצד השרת.
      • initFirebaseSDK: הפעלת ה-SDK של firebase-admin.
      • subscribeFcmRegistrationTokensToTopic: הרשמה של אסימוני רישום ב-FCM לנושא ב-FCM.
      • unsubscribeFcmRegistrationTokensFromTopic: ביטול הרשמה של אסימוני רישום ב-FCM מנושא ב-FCM.

הגדרת קוד השרת

  1. קודם כול, צריך להגדיר חשבון שירות ב-Firebase שמאפשר ל-firebase-admin SDK להעניק הרשאה לשיחות ל-FCM APIs.
    1. נכנסים למסוף Firebase, לוחצים על סמל גלגל השיניים לצד סקירה כללית של הפרויקט בסרגל הניווט הימני ובוחרים באפשרות הגדרות הפרויקט. 8c2108d4d7c915e9.png
    2. בדף ההגדרות, בוחרים באפשרות Service accounts ולוחצים על Create service account. 84b128cc5dac0a85.png
    3. עכשיו לוחצים על הלחצן Generate new private key (יצירת מפתח פרטי חדש) וההורדה האוטומטית של קובץ המפתח תתחיל.
    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. בשלב הזה, קוד השרת מוכן. Run Build -> Build Project בסרגל התפריטים העליון.

שליחת הודעת בדיקה

  1. בקטע FcmSender.java, מאתרים את הפונקציה sendMessageToFcmRegistrationToken ומזינים את אסימון הרישום של FCM שהעתקתם מהקטע הפעלת האפליקציה למתחילים בשדה registrationToken.
  2. בפונקציה main, מסירים את ההערה רק מהפונקציה sendMessageToFcmRegistrationToken ולוחצים על 'הפעלה' כדי להריץ את הקוד.
    1. שימו לב לאופן שבו אסימון ההרשמה ל-FCM מוגדר בשדה Token של האובייקט message.
    2. בנוסף, שימו לב איך השתמשנו ב-API של send בממשק FirebaseMessaging.

52e4a3ec3f816473.png

  1. הפקודה הזו אמורה לשלוח הודעה למכונה של האפליקציה שהגדרתם בשלב הקודם.
  2. כשמכונה של האפליקציה נמצאת בחזית, תוכן ההודעה אמור להופיע ביומן.

d3540ec1089f97dd.png

  1. כשמכונה של אפליקציה פועלת ברקע, ההודעה מופיעה במגש ההתראות.

31203deca59c03fe.png

מצוין, השתמשתם ב-Firebase Admin SDK כדי לשלוח הודעות למופע של אפליקציה. מידע נוסף על שימוש ב-Firebase Admin SDK בשרת

6. הטמעת מינוי לנושאים או ביטול המינוי לנושאים

בשלב הזה תרתמו פעולות של הרשמה לנושאים והסרה של הרשמה לנושאים, בלחצן החלפת המצב של קטגוריית המניות באפליקציה ל-Android.

כשמשתמש באפליקציה מפעיל או משבית את המתג של קטגוריית מניות מסוימת, מתבצעת קריאה להרשמה לנושא או לביטול ההרשמה לנושא.

בדיקת הקוד

  • עוברים לכיתה SubscriptionAdapter.java בקוד של אפליקציית Android ומאתרים את הכיתה RecyclerViewViewHolder.

6c0614199e684f6.png

  • באמצעות setOnCheckedChangeListener, ב-constructor של הכיתה מוגדר מאזין למתג ההרשמה.
  • בהתאם למצב המתג, פעולות ההרשמה והביטול מתבצעות על ידי קריאה לשיטות subscribeToStockCategory ו-unsubscribeFromStockCategory, בהתאמה.
  • השיטה setData נקראת על ידי onBindViewHolder של RecyclerView Adapter כדי לקשר את 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. באופן דומה, בתנאים אחרים, תטמיעו את הקריאה ל-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. מריצים את האפליקציה ומפעילים או משביתים את האפשרויות של קטגוריית המניות כדי לבצע פעולות של הרשמה ופעולות של ביטול הרשמה. זה ייראה בערך כך:

הרשמה

ביטול ההרשמה

7. שליחת ההודעה הראשונה בנושא

בשלב הזה תטמיעו קוד בצד השרת כדי לשלוח הודעת נושא ב-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. אפשר לעשות זאת על ידי החלפת המצב של המתג המתאים. לדוגמה:
    4668247408377712.png
  2. עכשיו אפשר לשלוח את הודעת הנושא על ידי הפעלת הפונקציה main של FcmSender.java.
  3. כמו קודם, אתם אמורים לראות את אישור הקבלה של ההודעה במכונה של האפליקציה.
    1. מופע של אפליקציה בחזית
    c144721399f610fe.png
    1. מופע של אפליקציה ברקע
    44efc7dfd57e8e9a.png
  4. בונוס: אפשר לנסות לבטל את ההרשמה לנושא שאליו שלחתם את ההודעה ולשלוח אותה שוב. תוכלו לראות שההודעה לא נמסרת למכונה של האפליקציה.

8. שליחת ההודעה הראשונה של תנאי הנושא

התכונה 'תנאי נושא' מאפשרת לכם לשלוח הודעות לשילוב של נושאים, וכך להגדיר את קהל היעד בצורה מדויקת יותר.

לדוגמה, באפליקציית StockNews שלנו, כדאי לשלוח הודעות לקבוצה של מכונות של האפליקציה שהמשתמשים בהן רשומים לנושאי טכנולוגיה או רכב. מקרה כזה עשוי להתרחש, למשל, אם יש אירוע משמעותי שקשור ל-Waymo.

בעזרת Topics אפשר לבטא את השילוב שלכם בצורת ביטוי בוליאני באמצעות האופרטורים הבאים:

  • && : 'וגם' לוגי. לדוגמה, '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. לפני שליחת הודעת הנושא, צריך לוודא שמכונה של האפליקציה עומדת בתנאי הנושא שצוין. לשם כך, צריך להירשם למכונה של האפליקציה גם לנושא Technology וגם לנושא Automotive.
  2. עכשיו אפשר לשלוח את הודעת הנושא על ידי הפעלת הפונקציה main של FcmSender.java.
  3. כמו קודם, אמורה להופיע הודעה על קבלת ההודעה במכונה של האפליקציה.
    1. מופע של אפליקציה בחזית
    6f612ace15aa6515.png
    1. מופע של אפליקציה ברקע
    78044a56ac2359cb.png
  4. בונוס: עכשיו אפשר לבטל את ההרשמה לנושא Technology ולשלוח מחדש את הודעת התנאי של הנושא. שימו לב שההודעה לא מתקבלת במכונה של האפליקציה.

9. תקציר

בואו נסכם במהירות את מה שלמדתם עד עכשיו.

  • איך מתחילים מינוי לנושא או מבטלים מינוי לנושא ממכונה של אפליקציה.
  • שליחת הודעה לנושא ואימות הקבלה במכונות של האפליקציה שנרשמו.
  • שליחת הודעה לתנאי של נושא ואימות הקבלה במכונה של האפליקציה שעומדת בתנאי.

בקטע הבא תלמדו איך להירשם לנושאים או לבטל את ההרשמה של מכונות אפליקציה לנושאים, בלי צורך ליצור קריאות מצד הלקוח.

c0dc20655d392690.gif

10. ניהול מינויים לנושאים מצד השרת

עד עכשיו, ב-codelab הזה, כל הקריאות להרשמה לנושאים ולביטול ההרשמה לנושאים מופעלות ממכונת אפליקציה.

עם זאת, בתרחישים מסוימים כדאי לנהל את המינויים לנושאים מצד השרת. לדוגמה, יכול להיות שתרצו להירשם לנושא חדש עם קבוצת משנה של בסיס המשתמשים הקיים שלכם, בלי להמתין להשקה של האפליקציה.

בקטע הזה תלמדו איך להשתמש ב-Firebase Admin SDK כדי להירשם לנושא ולבטל את ההרשמה של קבוצה של אסימוני רישום ל-FCM, באמצעות שיחות מצד השרת.

הטמעת מינויים בצד השרת של אסימוני רישום ב-FCM לנושא ב-FCM

  1. בקוד השרת, עוברים לכיתה FcmSubscriptionManager.java. מאתרים את השיטה בשם subscribeFcmRegistrationTokensToTopic. כאן תטמיעו את הקריאה ל-API של subscribeToTopic.

5d5709e7b3cbcb04.png

  1. נרשום את מופע האפליקציה לנושא Energy. לשם כך, קודם צריך לספק נתונים לשני השדות הבאים:
    1. registrationTokens: רשימה מופרדת בפסיקים של מחרוזות שמייצגות את אסימוני ההרשמה ל-FCM שעבורם רוצים ליצור מינויים לנושאים.
    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. אנחנו משאירים לכם את האימוץ של קוד הביטול של המינוי בצד השרת ואת אימות ההשפעה שלו על ידי שליחת הודעת נושא.

11. מזל טוב

מזל טוב, הצלחת להשתמש בנושאי FCM כדי לשלוח הודעות מרובות-כתובת לקבוצות משנה של מכונות האפליקציה. כך תוכלו להגיע למשתמשים שלכם בזמן עם תוכן רלוונטי.

947def3eb33b1e4a.gif

מה השלב הבא?

אחרי שמשלימים את הקודלאב, כדאי לנסות נושאים לפלטפורמות אחרות באמצעות המדריכים הבאים:

מסמכי עזר