שליחת הודעות ב-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>

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