Google is committed to advancing racial equity for Black communities. See how.
หน้านี้ได้รับการแปลโดย Cloud Translation API
Switch to English

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

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

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

เมื่อได้รับข้อมูลนี้ 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());

โคตรลิน + KTX

val fm = FirebaseMessaging.getInstance()
fm.send(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 stanza ที่จำเป็นสำหรับการส่งข้อความต้นทาง 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 สำหรับข้อมูลเพิ่มเติมเกี่ยวกับไวยากรณ์ข้อความต้นน้ำ