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