על סמך מודל הפרסום/הרשמה, שליחת הודעות לפי נושא ב-FCM מאפשרת לכם לשלוח הודעה לכמה מכשירים שהביעו הסכמה לקבלת הודעות בנושא מסוים. אתם כותבים הודעות נושא לפי הצורך, ו-FCM מטפל בניתוב ובהעברת ההודעה באופן מהימן למכשירים הנכונים.
לדוגמה, משתמשים באפליקציה מקומית לחיזוי גאות ושפל יכולים להביע הסכמה לקבלת התראות בנושא 'זרמי גאות ושפל' ולקבל התראות על תנאים אופטימליים לדיג במים מלוחים באזורים מסוימים. משתמשים באפליקציית ספורט יכולים להירשם לקבלת עדכונים אוטומטיים על תוצאות של משחקים בשידור חי של הקבוצות האהובות עליהם.
כמה דברים שכדאי לזכור לגבי נושאים:
שליחת הודעות בנושאים מתאימה במיוחד לתוכן כמו מזג אוויר או מידע אחר שזמין לכולם.
הודעות בנושאים מותאמות לזרימת נתונים ולא לזמן אחזור. כדי לשלוח הודעות במהירות ובבטחה למכשירים בודדים או לקבוצות קטנות של מכשירים, מטרגטים את ההודעות לטוקני רישום ולא לנושאים.
אם אתם צריכים לשלוח הודעות לכמה מכשירים לכל משתמש, כדאי לכם להשתמש בהודעות לקבוצות של מכשירים בתרחישי השימוש האלה.
אפשר להירשם ללא הגבלה לכל נושא. עם זאת, FCM אוכף את המגבלות בתחומים הבאים:
- במופע אחד של אפליקציה אפשר להירשם ל-2,000 נושאים לכל היותר.
- אם אתם משתמשים בייבוא באצווה כדי להירשם למופעי אפליקציות, כל בקשה מוגבלת ל-1,000 מופעי אפליקציות.
- תדירות המינויים החדשים מוגבלת לכל פרויקט. אם תשלחו יותר מדי בקשות להרשמה בפרק זמן קצר, שרתי FCM ישיבו עם
429 RESOURCE_EXHAUSTED
('המכסה שלכם חריגה'). ניסיון חוזר עם השהיה מעריכית לפני ניסיון חוזר (exponential backoff).
הרשמה של אפליקציית הלקוח לנושא
אפליקציות לקוח יכולות להירשם לכל נושא קיים או ליצור נושא חדש. כשאפליקציית לקוח נרשמת לנושא חדש (שעדיין לא קיים בפרויקט Firebase שלכם), נוצר נושא חדש בשם הזה ב-FCM וכל לקוח יכול להירשם אליו לאחר מכן.
כדי להירשם לנושא, קוראים לפונקציה subscribeToTopic()
עם שם הנושא. השיטה הזו מחזירה את הערך Future
, שהבעיה נפתרת כשהמינוי הצליח:
await FirebaseMessaging.instance.subscribeToTopic("topic");
כדי לבטל את ההרשמה, צריך להתקשר למספר unsubscribeFromTopic()
ולציין את שם הנושא.
בלקוחות אינטרנט אין תמיכה ב-subscribeToTopic()
וב-unsubscribeFromTopic()
. במאמר שליחת הודעות לנושאים באינטרנט או ב-JavaScript מוסבר איך מנהלים את המינויים של משתמשי אינטרנט.