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

วันที่

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

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

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

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

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