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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ในแพลตฟอร์ม Apple ให้ใช้ช่องนี้เพื่อแสดง mutable-content ในเพย์โหลด APN เมื่อส่งการแจ้งเตือนและตั้งค่าเป็น 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

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 รายงานว่าโทเค็น APN ไม่ถูกต้อง
  • หากโทเค็นการลงทะเบียนหมดอายุ (เช่น Google อาจตัดสินใจรีเฟรชโทเค็นการลงทะเบียน หรือโทเค็น APN หมดอายุสําหรับอุปกรณ์)
  • หากอัปเดตแอปไคลเอ็นต์แล้ว แต่ไม่ได้กำหนดค่าเวอร์ชันใหม่ให้รับข้อความ
สำหรับทุกกรณี ให้นำโทเค็นการลงทะเบียนนี้ออกจากเซิร์ฟเวอร์แอปและหยุดใช้โทเค็นดังกล่าวเพื่อส่งข้อความ
ผู้ส่งไม่ตรงกัน SENDER_ID_MISMATCH โทเค็นการลงทะเบียนจะผูกกับกลุ่มผู้ส่งบางกลุ่ม เมื่อแอปไคลเอ็นต์ลงทะเบียนสำหรับ FCM แอปต้องระบุผู้ส่งที่ได้รับอนุญาตให้ส่งข้อความ คุณควรใช้รหัสผู้ส่งรหัสใดรหัสหนึ่งเมื่อส่งข้อความไปยังแอปไคลเอ็นต์ หากเปลี่ยนไปใช้ผู้ส่งรายอื่น โทเค็นการลงทะเบียนที่มีอยู่จะไม่ทำงาน
JSON ไม่ถูกต้อง INVALID_JSON ตรวจสอบว่าข้อความ JSON อยู่ในรูปแบบที่ถูกต้องและมีช่องที่ถูกต้อง (เช่น ตรวจสอบว่ามีการส่งผ่านประเภทข้อมูลที่ถูกต้อง)
ข้อความมีขนาดใหญ่เกินไป INVALID_JSON ตรวจสอบว่าขนาดข้อมูลเพย์โหลดโดยรวมในข้อความไม่เกินขีดจำกัด FCM นั่นคือ 4096 ไบต์สำหรับข้อความส่วนใหญ่ หรือ 2048 ไบต์ในกรณีที่เป็นข้อความที่ส่งถึงหัวข้อ ซึ่งจะมีทั้งคีย์และค่า
คีย์ข้อมูลไม่ถูกต้อง INVALID_JSON ตรวจสอบว่าข้อมูลเพย์โหลดไม่มีคีย์ (เช่น from, gcm หรือค่าใดๆ ที่มีคำนำหน้าเป็น google) ที่ FCM ใช้ภายใน โปรดทราบว่า FCM จะใช้คำบางคำด้วย (เช่น collapse_key) แต่อนุญาตให้ใช้ในเพย์โหลด ซึ่งในกรณีนี้จะมีการลบล้างค่าเพย์โหลดด้วยค่า 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 จะส่งข้อความการควบคุมนี้ก่อนที่จะปิดการเชื่อมต่อเพื่อทำการจัดสรรภาระงาน เมื่อการเชื่อมต่อถูกตัด ระบบจะไม่อนุญาตให้ส่งข้อความเพิ่มเติมไปยังการเชื่อมต่อ แต่ข้อความที่มีอยู่ในไปป์ไลน์จะยังคงได้รับการประมวลผลต่อไป