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 ก็สามารถรับข้อความอัปสตรีมจากอุปกรณ์ของผู้ใช้ไปยังคลาวด์ได้ เพื่อเริ่มต้นข้อความอัปสตรีม แอพไคลเอนต์ส่งคำขอที่มีข้อมูลต่อไปนี้:

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

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

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

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

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