Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

การส่งข้อความอัปสตรีมบน Android

จัดทุกอย่างให้เป็นระเบียบอยู่เสมอด้วยคอลเล็กชัน บันทึกและจัดหมวดหมู่เนื้อหาตามค่ากำหนดของคุณ

หากเซิร์ฟเวอร์แอปของคุณใช้ โปรโตคอล XMPP Connection Server จะสามารถรับข้อความอัปสตรีมจากอุปกรณ์ของผู้ใช้ไปยังระบบคลาวด์ได้ ในการเริ่มข้อความอัปสตรีม แอปไคลเอนต์จะส่งคำขอที่มีข้อมูลต่อไปนี้:

  • ที่อยู่ของเซิร์ฟเวอร์แอปที่รับข้อมูลในรูปแบบ SENDER_ID@fcm.googleapis.com
  • ID ข้อความที่ไม่ควรซ้ำกันสำหรับแต่ละ ID ผู้ส่ง
  • ข้อมูลข้อความประกอบด้วยคู่คีย์-ค่าของเพย์โหลดของข้อความ

เมื่อได้รับข้อมูลนี้ FCM จะสร้าง XMPP stanza เพื่อส่งไปยังเซิร์ฟเวอร์แอป โดยเพิ่มข้อมูลเพิ่มเติมเกี่ยวกับอุปกรณ์และแอปที่ส่ง

ส่งข้อความอัปสตรีมจากแอปไคลเอนต์ Android

แอป Android ของคุณสามารถส่งข้อความอัปสตรีมโดยใช้ FirebaseMessaging.send :

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());

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")
})

จัดการการเรียกกลับข้อความอัปสตรีม

ด้วย FirebaseMessaging คุณสามารถใช้การเรียกกลับบน MessageSent และ onMessageSent เพื่อตรวจสอบสถานะของข้อความอัป onSendError ม ในกรณีที่เกิดข้อผิดพลาด onSendError จะส่งคืน SendException พร้อมรหัสข้อผิดพลาด ตัวอย่างเช่น หากไคลเอนต์พยายามส่งข้อความเพิ่มเติมหลังจากถึงขีดจำกัด 20 ข้อความ จะส่งกลับ SendException#ERROR_TOO_MANY_MESSAGES

ในกรณีที่อุปกรณ์ออฟไลน์หรือบริการ FCM ไม่สามารถส่งต่อข้อความอัปสตรีมไปยังเซิร์ฟเวอร์ของคุณได้ อินสแตนซ์แอปไคลเอนต์ Android สามารถรวบรวมข้อความที่รอดำเนินการได้สูงสุด 20 ข้อความ หากข้อความดังกล่าวหมดอายุก่อนที่ FCM จะสามารถส่งได้สำเร็จ onSendError จะส่งกลับ SendException#ERROR_TTL_EXCEEDED

เพื่อเพิ่มประสิทธิภาพการใช้งานเครือข่าย FCM จะจัดกลุ่มการตอบกลับเป็น onMessageSent และ onSendError ดังนั้นการรับทราบอาจไม่เกิดขึ้นทันทีสำหรับแต่ละข้อความ

รับข้อความ XMPP บนเซิร์ฟเวอร์แอป

เมื่อ FCM รับสายการส่งข้อความอัปสตรีมจากแอปไคลเอ็นต์ ระบบจะสร้าง XMPP stanza ที่จำเป็นสำหรับการส่งข้อความอัปสตรีม FCM เพิ่ม category และ from ฟิลด์ จากนั้นส่ง stanza ดังต่อไปนี้ไปยังเซิร์ฟเวอร์แอป:

<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 ที่มี ID ข้อความที่ไม่ซ้ำกัน หาก FCM ไม่ได้รับ ACK อาจลองส่งข้อความไปยังเซิร์ฟเวอร์แอปอีกครั้ง

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

ดูการ อ้างอิงเซิร์ฟเวอร์การเชื่อมต่อ XMPP สำหรับข้อมูลเพิ่มเติมเกี่ยวกับไวยากรณ์ข้อความอัปสตรีม