אם שרת האפליקציה מטמיע את פרוטוקול 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.