שליחת הודעות ב-upstream מאפליקציית לקוח של Unity

אם שרת האפליקציה מטמיע את פרוטוקול XMPP Connection Server, הוא יכול לקבל הודעות ממעלה הזרם ממכשיר של משתמש לענן. כדי להתחיל שליחת הודעה ב-upstream, אפליקציית הלקוח שולחת בקשה שמכילה את הפרטים הבאים:

  • הכתובת של שרת האפליקציה המקבל בפורמט SENDER_ID@fcm.googleapis.com.
  • מזהה הודעה שצריך להיות ייחודי לכל מזהה שולח.
  • נתוני ההודעה שמכילים את צמדי המפתח/ערך של מטען הייעודי (payload) של ההודעה.

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

שליחת הודעה ב-upstream מאפליקציית לקוח של Unity

כדי לשלוח הודעות לשרתי ה-upstream, אפליקציית לקוח של Unity יוצרת הודעה ומפעילה את Send כפי שמוצג:

Firebase.Messaging.Message message;
message.To = SENDER_ID + "@fcm.googleapis.com";
message.MessageId = get_unique_message_id();
message.Data("my_message", "Hello World");
message.Data("my_action", "SAY HELLO");
message.TimeToLive = kTimetoLive;
Firebase.Messaging.FirebaseMessaging.Send(message);

כאשר:

  • message.To היא הכתובת של שרת האפליקציה המקבל בפורמט SENDER_ID@fcm.googleapis.com.

  • message.MessageId הוא מזהה הודעה ייחודי. כל הקריאות החוזרות של נמען ההודעה מזוהות על סמך מזהה ההודעה הזה.

  • message.Data היא מפה של מפתחות וערכים כמחרוזות.

  • message.TimeToLive מציין את משך הזמן (בשניות) שבו ההודעה צריכה להישמר באחסון של FCM אם המכשיר במצב אופליין. אם FCM לא מצליח למסור את ההודעה לפני שתוקף התוקף פג, הוא שולח התראה חזרה ללקוח.

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

קבלת הודעות XMPP בשרת האפליקציה

כש-FCM מקבל קריאה להעברת הודעות ב-upstream מאפליקציית לקוח, הוא יוצר את סטנזה ה-XMPP הנדרשת לשליחת ההודעה ב-upstream. FCM מוסיף את השדות category ו-from, ולאחר מכן שולח סטנזה כמו זו לשרת האפליקציה:

<message id="">
  <gcm xmlns="google:mobile:data">
  {
      "category":"com.example.yourapp", // to know which app sent it
      "data":
      {
          "hello":"world",
      },
      "message_id":"m-123",
      "from":"REGID"
  }
  </gcm>
</message>

שליחת הודעת ACK

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

<message id="">
  <gcm xmlns="google:mobile:data">
  {
      "to":"REGID",
      "message_id":"m-123"
      "message_type":"ack"
  }
  </gcm>
</message>

מידע נוסף על תחביר ההודעות ב-upstream זמין במאמר חומר עזר בנושא שרת חיבורי XMPP.