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