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

1. מבוא

מטרות עסקיות

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

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

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

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

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

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

ריבוי שידורים (multicast) שמבוסס על נושאים מותאם לתפוקה.

מה תלמדו

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

מה תפַתחו

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

מה צריך להכין

  • דפדפן לבחירתכם, כמו 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. הגרסה הראשונה כוללת את האפליקציה לתחילת העבודה ל-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 (או ללחוץ על סמל העריכה כדי להגדיר את מזהה הפרויקט המועדף).

fc08f9a7808e4553.png

  1. אפשר לדלג על ההפעלה של Google Analytics. לצורך ה-Codelab הזה, אתם לא צריכים אותו. לוחצים על המשך.
  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 בקוד של הסימן לתחילת הפעולה StockNewsApp. כדי לאתר אותו או לשנות אותו, צריך לבצע את השלבים הבאים:
      1. בספרייה StockNewsApp, פותחים את הקובץ app/src/main/AndroidManifest.xml.
      2. ברכיב manifest, מחפשים את ערך המחרוזת של המאפיין package. הערך הזה הוא שם החבילה של Android.
  1. בתיבת הדו-שיח של Firebase, מדביקים את שם החבילה שהועתק בשדה שם החבילה ל-Android.
  2. אין צורך באישור חתימת ניפוי הבאגים SHA-1 עבור ה-Codelab הזה, כי האפליקציה הזו לא תפורסם. צריך להשאיר את השדה הזה ריק.
  3. לוחצים על רישום האפליקציה.
  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 לא עוקב אחרי כל השינויים המקומיים. תוכלו ללחוץ על התעלמות או ה-X בפינה הימנית העליונה. (לא דוחים שינויים בחזרה למאגר של Git).

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

b574ea0089ee87c6.png

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

4bc64eb3b99eb0ae.png

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

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

הגדרת אמולטור

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

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

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

f04ff8f48d186dff.png

  • ב-AndroidManifest.xml, כבר נוסף handler של קריאה חוזרת 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 לאשר קריאות לממשקי API של FCM.
    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. בשלב הזה, קוד השרת מוכן. הריצו את Build -> יצירת פרויקט מסרגל התפריטים העליון.

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

  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

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

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

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

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

בדיקת הקוד

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

6c0614199e684f6.png

  • ה-constructor של הכיתות מגדיר listener למתג המינויים באמצעות 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. באופן דומה, בתנאי אחר תטמיעו את הקריאה ל-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 – מטרגט רק את המופעים של האפליקציה שנרשמו גם לנושאי טכנולוגיה וגם לנושאי רכב.
  • || : לוגי OR. לדוגמה, '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. בונוס: עכשיו אפשר לבטל את ההרשמה לנושא 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. לסיום, מעדכנים את ה-method 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

מה השלב הבא?

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

מסמכי עזר