Catch up on highlights from Firebase at Google I/O 2023. Learn more

שלח הודעות לקבוצות מכשירים ב-Web/JavaScript

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

אתה יכול להשתמש בהודעות קבוצת מכשירים באמצעות פרוטוקולי XMPP או HTTP מדור קודם בשרת האפליקציות שלך. גרסאות ישנות יותר של Firebase Admin SDK עבור Node.js מבוססות על הפרוטוקולים מדור קודם ומספקות גם יכולות העברת הודעות בקבוצת מכשירים. המספר המרבי של חברים המותר למפתח הודעה הוא 20.

ניהול קבוצות מכשירים

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

  1. השג אסימוני רישום עבור כל מכשיר שברצונך להוסיף לקבוצה.

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

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

ניהול קבוצות מכשירים בשרת האפליקציות

יצירת קבוצת מכשירים

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

בקשת HTTP POST

שלח בקשה כמו הבאה אל https://fcm.googleapis.com/fcm/notification :

https://fcm.googleapis.com/fcm/notification
Content-Type:application/json
Authorization:key=API_KEY
project_id:SENDER_ID

{
   "operation": "create",
   "notification_key_name": "appUser-Chris",
   "registration_ids": ["bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
                        "cR1rjyj4_Kc:APA91bGusqbypSuMdsh7jSNrW4nzsM...",
                        ... ]

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

פורמט תגובה

בקשה מוצלחת מחזירה notification_key כמו הבא:

{
   "notification_key": "APA91bGHXQBB...9QgnYOEURwm0I3lmyqzk2TXQ"
}

שמור את notification_key ואת notification_key_name התואם לשימוש בפעולות הבאות.

אחזור מפתח התראה

אם אתה צריך לאחזר מפתח הודעה קיים, השתמש ב- notification_key_name בבקשת GET כפי שמוצג:

https://fcm.googleapis.com/fcm/notification?notification_key_name=appUser-Chris
Content-Type:application/json
Authorization:key=API_KEY
project_id:SENDER_ID
{}

עבור כל בקשת GET עבור שם מפתח הודעה נתון, השרת מחזיר מחרוזת מקודדת ייחודית. למרות שכל מחרוזת עשויה להיראות כמפתח שונה, זהו למעשה ערך 'מפתח_הודעה' חוקי.

הוספה והסרה של מכשירים מקבוצת מכשירים

כדי להוסיף או להסיר מכשירים מקבוצה קיימת, שלח בקשת POST עם פרמטר operation שהוגדר add או remove , וספק את אסימוני הרישום להוספה או הסרה.

בקשת HTTP POST

לדוגמה, כדי להוסיף מכשיר עם אסימון הרישום bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1... ל- appUser-Chris , תשלח בקשה זו:

{
   "operation": "add",
   "notification_key_name": "appUser-Chris",
   "notification_key": "APA91bGHXQBB...9QgnYOEURwm0I3lmyqzk2TXQ",
   "registration_ids": ["bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1..."]
}

פורמט תגובה

בקשה מוצלחת להוספה או הסרה של מכשיר מחזירה notification_key כמו הבא:

{
   "notification_key": "APA91bGHXQBB...9QgnYOEURwm0I3lmyqzk2TXQ"
}

שליחת הודעות במורד הזרם לקבוצות מכשירים

שליחת הודעות לקבוצת מכשירים דומה מאוד לשליחת הודעות למכשיר בודד. הגדר את הפרמטר to למפתח ההתראה הייחודי עבור קבוצת המכשירים. ראה סוגי הודעות לפרטים על תמיכה במטען. דוגמאות בדף זה מראות כיצד לשלוח הודעות נתונים לקבוצות מכשירים בפרוטוקולי HTTP ו-XMPP הישנים.

קבוצת התקנים בקשת HTTP POST

https://fcm.googleapis.com/fcm/send
Content-Type:application/json
Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA

{
  "to": "aUniqueKey",
  "data": {
    "hello": "This is a Firebase Cloud Messaging Device Group Message!",
   }
}

תגובת HTTP של קבוצת מכשירים

הנה דוגמה ל"הצלחה" - ל- notification_key יש 2 אסימוני רישום המשויכים אליו, וההודעה נשלחה בהצלחה לשניהם:

{
  "success": 2,
  "failure": 0
}

הנה דוגמה ל"הצלחה חלקית" - ל- notification_key יש 3 אסימוני רישום המשויכים אליו. ההודעה נשלחה בהצלחה לאחד מאסימוני הרישום בלבד. הודעת התגובה מפרטת את אסימוני הרישום ( registration_ids ) שלא הצליחו לקבל את ההודעה:

{
  "success":1,
  "failure":2,
  "failed_registration_ids":[
     "regId1",
     "regId2"
  ]
}

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

אם השרת מנסה לשלוח הודעה לקבוצת מכשירים שאין בה חברים, התגובה נראית כך, עם 0 הצלחה ו-0 כישלון:

{
  "success": 0,
  "failure": 0
}

הודעת XMPP של קבוצת התקנים

<message id="">
  <gcm xmlns="google:mobile:data">
  {
      "to": "aUniqueKey",
      "message_id": "m-1366082849205" ,
      "data": {
          "hello":"This is a Firebase Cloud Messaging Device Group Message!"
      }
  }
  </gcm>
</message>

תגובת XMPP של קבוצת מכשירים

כאשר ההודעה נשלחת לאחד מהמכשירים בקבוצה בהצלחה, שרת החיבור XMPP מגיב ב-ACK. אם כל ההודעות שנשלחו לכל המכשירים בקבוצה נכשלות, שרת החיבור של XMPP מגיב ב-NACK.

הנה דוגמה ל"הצלחה" - ל- notification_key יש 3 אסימוני רישום המשויכים אליו, וההודעה נשלחה בהצלחה לכולם:

{
  "from": "aUniqueKey",
  "message_type": "ack",
  "success": 3,
  "failure": 0,
  "message_id": "m-1366082849205"
}

הנה דוגמה ל"הצלחה חלקית" - ל- notification_key יש 3 אסימוני רישום המשויכים אליו. ההודעה נשלחה בהצלחה לאחד מאסימוני הרישום בלבד. הודעת התגובה מפרטת את אסימוני הרישום שלא הצליחו לקבל את ההודעה:

{
  "from": "aUniqueKey",
  "message_type": "ack",
  "success":1,
  "failure":2,
  "failed_registration_ids":[
     "regId1",
     "regId2"
  ]
}

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

לרשימה המלאה של אפשרויות ההודעה, עיין במידע ההפניה עבור פרוטוקול שרת החיבור שבחרת, HTTP או XMPP .