โปรโตคอล XMPP ของ Firebase Cloud Messaging

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

// Production
fcm-xmpp.googleapis.com:5235

// Testing
fcm-xmpp.googleapis.com:5236

พารามิเตอร์ที่ใช้ได้และ จะอยู่ในหมวดหมู่ต่อไปนี้

ไวยากรณ์ข้อความดาวน์สตรีม

ส่วนนี้จะแสดงไวยากรณ์สำหรับการส่งข้อความดาวน์สตรีม

ข้อความ XMPP ดาวน์สตรีม (JSON)

ตารางต่อไปนี้แสดงเป้าหมาย ตัวเลือก และเพย์โหลดสำหรับ XMPP JSON ข้อความ

ตารางที่ 1 เป้าหมาย ตัวเลือก และเพย์โหลดสำหรับข้อความ XMPP ดาวน์สตรีม (JSON)

พารามิเตอร์ การใช้งาน คำอธิบาย
เป้าหมาย
to สตริง (ไม่บังคับ)

พารามิเตอร์นี้จะระบุผู้รับข้อความ

ค่านี้อาจเป็นโทเค็นการลงทะเบียนของอุปกรณ์ หรือ หรือหัวข้อเดียว (ขึ้นต้นด้วย /topics/) หากต้องการส่งไปยังหลายหัวข้อ ให้ใช้ พารามิเตอร์ condition

condition สตริง (ไม่บังคับ)

พารามิเตอร์นี้ระบุนิพจน์เชิงตรรกะของเงื่อนไข กำหนดเป้าหมายของข้อความ

เงื่อนไขที่รองรับ: หัวข้อ ซึ่งมีรูปแบบเป็น "yourTopic" ในหัวข้อ" ช่วงเวลานี้ ไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่

โอเปอเรเตอร์ที่รองรับ: &&, || สูงสุด 2 โอเปอเรเตอร์ต่อข้อความตามหัวข้อ

ตัวเลือก
message_id ต้องระบุ สตริง

พารามิเตอร์นี้จะระบุข้อความในการเชื่อมต่อ XMPP โดยไม่ซ้ำกัน

collapse_key สตริง (ไม่บังคับ)

พารามิเตอร์นี้เป็นตัวระบุกลุ่มข้อความ (เช่น โดยมี collapse_key: "Updates Available") ที่สามารถยุบได้เพื่อให้มีเพียงส่วน ข้อความสุดท้ายจะถูกส่งเมื่อการส่งกลับมาทำงานอีกครั้ง เพื่อหลีกเลี่ยงการส่ง ข้อความเดียวกันจำนวนมากเมื่ออุปกรณ์กลับมาออนไลน์อีกครั้งหรือหมดไฟ

และไม่รับประกันลำดับของการส่งข้อความ

หมายเหตุ: อนุญาตให้มีคีย์ยุบได้สูงสุด 4 คีย์ในเวลาที่กำหนด ซึ่งหมายความว่า FCM สามารถจัดเก็บที่แตกต่างกัน 4 รายการพร้อมกัน ข้อความต่อแอปไคลเอ็นต์ หากคุณ เกินตัวเลขนี้ ไม่มีการรับประกันว่าคีย์ยุบ 4 คีย์สำหรับ FCM ใด จะเก็บไว้

priority สตริง (ไม่บังคับ)

กำหนดลำดับความสำคัญของข้อความ ค่าที่ถูกต้องคือ "ปกติ" และ "สูง" ในแพลตฟอร์ม Apple สิ่งเหล่านี้จะสอดคล้องกับลำดับความสำคัญของ APN ที่ 5 และ 10

โดยค่าเริ่มต้น ระบบจะส่งข้อความแจ้งเตือนที่มีลำดับความสำคัญสูง และส่งข้อความข้อมูล ส่งโดยมีลำดับความสำคัญปกติ ลำดับความสำคัญปกติจะเพิ่มประสิทธิภาพให้ สิ้นเปลืองแบตเตอรี่และควรใช้งานเว้นแต่จำเป็นต้องนำส่งทันที สำหรับข้อความที่มีลำดับความสำคัญปกติ แอปอาจได้รับข้อความที่มี ความล่าช้าที่ไม่ได้ระบุ

เมื่อคุณส่งข้อความที่มีลำดับความสำคัญสูง ระบบจะส่งข้อความนั้นทันทีและแอป แสดงการแจ้งเตือนได้

content_available ไม่บังคับ บูลีน

ในแพลตฟอร์ม Apple ให้ใช้ช่องนี้เพื่อแสดง content-available ใน APN เพย์โหลด เมื่อมีการส่งการแจ้งเตือนหรือข้อความและตั้งค่าเป็น true แอปไคลเอ็นต์ที่ไม่มีการใช้งานถูกยกเลิกและระบบจะส่งข้อความผ่าน APN โดยไม่มีการแจ้งเตือน ไม่ใช่ผ่าน FCM โปรดทราบว่าการแจ้งเตือนแบบไม่มีเสียงใน ไม่มีการรับประกันว่า APN จะแสดง ซึ่งอาจขึ้นอยู่กับปัจจัยต่างๆ เช่น ผู้ใช้ การเปิดโหมดใช้พลังงานต่ำ บังคับให้ปิดแอป ฯลฯ ใน Android ข้อความข้อมูลจะปลุกระบบ แอปโดยค่าเริ่มต้น ขณะนี้ยังไม่รองรับใน Chrome

mutable_content ไม่บังคับ, JSON บูลีน

ในแพลตฟอร์ม Apple ให้ใช้ช่องนี้เพื่อแสดง mutable-content ในเพย์โหลด APNs เมื่อมีการส่งการแจ้งเตือนและมีการตั้งค่าการตั้งค่านี้ เป็น true คุณจะแก้ไขเนื้อหาของการแจ้งเตือนได้ก่อนที่จะแสดง โดยใช้ ส่วนขยายแอปของบริการการแจ้งเตือน ระบบจะไม่สนใจพารามิเตอร์นี้สําหรับ Android และเว็บ

time_to_live ไม่บังคับ หมายเลข

พารามิเตอร์นี้จะระบุระยะเวลา (เป็นวินาที) ที่จะเก็บข้อความไว้ในพื้นที่เก็บข้อมูล FCM หากอุปกรณ์ออฟไลน์อยู่ Time to Live สูงสุดที่รองรับคือ 4 สัปดาห์และค่าเริ่มต้นคือ 4 สัปดาห์ ดูข้อมูลเพิ่มเติมได้ที่การตั้งค่าอายุการใช้งานของข้อความ

dry_run ไม่บังคับ บูลีน

พารามิเตอร์นี้เมื่อตั้งค่าเป็น true จะช่วยให้นักพัฒนาซอฟต์แวร์ทดสอบ โดยไม่ส่งข้อความจริงๆ

ค่าเริ่มต้นคือ false

เพย์โหลด
data ไม่บังคับ ออบเจ็กต์

พารามิเตอร์นี้ระบุคู่คีย์-ค่าสำหรับเพย์โหลดของข้อความ

เช่น data:{"score":"3x1"}:

ในแพลตฟอร์ม Apple หากข้อความส่งโดย APN ข้อความนี้จะแสดงช่องข้อมูลที่กำหนดเอง ถ้า FCM จะนำส่งคำสั่งซื้อดังกล่าว จะแสดงเป็นพจนานุกรมคีย์-ค่าใน AppDelegate application:didReceiveRemoteNotification:

ใน Android การดำเนินการนี้จะทำให้มี Intent เพิ่มเติมที่ชื่อ score ที่มีค่าสตริง 3x1

คีย์ไม่ควรเป็นคำที่สงวนไว้ ("from", "message_type" หรือคำใดๆ ที่ขึ้นต้นด้วย "google" หรือ "gcm") อย่าใช้คำใดๆ ที่ระบุไว้ในตารางนี้ (เช่น collapse_key)

ขอแนะนำให้ใช้ค่าในประเภทสตริง คุณต้องแปลงค่าในออบเจ็กต์หรือประเภทข้อมูลที่ไม่ใช่สตริง (เช่น จำนวนเต็มหรือบูลีน) เป็นสตริง

notification ไม่บังคับ ออบเจ็กต์ พารามิเตอร์นี้ระบุคู่คีย์-ค่าที่กำหนดไว้ล่วงหน้าและที่ผู้ใช้มองเห็นของ เพย์โหลดการแจ้งเตือน โปรดดูรายละเอียดเกี่ยวกับการรองรับเพย์โหลดการแจ้งเตือน หากต้องการดูข้อมูลเพิ่มเติม เกี่ยวกับตัวเลือกข้อความการแจ้งเตือนและข้อความแจ้งข้อมูล โปรดดู ประเภทข้อความ หากมีการระบุเพย์โหลดการแจ้งเตือน หรือ ตั้งค่าตัวเลือก content_available เป็น true สำหรับข้อความที่ส่งถึง Apple อุปกรณ์ ข้อความจะส่งผ่าน APN หรือไม่ก็ส่งผ่าน FCM

การรองรับเพย์โหลดการแจ้งเตือน

ตารางต่อไปนี้แสดงรายการของ ซึ่งใช้ในการสร้างข้อความแจ้งเตือนสำหรับแพลตฟอร์ม Apple และ Android

ตาราง 2ก Apple — คีย์สำหรับข้อความแจ้งเตือน

พารามิเตอร์ การใช้งาน คำอธิบาย
title สตริง (ไม่บังคับ)

ชื่อการแจ้งเตือน

ฟิลด์นี้จะไม่ปรากฏบนโทรศัพท์และแท็บเล็ต

body สตริง (ไม่บังคับ)

ข้อความเนื้อหาของการแจ้งเตือน

sound สตริง (ไม่บังคับ)

เสียงที่จะเล่นเมื่ออุปกรณ์ได้รับการแจ้งเตือน

สตริงที่ระบุไฟล์เสียงในแพ็กเกจหลักของแอปไคลเอ็นต์หรือใน Library/Sounds โฟลเดอร์ของคอนเทนเนอร์ข้อมูลของแอป โปรดดู iOS Developer Library สำหรับข้อมูลเพิ่มเติม

badge สตริง (ไม่บังคับ)

ค่าของป้ายในไอคอนแอปหน้าจอหลัก

หากไม่ระบุ ป้ายดังกล่าวจะไม่เปลี่ยนแปลง

หากตั้งค่าเป็น 0 ระบบจะนำป้ายออก

click_action สตริง (ไม่บังคับ)

การดำเนินการที่เชื่อมโยงกับผู้ใช้คลิกการแจ้งเตือน

ตรงกับ category ในเพย์โหลด APNs

subtitle สตริง (ไม่บังคับ)

คำบรรยายของการแจ้งเตือน

body_loc_key สตริง (ไม่บังคับ)

คีย์ในสตริงเนื้อหาในทรัพยากรสตริงของแอปที่จะใช้ แปลข้อความเนื้อหาเป็นการแปลเป็นภาษาปัจจุบันของผู้ใช้

ตรงกับ loc-key ในเพย์โหลด APNs

โปรดดู ข้อมูลอ้างอิงคีย์ของเพย์โหลดและ การแปลเนื้อหาของการแจ้งเตือนระยะไกลเพื่อดูข้อมูลเพิ่มเติม

body_loc_args ไม่บังคับ อาร์เรย์ JSON เป็นสตริง

ค่าสตริงตัวแปรที่จะใช้แทนตัวระบุรูปแบบใน body_loc_key เพื่อใช้แปลเนื้อหาเป็นภาษา การแปลปัจจุบันของผู้ใช้

ตรงกับ loc-args ในเพย์โหลด APNs

โปรดดู ข้อมูลอ้างอิงคีย์ของเพย์โหลดและ การแปลเนื้อหาของการแจ้งเตือนระยะไกลเพื่อดูข้อมูลเพิ่มเติม

title_loc_key สตริง (ไม่บังคับ)

คีย์ของสตริงชื่อในทรัพยากรสตริงของแอปที่จะใช้ แปลข้อความชื่อตามการแปลเป็นภาษาปัจจุบันของผู้ใช้

ตรงกับ title-loc-key ในเพย์โหลด APNs

โปรดดู ข้อมูลอ้างอิงคีย์ของเพย์โหลดและ การแปลเนื้อหาของการแจ้งเตือนระยะไกลเพื่อดูข้อมูลเพิ่มเติม

title_loc_args ไม่บังคับ อาร์เรย์ JSON เป็นสตริง

ค่าสตริงตัวแปรที่จะใช้แทนตัวระบุรูปแบบใน title_loc_key เพื่อใช้ในการแปลข้อความชื่อเป็นภาษา การแปลปัจจุบันของผู้ใช้

ตรงกับ title-loc-args ในเพย์โหลด APNs

โปรดดู ข้อมูลอ้างอิงคีย์ของเพย์โหลดและ การแปลเนื้อหาของการแจ้งเตือนระยะไกลเพื่อดูข้อมูลเพิ่มเติม

ตาราง 2ข. Android — กุญแจสำหรับข้อความแจ้งเตือน

พารามิเตอร์ การใช้งาน คำอธิบาย
title สตริง (ไม่บังคับ)

ชื่อการแจ้งเตือน

body สตริง (ไม่บังคับ)

ข้อความเนื้อหาของการแจ้งเตือน

android_channel_id สตริง (ไม่บังคับ)

รหัสช่องของการแจ้งเตือน (ใหม่ใน Android O)

แอปต้องสร้างช่องโดยใช้รหัสช่องนี้ก่อนที่จะมีการแจ้งเตือนที่มีรหัสช่องนี้ ได้รับ

หากคุณไม่ได้ส่งรหัสช่องนี้ในคำขอ หรือรหัสช่องที่ระบุยังไม่ได้รับการส่ง ซึ่ง FCM จะใช้รหัสแชแนลที่ระบุไว้ในไฟล์ Manifest ของแอป

icon สตริง (ไม่บังคับ)

ไอคอนการแจ้งเตือน

ตั้งค่าไอคอนการแจ้งเตือนเป็น myicon สำหรับทรัพยากรที่ถอนออกได้ myicon หากไม่ได้ส่งคีย์นี้ในคำขอ FCM จะแสดงไอคอน Launcher ที่ระบุไว้ในไฟล์ Manifest ของแอป

sound สตริง (ไม่บังคับ)

เสียงที่จะเล่นเมื่ออุปกรณ์ได้รับการแจ้งเตือน

รองรับ "default" หรือชื่อไฟล์ของทรัพยากรเสียง รวมอยู่ในแอป ไฟล์เสียงต้องอยู่ใน /res/raw/

tag สตริง (ไม่บังคับ)

ตัวระบุที่ใช้แทนที่การแจ้งเตือนที่มีอยู่ในการแจ้งเตือน ลิ้นชัก

หากไม่ระบุ คำขอแต่ละรายการจะสร้างการแจ้งเตือนใหม่

หากระบุและการแจ้งเตือนที่มีแท็กเดียวกันอยู่แล้ว การแจ้งเตือนใหม่นี้จะแทนที่การแจ้งเตือนที่มีอยู่ใน ลิ้นชักการแจ้งเตือน

color สตริง (ไม่บังคับ)

สีไอคอนของการแจ้งเตือน ซึ่งแสดงในรูปแบบ #rrggbb

click_action สตริง (ไม่บังคับ)

การดำเนินการที่เชื่อมโยงกับผู้ใช้คลิกการแจ้งเตือน

หากระบุไว้ กิจกรรมที่มีตัวกรอง Intent ตรงกันจะเปิดขึ้นเมื่อ ผู้ใช้คลิกการแจ้งเตือน

body_loc_key สตริง (ไม่บังคับ)

คีย์ในสตริงเนื้อหาในทรัพยากรสตริงของแอปที่จะใช้ แปลข้อความเนื้อหาเป็นการแปลเป็นภาษาปัจจุบันของผู้ใช้

โปรดดู แหล่งข้อมูลสตริงสำหรับข้อมูลเพิ่มเติม

body_loc_args ไม่บังคับ อาร์เรย์ JSON เป็นสตริง

ค่าสตริงตัวแปรที่จะใช้แทนตัวระบุรูปแบบใน body_loc_key เพื่อใช้แปลเนื้อหาเป็นภาษา การแปลปัจจุบันของผู้ใช้

โปรดดู การจัดรูปแบบและการจัดรูปแบบสำหรับข้อมูลเพิ่มเติม

title_loc_key สตริง (ไม่บังคับ)

คีย์ของสตริงชื่อในทรัพยากรสตริงของแอปที่จะใช้ แปลข้อความชื่อตามการแปลเป็นภาษาปัจจุบันของผู้ใช้

โปรดดู แหล่งข้อมูลสตริงสำหรับข้อมูลเพิ่มเติม

title_loc_args ไม่บังคับ อาร์เรย์ JSON เป็นสตริง

ค่าสตริงตัวแปรที่จะใช้แทนตัวระบุรูปแบบใน title_loc_key เพื่อใช้ในการแปลข้อความชื่อเป็นภาษา การแปลปัจจุบันของผู้ใช้

โปรดดู การจัดรูปแบบและการจัดรูปแบบสำหรับข้อมูลเพิ่มเติม

ตาราง 2ค เว็บ (JavaScript) — คีย์สำหรับข้อความแจ้งเตือน

พารามิเตอร์ การใช้งาน คำอธิบาย
title สตริง (ไม่บังคับ)

ชื่อการแจ้งเตือน

body สตริง (ไม่บังคับ)

ข้อความเนื้อหาของการแจ้งเตือน

icon สตริง (ไม่บังคับ)

URL ที่ใช้สำหรับไอคอนการแจ้งเตือน

click_action สตริง (ไม่บังคับ)

การดำเนินการที่เชื่อมโยงกับผู้ใช้คลิกการแจ้งเตือน

ค่า URL ทั้งหมดต้องใช้ HTTPS

ตีความการตอบกลับข้อความ XMPP ดาวน์สตรีม

ตารางต่อไปนี้แสดงฟิลด์ที่ปรากฏในการตอบกลับข้อความ XMPP ดาวน์สตรีม

ตารางที่ 3 เนื้อหาการตอบกลับ XMPP ของข้อความดาวน์สตรีม

พารามิเตอร์ การใช้งาน คำอธิบาย
from ต้องระบุ สตริง

พารามิเตอร์นี้จะระบุผู้ส่งคำตอบนี้

ค่านี้คือโทเค็นการลงทะเบียนของแอปไคลเอ็นต์

message_id ต้องระบุ สตริง พารามิเตอร์นี้จะระบุข้อความในการเชื่อมต่อ XMPP โดยไม่ซ้ำกัน ค่านี้จะเป็นสตริงที่ระบุข้อความที่เกี่ยวข้องโดยไม่ซ้ำกัน
message_type ต้องระบุ สตริง

พารามิเตอร์นี้ระบุข้อความ ack หรือ nack จาก FCM ไปยังเซิร์ฟเวอร์ของแอป

หากตั้งค่าเป็น nack เซิร์ฟเวอร์ของแอปควรดูที่ error และ error_description เพื่อรับข้อมูลการทำงานล้มเหลว

error สตริง (ไม่บังคับ) พารามิเตอร์นี้ระบุข้อผิดพลาดที่เกี่ยวข้องกับข้อความดาวน์สตรีม โดยจะตั้งค่าเมื่อ message_type คือnack ดูรายละเอียดในตาราง 4
error_description สตริง (ไม่บังคับ) พารามิเตอร์นี้จะให้ข้อมูลรายละเอียดของข้อผิดพลาด ตั้งค่าแล้ว เมื่อmessage_typeคือnack

โค้ดตอบกลับข้อผิดพลาดของข้อความดาวน์สตรีม

ตารางต่อไปนี้แสดงโค้ดตอบกลับของข้อผิดพลาดสำหรับข้อความดาวน์สตรีม

ตาราง 4 รหัสการตอบกลับข้อผิดพลาดของข้อความดาวน์สตรีม

ข้อผิดพลาด รหัส XMPP การดำเนินการที่แนะนำ
ไม่มีโทเค็นการลงทะเบียน INVALID_JSON ตรวจสอบว่าคำขอมีโทเค็นการลงทะเบียน (ใน registration_idในข้อความธรรมดา หรือในto หรือ registration_ids ใน JSON)
การลงทะเบียน APN ไม่ถูกต้อง INVALID_JSON สำหรับการลงทะเบียน iOS ให้ตรวจสอบว่าคำขอลงทะเบียนจากไคลเอ็นต์มี โทเค็น APN และรหัสแอปพลิเคชันที่ถูกต้อง
โทเค็นการลงทะเบียนไม่ถูกต้อง BAD_REGISTRATION ตรวจสอบรูปแบบของโทเค็นการลงทะเบียนที่คุณส่งไปยังเซิร์ฟเวอร์ ตรวจสอบ ตรงกับโทเค็นการลงทะเบียนที่แอปไคลเอ็นต์ได้รับจากการลงทะเบียนกับ FCM ห้าม ตัดหรือเพิ่มอักขระอื่น
อุปกรณ์ที่ไม่ได้ลงทะเบียน DEVICE_UNREGISTERED โทเค็นการลงทะเบียนที่มีอยู่อาจใช้ไม่ได้ในบางสถานการณ์ ดังนี้
  • หากแอปไคลเอ็นต์ยกเลิกการลงทะเบียนกับ FCM
  • ในกรณีที่แอปไคลเอ็นต์ถูกยกเลิกการลงทะเบียนโดยอัตโนมัติ ซึ่งอาจเกิดขึ้นได้หาก ผู้ใช้ถอนการติดตั้งแอปพลิเคชัน เช่น ใน iOS หาก APN รายงานว่าโทเค็น APNs ไม่ถูกต้อง
  • หากโทเค็นการลงทะเบียนหมดอายุ (เช่น Google อาจตัดสินใจรีเฟรช โทเค็นการลงทะเบียน หรือโทเค็น APNs หมดอายุสําหรับอุปกรณ์)
  • หากอัปเดตแอปไคลเอ็นต์แล้ว แต่ไม่ได้กำหนดค่าเวอร์ชันใหม่ให้รับข้อความ
สำหรับทุกกรณี ให้นำโทเค็นการลงทะเบียนนี้ออกจากแอป และหยุดใช้ในการส่งข้อความ
ผู้ส่งไม่ตรงกัน SENDER_ID_MISMATCH โทเค็นการลงทะเบียนจะผูกกับกลุ่มผู้ส่งบางกลุ่ม เมื่อแอปของไคลเอ็นต์ลงทะเบียน สำหรับ FCM ต้องระบุผู้ส่งที่ได้รับอนุญาตให้ส่งข้อความ คุณควรใช้ข้อมูลโค้ด ของรหัสผู้ส่งเหล่านั้นเมื่อส่งข้อความถึงแอปไคลเอ็นต์ หากเปลี่ยนไปใช้ ผู้ส่ง โทเค็นการลงทะเบียนที่มีอยู่จะไม่ทำงาน
JSON ไม่ถูกต้อง INVALID_JSON ตรวจสอบว่าข้อความ JSON อยู่ในรูปแบบที่ถูกต้องและมีช่องที่ถูกต้อง (เช่น การส่งประเภทข้อมูลที่ถูกต้อง)
ข้อความมีขนาดใหญ่เกินไป INVALID_JSON ตรวจสอบว่าขนาดรวมของข้อมูลเพย์โหลดที่รวมอยู่ในข้อความ ไม่เกินขีดจำกัดของ FCM: 4096 ไบต์สำหรับข้อความส่วนใหญ่หรือ 2048 ไบต์ในกรณีที่ ของข้อความไปยังหัวข้อ ซึ่งรวมทั้ง คีย์และค่า
คีย์ข้อมูลไม่ถูกต้อง INVALID_JSON ตรวจสอบว่าข้อมูลเพย์โหลดไม่มีคีย์ (เช่น from, gcm หรือค่าใดก็ได้ นำหน้าด้วย google) ที่ใช้ภายในโดย FCM โปรดทราบว่าคำบางคำ (เช่น collapse_key) ก็ใช้โดย FCM เช่นกัน แต่จะอนุญาตในเพย์โหลด ซึ่งในกรณีนี้ ค่า FCM จะลบล้างค่าเพย์โหลด
Time to Live ไม่ถูกต้อง INVALID_JSON ตรวจสอบว่าค่าที่ใช้ใน time_to_live เป็นจำนวนเต็มที่แสดง ระยะเวลาเป็นวินาทีระหว่าง 0 ถึง 2,419,200 (4 สัปดาห์)
ข้อความ ACK ไม่ถูกต้อง BAD_ACK ตรวจสอบว่าข้อความ ack อยู่ในรูปแบบที่ถูกต้องก่อนลองอีกครั้ง โปรดดู ตาราง 6 เพื่อดูรายละเอียด
ระยะหมดเวลา SERVICE_UNAVAILABLE

เซิร์ฟเวอร์ประมวลผลคำขอได้ไม่ทันเวลา ลองส่งคำขอเดิมอีกครั้ง แต่คุณต้องทำดังนี้

  • ใช้ Exponential Backoff ในกลไกการลองใหม่ (เช่น ถ้าคุณรอ 1 วินาที ก่อนการลองใหม่ครั้งแรก ให้รออย่างน้อย 2 วินาทีก่อนรายการถัดไป จากนั้น 4 วินาที เป็นต้น) หากส่งข้อความหลายข้อความ ให้หน่วงเวลาข้อความแต่ละรายการทีละข้อความด้วยการสุ่มเพิ่ม เพื่อหลีกเลี่ยงการออกคำขอใหม่สำหรับข้อความทั้งหมดพร้อมกัน
  • การหน่วงเวลาการลองใหม่เริ่มต้นควรอยู่ที่ 1 วินาที

หมายเหตุ: ผู้ส่งที่ก่อให้เกิดปัญหาอาจเสี่ยงต่อการถูกขึ้นบัญชีดำ

ข้อผิดพลาดภายในเซิร์ฟเวอร์ INTERNAL_SERVER_
ERROR
เซิร์ฟเวอร์พบข้อผิดพลาดขณะพยายามประมวลผลคำขอ คุณลองอีกครั้งได้ คำขอเดียวกันที่เป็นไปตามข้อกำหนดที่ระบุไว้ใน "ระยะหมดเวลา" (ดูแถวด้านบน)
เกินอัตราข้อความในอุปกรณ์ DEVICE_MESSAGE_RATE
_EXCEEDED
อัตราการส่งข้อความไปยังอุปกรณ์เครื่องใดเครื่องหนึ่งสูงเกินไป ลด จำนวนข้อความที่ส่งไปยังอุปกรณ์นี้ และจะไม่พยายามส่งไปยังอุปกรณ์นี้อีกครั้งในทันที
เกินอัตราข้อความของหัวข้อ TOPICS_MESSAGE_RATE
_EXCEEDED
อัตราการส่งข้อความไปยังผู้ติดตามในหัวข้อใดหัวข้อหนึ่งสูงเกินไป ลด จำนวนข้อความที่ส่งสำหรับหัวข้อนี้ และจะไม่ลองส่งอีกครั้งในทันที
การระบายการเชื่อมต่อ CONNECTION_DRAINING ประมวลผลข้อความไม่ได้เนื่องจากกำลังระบายการเชื่อมต่อ นั่นเป็นเพราะ FCM จำเป็นต้องปิดการเชื่อมต่อเป็นระยะๆ เพื่อทำการจัดสรรภาระงาน ลองส่งข้อความอีกครั้ง เชื่อมต่อ XMPP อีกครั้ง
ข้อมูลเข้าสู่ระบบ APN ไม่ถูกต้อง INVALID_APNS_CREDENTIAL ส่งข้อความที่กำหนดเป้าหมายไปยังอุปกรณ์ iOS ไม่ได้เนื่องจาก APN ที่จำเป็น คีย์การตรวจสอบสิทธิ์ไม่ได้อัปโหลดหรือหมดอายุแล้ว ตรวจสอบความถูกต้องของการพัฒนา และข้อมูลรับรองการผลิต
ตรวจสอบสิทธิ์ไม่สำเร็จ AUTHENTICATION_FAILED ไม่สามารถตรวจสอบสิทธิ์กับบริการพุชภายนอก ตรวจสอบว่าคุณใช้ ใบรับรองพุชจากเว็บที่ถูกต้อง

ไวยากรณ์ข้อความอัปสตรีม

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

การตีความข้อความ XMPP ต้นทาง

ตารางต่อไปนี้อธิบายฟิลด์ในกลุ่มข้อความ XMPP ที่สร้างขึ้น โดย FCM เพื่อตอบกลับคำขอข้อความอัปสตรีมจากแอปไคลเอ็นต์

ตารางที่ 5 ข้อความ XMPP ต้นทาง

พารามิเตอร์ การใช้งาน คำอธิบาย
from ต้องระบุ สตริง

พารามิเตอร์นี้จะระบุผู้ที่ส่งข้อความ

ค่านี้คือโทเค็นการลงทะเบียนของแอปไคลเอ็นต์

category ต้องระบุ สตริง พารามิเตอร์นี้ระบุชื่อแพ็กเกจแอปพลิเคชันของแอปไคลเอ็นต์ที่ส่งข้อความ
message_id ต้องระบุ สตริง พารามิเตอร์นี้ระบุรหัสที่ไม่ซ้ำกันของข้อความ
data สตริง (ไม่บังคับ) พารามิเตอร์นี้ระบุคู่คีย์-ค่าสำหรับเพย์โหลดของข้อความ

กำลังส่งข้อความ ACK

ตารางต่อไปนี้อธิบายการตอบสนอง ACK ที่เซิร์ฟเวอร์ของแอปควรจะส่งไปให้ FCM เพื่อตอบสนองต่อ ข้อความอัปสตรีมที่เซิร์ฟเวอร์ของแอปได้รับ

ตารางที่ 6 การตอบกลับข้อความอัปสตรีม XMPP

พารามิเตอร์ การใช้งาน คำอธิบาย
to ต้องระบุ สตริง

พารามิเตอร์นี้จะระบุผู้รับข้อความตอบกลับ

ค่าต้องเป็นโทเค็นการลงทะเบียนของแอปไคลเอ็นต์ที่ส่งข้อความอัปสตรีม

message_id ต้องระบุ สตริง พารามิเตอร์นี้จะระบุข้อความตอบกลับ ค่าต้องเป็น ค่า message_id จากข้อความอัปสตรีมที่เกี่ยวข้อง
message_type ต้องระบุ สตริง พารามิเตอร์นี้ระบุข้อความ ack จากเซิร์ฟเวอร์แอปไปยัง CCS สำหรับข้อความอัปสตรีม ควรตั้งค่าเป็น ack เสมอ

ข้อความจากเซิร์ฟเวอร์ FCM (XMPP)

นี่คือข้อความที่ส่งจาก FCM ไปยังเซิร์ฟเวอร์ของแอป ต่อไปนี้คือข้อความประเภทหลักที่ FCM ส่งไปยังเซิร์ฟเวอร์ของแอป:

  • การควบคุม: ข้อความ CCS เหล่านี้ระบุว่า เซิร์ฟเวอร์ของแอป

ตารางต่อไปนี้อธิบายช่องที่รวมอยู่ในข้อความ CCS ส่งไปยังเซิร์ฟเวอร์ของแอป

ตารางที่ 7 ข้อความควบคุม FCM (XMPP)

พารามิเตอร์ การใช้งาน คำอธิบาย
ช่องทั่วไป
message_type ต้องระบุ สตริง

พารามิเตอร์นี้ระบุประเภทข้อความ: control

เมื่อตั้งค่าเป็น control ข้อความจะมี control_type เพื่อระบุ ประเภทข้อความควบคุม

control_type สตริง (ไม่บังคับ)

พารามิเตอร์นี้ระบุประเภทของข้อความควบคุมที่ส่งจาก FCM

ปัจจุบันรองรับ CONNECTION_DRAINING เท่านั้น FCM ส่งข้อความการควบคุมนี้ ก่อนที่จะปิดการเชื่อมต่อเพื่อทำการจัดสรรภาระงาน เมื่อการเชื่อมต่อถูกตัด ไม่มีข้อความอีกต่อไป ได้รับอนุญาตให้ส่งไปยังการเชื่อมต่อ แต่ข้อความที่มีอยู่ในไปป์ไลน์ จะดำเนินการต่อไป