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