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