שליחת הודעות במעלה הזרם באנדרואיד

אם שרת האפליקציות שלך מיישם את פרוטוקול XMPP Connection Server , הוא יכול לקבל הודעות במעלה הזרם מהמכשיר של משתמש לענן. כדי ליזום הודעה במעלה הזרם, אפליקציית הלקוח שולחת בקשה המכילה את הדברים הבאים:

  • הכתובת של שרת האפליקציות המקבל בפורמט SENDER_ID@fcm.googleapis.com .
  • מזהה הודעה שצריך להיות ייחודי עבור כל מזהה שולח .
  • נתוני ההודעה הכוללים את צמדי המפתח-ערך של מטען ההודעה.

כשהיא מקבלת נתונים אלה, FCM בונה בית XMPP לשליחה לשרת האפליקציה, ומוסיף מידע נוסף על המכשיר והאפליקציה השולחים.

שלח הודעה במעלה הזרם מאפליקציית לקוח אנדרואיד

אפליקציית Android שלך יכולה לשלוח הודעה במעלה הזרם באמצעות FirebaseMessaging.send :

Kotlin+KTX

val fm = Firebase.messaging
fm.send(
    remoteMessage("$SENDER_ID@fcm.googleapis.com") {
        setMessageId(messageId.toString())
        addData("my_message", "Hello World")
        addData("my_action", "SAY_HELLO")
    },
)

Java

FirebaseMessaging fm = FirebaseMessaging.getInstance();
fm.send(new RemoteMessage.Builder(SENDER_ID + "@fcm.googleapis.com")
        .setMessageId(Integer.toString(messageId))
        .addData("my_message", "Hello World")
        .addData("my_action","SAY_HELLO")
        .build());

טיפול בהתקשרות חוזרת של הודעות במעלה הזרם

עם FirebaseMessaging , אתה יכול ליישם את ההתקשרות חוזרת onMessageSent ו- onSendError כדי לבדוק את הסטטוס של הודעות במעלה הזרם. במקרים של שגיאה, onSendError מחזירה SendException עם קוד שגיאה. לדוגמה, אם הלקוח מנסה לשלוח הודעות נוספות לאחר הגעת מגבלת 20 ההודעות, הוא מחזיר את SendException#ERROR_TOO_MANY_MESSAGES .

במקרים שבהם המכשיר לא מקוון או ששירות FCM אינו זמין להעברת הודעות במעלה הזרם לשרת שלך, מופעי אפליקציית לקוח אנדרואיד יכולים לצבור לכל היותר 20 הודעות ממתינות. אם פג תוקפם של הודעות כאלה לפני ש-FCM יכולה לשלוח אותן בהצלחה, onSendError מחזירה את SendException#ERROR_TTL_EXCEEDED .

כדי לייעל את השימוש ברשת, FCM מקבץ תגובות ל- onMessageSent ו- onSendError , כך שייתכן שהאישור לא יהיה מיידי עבור כל הודעה.

קבל הודעות XMPP בשרת האפליקציות

כאשר FCM מקבל שיחת הודעות במעלה הזרם מאפליקציית לקוח, היא מייצרת את בית ה-XMPP הדרוש לשליחת ההודעה במעלה הזרם. 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

בתגובה להודעה במעלה הזרם כמו האמור לעיל, שרת האפליקציה חייב להשתמש באותו חיבור כדי לשלוח הודעת ACK המכילה את מזהה ההודעה הייחודי. אם FCM לא מקבל ACK, הוא עשוי לנסות לשלוח שוב את ההודעה לשרת האפליקציה.

<message id="">
  <gcm xmlns="google:mobile:data">
  {
      "to":"REGID",
      "message_id":"m-123"
      "message_type":"ack"
  }
  </gcm>
</message>

עיין ב- XMPP Connection Server Reference למידע נוסף על תחביר הודעות במעלה הזרם.