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