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

1. מבוא

מטרות עסקיות

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

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

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

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

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

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

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

מה תלמדו

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

מה תפַתחו

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

מה תצטרכו

  • דפדפן לפי בחירתכם, כמו Chrome.
  • סביבת הפיתוח המשולבת IntelliJ IDEA לפיתוח אפליקציות Java.
    • חשוב להביע הסכמה לתמיכה ב-Gradle במהלך ההתקנה.
  • Android Studio היא סביבת פיתוח משולבת (IDE) לפיתוח אפליקציות ל-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

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

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

הגרסה המלאה של ה-codelab הזה נמצאת בספרייה messaging/fcm-topics-codelab/completed.

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

  1. נכנסים למסוף Firebase באמצעות חשבון Google.
  2. לוחצים על הלחצן כדי ליצור פרויקט חדש, ואז מזינים שם לפרויקט (לדוגמה, StockNews).
  3. לוחצים על המשך.
  4. אם מוצגת בקשה לעשות זאת, קוראים ומאשרים את התנאים של Firebase, ואז לוחצים על המשך.
  5. (אופציונלי) מפעילים את העזרה מבוססת-AI במסוף Firebase (שנקראת Gemini ב-Firebase).
  6. ב-codelab הזה לא צריך להשתמש ב-Google Analytics, ולכן משביתים את האפשרות Google Analytics.
  7. לוחצים על יצירת פרויקט, מחכים שהפרויקט יוקצה ולוחצים על המשך.

כל הכבוד! זהו, יצרתם את פרויקט Firebase.

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

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

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

לצורך ה-codelab הזה, אנחנו נוסיף אפליקציית Android Firebase.

84e0b3199bef6d8a.pngהגדרת Android

  1. ב-Firebase Console, בוחרים באפשרות 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. לוחצים על 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 לא עוקב אחרי כל השינויים המקומיים. אפשר ללחוץ על התעלמות או על 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, כבר נוסף MESSAGING_EVENT גורם מטפל בקריאה חוזרת.
    • ה-handler הזה, 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.
  • הקובץ build.gradle כבר כולל את התלות ב-Firebase Admin SDK. ה-SDK הזה מספק גישה לפונקציות שונות של שליחת הודעות ב-FCM.

650fc733298588f8.png

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

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

  1. קודם צריך להגדיר חשבון שירות ב-Firebase שיאפשר ל-Firebase Admin SDK לאשר קריאות ל-FCM API.
    1. נכנסים אל מסוף Firebase, לוחצים על סמל גלגל השיניים לצד Project Overview (סקירת הפרויקט) בסרגל הניווט הימני ובוחרים באפשרות Project settings (הגדרות הפרויקט). 8c2108d4d7c915e9.png
    2. בדף ההגדרות, בוחרים באפשרות חשבונות שירות ולוחצים על יצירת חשבון שירות. 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 מנתיב המחלקה באמצעות הקוד הבא. 8dffbee658e0bdd.png
  2. בשלב הזה, קוד השרת מוכן. מריצים את הפקודה 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

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

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

בשלב הזה מטמיעים פעולות של הרשמה לנושא וביטול הרשמה לנושא, במתג Stock Category (קטגוריית מלאי) באפליקציית Android.

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

קוד ביקורת

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

6c0614199e684f6.png

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

הרשמה

ביטול ההרשמה

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, אפשר לשלוח הודעות לקבוצה של מופעי אפליקציה שמנויים לנושאים Technology או Automotive. מקרה כזה יכול לקרות, למשל, אם יש אירוע משמעותי שקשור ל-Waymo.

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

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

9. תקציר

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

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

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

c0dc20655d392690.gif

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

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

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

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

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

  1. בקוד השרת, עוברים אל FcmSubscriptionManager.java class. מאתרים את השיטה שנקראת 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 Registration לנושא ב-FCM

  1. כדי לבטל הרשמה לנושאים בצד השרת, משתמשים ב-API‏ unsubscribeFromTopic. מוסיפים את הקוד הרלוונטי לפונקציה unsubscribeFcmRegistrationTokensFromTopic של המחלקה FcmSubscriptionManager.java.

8d9e8ea9d34016bd.png

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

11. מזל טוב

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

947def3eb33b1e4a.gif

מה השלב הבא?

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

מסמכי עזר