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