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
- במסוף Firebase, לוחצים על Add project (הוספת פרויקט), נותנים שם לפרויקט ב-Firebase (StockNews) ולוחצים על Continue (המשך). הערה: חשוב לזכור את מזהה הפרויקט ב-Firebase (או ללחוץ על הסמל Edit (עריכה) כדי להגדיר את מזהה הפרויקט המועדף).
- אפשר לדלג על הפעלת Google Analytics. לצורכי הקודלאב הזה, אין צורך בכך. לוחצים על המשך.
- לוחצים על Create project.
כל הכבוד! סיימתם ליצור את פרויקט Firebase. עכשיו אפשר ללחוץ על שם הפרויקט כדי להיכנס למסוף.
3. הגדרת אפליקציה ספציפית לפלטפורמה ב-Firebase
רוב השינויים בקוד שנדרשים כדי להפעיל תמיכה ב-Firebase כבר נמצאים בפרויקט שבו אתם עובדים. עם זאת, כדי להוסיף תמיכה בפלטפורמות לנייד, צריך:
- רישום הפלטפורמה הרצויה בפרויקט Firebase
- מורידים את קובץ התצורה הספציפי לפלטפורמה ומוסיפים אותו לקוד.
במסגרת הקודלאב הזה, נוסיף אפליקציית Android ל-Firebase.
הגדרת Android
- במסוף Firebase, בוחרים באפשרות Project Settings (הגדרות הפרויקט) בחלק העליון של סרגל הניווט הימני, בסמל גלגל השיניים של ההגדרות, ולוחצים על הסמל Android בקטע Your apps (האפליקציות שלך) בדף General (כללי).
אמורה להופיע תיבת הדו-שיח הבאה :
- הערך החשוב שצריך לציין הוא שם החבילה ל-Android. מגדירים אותו כ-
com.ticker.stocknews
.- שם החבילה שצריך לציין כאן חייב להיות זהה לשם שצוין ב-
AndroidManifest.xml
של קוד ה-starter StockNewsApp. כדי לאתר או לשנות אותו, פועלים לפי השלבים הבאים:- בספרייה StockNewsApp, פותחים את הקובץ
app/src/main/AndroidManifest.xml
. - ברכיב
manifest
, מחפשים את ערך המחרוזת של המאפייןpackage
. הערך הזה הוא שם החבילה ב-Android.
- בספרייה StockNewsApp, פותחים את הקובץ
- שם החבילה שצריך לציין כאן חייב להיות זהה לשם שצוין ב-
- בתיבת הדו-שיח של Firebase, מדביקים את שם החבילה שהעתקתם בשדה Android package name.
- לא צריך את האישור לחתימה לצורך ניפוי באגים SHA-1 בסדנת הקוד הזו, כי האפליקציה הזו לא תפורסם. משאירים את השדה הזה ריק.
- לוחצים על Register App.
- ממשיכים במסוף Firebase ופועלים לפי ההוראות כדי להוריד את קובץ התצורה
google-services.json
. - אפשר לדלג על שאר שלבי ההגדרה, כי כל השאר כבר מוגדר בקוד של אפליקציית ההתחלה. האפליקציה תופיע בדף הראשי של מסוף Firebase.
- מעתיקים את הקובץ
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, תצטרכו להרחיב את הפרויקט כדי לראות את אותו הדבר)
לתשומת ליבכם: יכול להיות שיחלפו כמה שניות עד ש-Android Studio יתעדכן את הפרויקט ברקע בפעם הראשונה. במהלך הזמן הזה יופיע סמל ספינר בשורת הסטטוס שבתחתית Android Studio:
מומלץ להמתין עד שהפעולה הזו תסתיים לפני שמבצעים שינויים בקוד. כך Android Studio תוכל לשלוף את כל הרכיבים הנדרשים.
בנוסף, אם מופיעה ההודעה 'רוצים לטעון מחדש כדי שהשינויים בשפה ייכנסו לתוקף?' או הודעה דומה, בוחרים באפשרות 'כן'.
הגדרת המהדר
אם אתם זקוקים לעזרה בהגדרה של אמולטור Android, תוכלו לעיין במאמר הרצת האפליקציה.
הסבר על קוד ההתחלה של אפליקציות ל-Android
- קוד ההתחלה הוא אפליקציית Android קלה עם פונקציונליות וממשק משתמש מינימליים.
- כבר נוספה תלות ב-firebase-messaging SDK לקובץ
app/build.gradle
.
- ב-
AndroidManifest.xml
כבר נוסף טיפול בקריאה חוזרת (callback) שלMESSAGING_EVENT
.- הטיפול הזה,
StockNewsMessagingService.java
, הוא תוספת לכיתהFirebaseMessagingService
שמספקת פונקציונליות שקשורה להעברת הודעות בענן ב-Firebase. מידע נוסף זמין במסמכי התיעוד של FirebaseMessagingService.
- הפונקציה
onNewToken
נקראת כשאסימון הרישום ב-FCM נוצר או מתעדכן. מידע נוסף זמין במאמר מעקב אחר יצירת אסימונים. - הפונקציה
onMessageReceived
נקראת כשמתקבלת הודעה והאפליקציה בחזית. נכון לעכשיו, המערכת רק מתעדת את ההודעה שהתקבלה.- במאמר קבלת הודעות באפליקציה ל-Android מוסבר בהרחבה על ההבדלים בין העברה וטיפול בהודעות ברקע לבין העברה וטיפול בהודעות בחזית.
- הטיפול הזה,
- בנוסף, ב-
AndroidManifest.xml
קיימת גם כיתהApplication
של Android בשםStockNewsApplication
.- הכיתה הזו תהיה הראשונה שתיווצר כשהאפליקציה תופעל.
- בפונקציה
onCreate
של הכיתהStockNewsApplication
, מתווספת קריאה ליצירת אסימון רישום של FCM. הוא ייצור טוקן הרשמה חוקי ל-FCM וירשום אותו ביומן.
- ה-
MainActivity.java
מוסיף את ה-RecyclerView
שמוצגות בו האפשרויות של קטגוריית המלאי. SubscriptionAdapter.java
מיישם אתRecyclerView.Adapter
, שמצייר את מסך הבחירה של קטגוריית המלאי.- לכל קטגוריית מניות יש שם ולחצן החלפת מצב של המינוי לצדה.
- שינוי המתג אמור להפעיל קריאה להרשמה או לביטול הרשמה לנושא ב-FCM.
- תבצעו את ההפעלה של הקריאות האלה בקטעים הבאים.
- הכיתה
model/StockCategories.java
מכילה רשימה של כל קטגוריות המניות ושמות הנושאים המשויכים אליהן.
הפעלת האפליקציה למתחילים
- מחברים את מכשיר Android למחשב או מפעילים אמולטור.
- בסרגל הכלים העליון, בוחרים את מכשיר היעד או את הסימולטור של Android ולוחצים על לחצן ההפעלה.
- ממשק המשתמש של האפליקציה ייראה כך:
- האפליקציה תיצור אסימון רישום ל-FCM ותתעד אותו ביומן. עם זאת, ממשק המשתמש של האפליקציה לא ישתנה.
- מעתיקים ושומרים את אסימון הרישום של FCM, כי תצטרכו אותו בשלבים הבאים.
5. שליחת הודעת בדיקה
עכשיו אתם מוכנים לשלוח הודעת בדיקה למכונה של האפליקציה שהגדרתם בשלב האחרון.
ייבוא קוד השרת לתחילת הדרך
מריצים את IntelliJ IDEA ופותחים את הפרויקט messaging/fcm-topics-codelab/starter/StockNewsServer
.
תצוגת הפרויקט בסרגל הניווט הימני אמורה להיראות כך:
הערה: יכול להיות שיחלפו כמה דקות עד ש-IntelliJ IDEA תבנה את הפרויקט, כולל משיכת יחסי התלות הנדרשים.
הסבר על קוד ההתחלה של השרת
- קוד ההתחלה של השרת הוא פרויקט Java שמבוסס על Gradle.
- התלות ב-firebase-admin SDK כבר נוספה לקובץ
build.gradle
. ה-SDK הזה מספק גישה לפונקציונליות שונות לשליחת הודעות ב-FCM.
- לסיום, יש שתי כיתות:
FcmSender.java
: המחלקה הזו מכילה את השיטות הבאות של הערות:initFirebaseSDK
: הפעלת ה-SDK של firebase-admin.sendMessageToFcmRegistrationToken
: שולחים הודעה לאסימון רישום של FCM.sendMessageToFcmTopic
: שליחת הודעה לנושא ב-FCM.sendMessageToFcmTopicCondition
: שליחת הודעה לתנאי של נושא FCM.
FcmSubscriptionManager.java
: הכיתה הזו מכילה שיטות שמאפשרות לנהל מינויים לנושאים מצד השרת.initFirebaseSDK
: הפעלת ה-SDK של firebase-admin.subscribeFcmRegistrationTokensToTopic
: הרשמה של אסימוני רישום ב-FCM לנושא ב-FCM.unsubscribeFcmRegistrationTokensFromTopic
: ביטול הרשמה של אסימוני רישום ב-FCM מנושא ב-FCM.
הגדרת קוד השרת
- קודם כול, צריך להגדיר חשבון שירות ב-Firebase שמאפשר ל-firebase-admin SDK להעניק הרשאה לשיחות ל-FCM APIs.
- נכנסים למסוף Firebase, לוחצים על סמל גלגל השיניים לצד סקירה כללית של הפרויקט בסרגל הניווט הימני ובוחרים באפשרות הגדרות הפרויקט.
- בדף ההגדרות, בוחרים באפשרות Service accounts ולוחצים על Create service account.
- עכשיו לוחצים על הלחצן Generate new private key (יצירת מפתח פרטי חדש) וההורדה האוטומטית של קובץ המפתח תתחיל.
- משנים את שם קובץ המפתח ל-
service-account.json
ומעתיקים אותו לתיקייהmessaging/fcm-topics-codelab/starter/StockNewsServer/src/main/resources
. - גם
FcmSender.java
וגםFcmSubscriptionManager.java
טוענים את הקובץservice-account.json
מ-classpath באמצעות הקוד הבא.
- בשלב הזה, קוד השרת מוכן. Run Build -> Build Project בסרגל התפריטים העליון.
שליחת הודעת בדיקה
- בקטע
FcmSender.java
, מאתרים את הפונקציהsendMessageToFcmRegistrationToken
ומזינים את אסימון הרישום של FCM שהעתקתם מהקטע הפעלת האפליקציה למתחילים בשדהregistrationToken
. - בפונקציה
main
, מסירים את ההערה רק מהפונקציהsendMessageToFcmRegistrationToken
ולוחצים על 'הפעלה' כדי להריץ את הקוד.- שימו לב לאופן שבו אסימון ההרשמה ל-FCM מוגדר בשדה
Token
של האובייקטmessage
. - בנוסף, שימו לב איך השתמשנו ב-API של
send
בממשקFirebaseMessaging
.
- שימו לב לאופן שבו אסימון ההרשמה ל-FCM מוגדר בשדה
- הפקודה הזו אמורה לשלוח הודעה למכונה של האפליקציה שהגדרתם בשלב הקודם.
- כשמכונה של האפליקציה נמצאת בחזית, תוכן ההודעה אמור להופיע ביומן.
- כשמכונה של אפליקציה פועלת ברקע, ההודעה מופיעה במגש ההתראות.
מצוין, השתמשתם ב-Firebase Admin SDK כדי לשלוח הודעות למופע של אפליקציה. מידע נוסף על שימוש ב-Firebase Admin SDK בשרת
6. הטמעת מינוי לנושאים או ביטול המינוי לנושאים
בשלב הזה תרתמו פעולות של הרשמה לנושאים והסרה של הרשמה לנושאים, בלחצן החלפת המצב של קטגוריית המניות באפליקציה ל-Android.
כשמשתמש באפליקציה מפעיל או משבית את המתג של קטגוריית מניות מסוימת, מתבצעת קריאה להרשמה לנושא או לביטול ההרשמה לנושא.
בדיקת הקוד
- עוברים לכיתה
SubscriptionAdapter.java
בקוד של אפליקציית Android ומאתרים את הכיתהRecyclerViewViewHolder
.
- באמצעות
setOnCheckedChangeListener
, ב-constructor של הכיתה מוגדר מאזין למתג ההרשמה. - בהתאם למצב המתג, פעולות ההרשמה והביטול מתבצעות על ידי קריאה לשיטות
subscribeToStockCategory
ו-unsubscribeFromStockCategory
, בהתאמה. - השיטה
setData
נקראת על ידיonBindViewHolder
של RecyclerView Adapter כדי לקשר את 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(); }); }
הטמעת ביטול הרשמה לנושאים
- באופן דומה, בתנאים אחרים, תטמיעו את הקריאה ל-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(); }); }
בואו ננסה
- מריצים את האפליקציה ומפעילים או משביתים את האפשרויות של קטגוריית המניות כדי לבצע פעולות של הרשמה ופעולות של ביטול הרשמה. זה ייראה בערך כך:
הרשמה | ביטול ההרשמה |
7. שליחת ההודעה הראשונה בנושא
בשלב הזה תטמיעו קוד בצד השרת כדי לשלוח הודעת נושא ב-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
. - כמו קודם, אתם אמורים לראות את אישור הקבלה של ההודעה במכונה של האפליקציה.
- מופע של אפליקציה בחזית
- מופע של אפליקציה ברקע
- בונוס: אפשר לנסות לבטל את ההרשמה לנושא שאליו שלחתם את ההודעה ולשלוח אותה שוב. תוכלו לראות שההודעה לא נמסרת למכונה של האפליקציה.
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)
– מטרגט רק מכונות של אפליקציות שנרשמו לנושאים 'טכנולוגיה' ו'כלי רכב' או 'אנרגיה'.
איך יוצרים בקשות שליחה כדי להשתמש בפונקציונליות הזו
הטמעת שילוב בצד השרת לשליחת הודעה על תנאי נושא
- חוזרים לקוד השרת, עוברים אל
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
.
שליחת ההודעה ואימות הקבלה
- לפני שליחת הודעת הנושא, צריך לוודא שמכונה של האפליקציה עומדת בתנאי הנושא שצוין. לשם כך, צריך להירשם למכונה של האפליקציה גם לנושא Technology וגם לנושא Automotive.
- עכשיו אפשר לשלוח את הודעת הנושא על ידי הפעלת הפונקציה
main
שלFcmSender.java
. - כמו קודם, אמורה להופיע הודעה על קבלת ההודעה במכונה של האפליקציה.
- מופע של אפליקציה בחזית
- מופע של אפליקציה ברקע
- בונוס: עכשיו אפשר לבטל את ההרשמה לנושא Technology ולשלוח מחדש את הודעת התנאי של הנושא. שימו לב שההודעה לא מתקבלת במכונה של האפליקציה.
9. תקציר
בואו נסכם במהירות את מה שלמדתם עד עכשיו.
- איך מתחילים מינוי לנושא או מבטלים מינוי לנושא ממכונה של אפליקציה.
- שליחת הודעה לנושא ואימות הקבלה במכונות של האפליקציה שנרשמו.
- שליחת הודעה לתנאי של נושא ואימות הקבלה במכונה של האפליקציה שעומדת בתנאי.
בקטע הבא תלמדו איך להירשם לנושאים או לבטל את ההרשמה של מכונות אפליקציה לנושאים, בלי צורך ליצור קריאות מצד הלקוח.
10. ניהול מינויים לנושאים מצד השרת
עד עכשיו, ב-codelab הזה, כל הקריאות להרשמה לנושאים ולביטול ההרשמה לנושאים מופעלות ממכונת אפליקציה.
עם זאת, בתרחישים מסוימים כדאי לנהל את המינויים לנושאים מצד השרת. לדוגמה, יכול להיות שתרצו להירשם לנושא חדש עם קבוצת משנה של בסיס המשתמשים הקיים שלכם, בלי להמתין להשקה של האפליקציה.
בקטע הזה תלמדו איך להשתמש ב-Firebase Admin SDK כדי להירשם לנושא ולבטל את ההרשמה של קבוצה של אסימוני רישום ל-FCM, באמצעות שיחות מצד השרת.
הטמעת מינויים בצד השרת של אסימוני רישום ב-FCM לנושא ב-FCM
- בקוד השרת, עוברים לכיתה
FcmSubscriptionManager.java
. מאתרים את השיטה בשםsubscribeFcmRegistrationTokensToTopic
. כאן תטמיעו את הקריאה ל-API שלsubscribeToTopic
.
- נרשום את מופע האפליקציה לנושא Energy. לשם כך, קודם צריך לספק נתונים לשני השדות הבאים:
registrationTokens
: רשימה מופרדת בפסיקים של מחרוזות שמייצגות את אסימוני ההרשמה ל-FCM שעבורם רוצים ליצור מינויים לנושאים.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
.
- אנחנו משאירים לכם את האימוץ של קוד הביטול של המינוי בצד השרת ואת אימות ההשפעה שלו על ידי שליחת הודעת נושא.
11. מזל טוב
מזל טוב, הצלחת להשתמש בנושאי FCM כדי לשלוח הודעות מרובות-כתובת לקבוצות משנה של מכונות האפליקציה. כך תוכלו להגיע למשתמשים שלכם בזמן עם תוכן רלוונטי.
מה השלב הבא?
אחרי שמשלימים את הקודלאב, כדאי לנסות נושאים לפלטפורמות אחרות באמצעות המדריכים הבאים: