Firebase Cloud Messaging (FCM) มีตัวเลือกและความสามารถการส่งข้อความที่หลากหลาย ข้อมูลในหน้านี้มีวัตถุประสงค์เพื่อช่วยให้คุณเข้าใจข้อความ FCM ประเภทต่างๆ และสิ่งที่คุณสามารถทำได้กับข้อความเหล่านั้น
ประเภทข้อความ
ด้วย FCM คุณสามารถส่งข้อความสองประเภทไปยังลูกค้า:
- ข้อความแจ้งเตือน ซึ่งบางครั้งคิดว่าเป็น "ข้อความที่แสดง" สิ่งเหล่านี้ได้รับการจัดการโดย FCM SDK โดยอัตโนมัติ
- ข้อความข้อมูลซึ่งจัดการโดยแอปไคลเอ็นต์
ข้อความแจ้งเตือนมีชุดคีย์ที่ผู้ใช้มองเห็นที่กำหนดไว้ล่วงหน้า ในทางตรงกันข้าม ข้อความข้อมูลจะมีเฉพาะคู่คีย์-ค่าแบบกำหนดเองที่ผู้ใช้กำหนดเท่านั้น ข้อความแจ้งเตือนสามารถมีเพย์โหลดข้อมูลเสริม เพย์โหลดสูงสุดสำหรับข้อความทั้งสองประเภทคือ 4000 ไบต์ ยกเว้นเมื่อส่งข้อความจากคอนโซล Firebase ซึ่งบังคับใช้ขีดจำกัดอักขระ 1024 ตัว
ใช้สถานการณ์ | วิธีการส่ง | |
---|---|---|
ข้อความแจ้งเตือน | FCM จะแสดงข้อความโดยอัตโนมัติไปยังอุปกรณ์ของผู้ใช้ปลายทางในนามของแอปไคลเอ็นต์ ข้อความแจ้งเตือนมีชุดคีย์ที่ผู้ใช้มองเห็นที่กำหนดไว้ล่วงหน้าและเพย์โหลดข้อมูลเสริมของคู่คีย์-ค่าที่กำหนดเอง |
|
ข้อความข้อมูล | แอปไคลเอ็นต์มีหน้าที่ในการประมวลผลข้อความข้อมูล ข้อความข้อมูลมีเฉพาะคู่คีย์-ค่าที่กำหนดเองโดยไม่มีชื่อคีย์ที่สงวนไว้ (ดูด้านล่าง) | ในสภาพแวดล้อมที่เชื่อถือได้ เช่น Cloud Functions หรือเซิร์ฟเวอร์แอปของคุณ ให้ใช้ Admin SDK หรือ FCM Server Protocols : ตั้งค่าคีย์ data เท่านั้น |
ใช้ข้อความแจ้งเตือนเมื่อคุณต้องการให้ FCM จัดการการแสดงการแจ้งเตือนในนามของแอปไคลเอ็นต์ของคุณ ใช้ข้อความข้อมูลเมื่อคุณต้องการประมวลผลข้อความในแอปไคลเอ็นต์ของคุณ
FCM สามารถส่งข้อความแจ้งเตือนรวมถึงเพย์โหลดข้อมูลเสริม ในกรณีดังกล่าว FCM จะจัดการแสดงส่วนข้อมูลการแจ้งเตือน และแอปไคลเอนต์จัดการเพย์โหลดข้อมูล
ข้อความแจ้งเตือน
สำหรับการทดสอบหรือเพื่อการตลาดและการมีส่วนร่วมกับผู้ใช้อีกครั้ง คุณสามารถ ส่งข้อความแจ้งเตือนโดยใช้คอนโซล Firebase คอนโซล Firebase มีการ ทดสอบ A/B ตามการวิเคราะห์เพื่อช่วยคุณปรับแต่งและปรับปรุงข้อความทางการตลาด
ในการส่งข้อความแจ้งเตือนทางโปรแกรมโดยใช้ Admin SDK หรือโปรโตคอล FCM ให้ตั้งค่าคีย์การ notification
ด้วยชุดตัวเลือกคีย์-ค่าที่กำหนดไว้ล่วงหน้าที่จำเป็นสำหรับส่วนที่ผู้ใช้มองเห็นได้ของข้อความแจ้งเตือน ตัวอย่างเช่น นี่คือข้อความแจ้งเตือนรูปแบบ JSON ในแอป IM ผู้ใช้สามารถคาดหวังว่าจะเห็นข้อความที่มีชื่อ "โปรตุเกส vs. เดนมาร์ก" และข้อความ "คู่กันมาก!" บนอุปกรณ์:
{ "message":{ "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...", "notification":{ "title":"Portugal vs. Denmark", "body":"great match!" } } }
ข้อความแจ้งเตือนจะถูกส่งไปยังถาดการแจ้งเตือนเมื่อแอปอยู่ในพื้นหลัง สำหรับแอปที่อยู่เบื้องหน้า ข้อความจะได้รับการจัดการโดยฟังก์ชันเรียกกลับ
ดูเอกสารอ้างอิงสำหรับรายการคีย์ที่กำหนดไว้ล่วงหน้าทั้งหมดสำหรับข้อความแจ้งเตือนของอาคาร:
- ออบเจ็กต์การแจ้งเตือนโปรโตคอล HTTP v1
- เพย์โหลดการแจ้งเตือน HTTP Protocol ดั้งเดิม
- เพย์โหลดการแจ้งเตือนโปรโตคอล XMPP
ข้อความข้อมูล
ตั้งค่าคีย์ที่เหมาะสมกับคู่คีย์-ค่าที่กำหนดเองของคุณเพื่อส่งข้อมูลไปยังแอปไคลเอ็นต์
ตัวอย่างเช่น นี่คือข้อความที่จัดรูปแบบ JSON ในแอป IM เดียวกันกับด้านบน โดยที่ข้อมูลจะถูกห่อหุ้มไว้ในคีย์ data
ทั่วไป และแอปไคลเอ็นต์คาดว่าจะตีความเนื้อหา:
{ "message":{ "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...", "data":{ "Nick" : "Mario", "body" : "great match!", "Room" : "PortugalVSDenmark" } } }
ตัวอย่างข้างต้นแสดงการใช้งานระดับบนสุดหรือฟิลด์ data
ทั่วไป ซึ่งลูกค้าจะตีความบนทุกแพลตฟอร์มที่ได้รับข้อความ ในแต่ละแพลตฟอร์ม แอปไคลเอ็นต์จะได้รับข้อมูลเพย์โหลดในฟังก์ชันเรียกกลับ
การเข้ารหัสสำหรับข้อความข้อมูล
Android Transport Layer (ดู สถาปัตยกรรม FCM ) ใช้การเข้ารหัสแบบจุดต่อจุด คุณอาจตัดสินใจเพิ่มการเข้ารหัสจากต้นทางถึงปลายทางลงในข้อความข้อมูล ทั้งนี้ขึ้นอยู่กับความต้องการของคุณ FCM ไม่ได้ให้บริการโซลูชั่นแบบ end-to-end อย่างไรก็ตาม มีวิธีแก้ไขปัญหาภายนอก เช่น Capillary หรือ DTLS
ข้อความแจ้งเตือนพร้อมเพย์โหลดข้อมูลเสริม
ทั้งโดยทางโปรแกรมหรือผ่านคอนโซล Firebase คุณสามารถส่งข้อความแจ้งเตือนที่มีเพย์โหลดของคู่คีย์-ค่าที่กำหนดเองได้ ในเครื่องมือสร้างการ แจ้งเตือน ให้ใช้ฟิลด์ ข้อมูลที่กำหนดเอง ใน ตัวเลือกขั้นสูง
พฤติกรรมของแอปเมื่อได้รับข้อความที่มีทั้งเพย์โหลดการแจ้งเตือนและข้อมูลขึ้นอยู่กับว่าแอปอยู่ในเบื้องหลังหรือเบื้องหน้า โดยพื้นฐานแล้ว แอปจะทำงานอยู่ในขณะที่ได้รับหรือไม่
- เมื่ออยู่ในพื้นหลัง แอปจะได้รับเพย์โหลดการแจ้งเตือนในถาดการแจ้งเตือน และจัดการเพย์โหลดข้อมูลเมื่อผู้ใช้แตะที่การแจ้งเตือนเท่านั้น
- เมื่ออยู่เบื้องหน้า แอปของคุณจะได้รับวัตถุข้อความพร้อมทั้งเพย์โหลดที่พร้อมใช้งาน
นี่คือข้อความรูปแบบ JSON ที่มีทั้งคีย์การ notification
และคีย์ data
:
{ "message":{ "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...", "notification":{ "title":"Portugal vs. Denmark", "body":"great match!" }, "data" : { "Nick" : "Mario", "Room" : "PortugalVSDenmark" } } }
การปรับแต่งข้อความข้ามแพลตฟอร์ม
Firebase Admin SDK และโปรโตคอล FCM v1 HTTP อนุญาตให้คำขอข้อความของคุณเพื่อตั้งค่าฟิลด์ทั้งหมดที่มีอยู่ในวัตถุ message
ซึ่งรวมถึง:
- ชุดฟิลด์ทั่วไปที่จะตีความโดยอินสแตนซ์ของแอป ทั้งหมด ที่ได้รับข้อความ
- ชุดฟิลด์เฉพาะแพลตฟอร์ม เช่น
AndroidConfig
และWebpushConfig
ตีความโดยอินสแตนซ์ของแอปที่ทำงานบนแพลตฟอร์มที่ระบุเท่านั้น
บล็อกเฉพาะแพลตฟอร์มให้ความยืดหยุ่นในการปรับแต่งข้อความสำหรับแพลตฟอร์มต่างๆ เพื่อให้แน่ใจว่าจะได้รับการจัดการอย่างถูกต้องเมื่อได้รับ แบ็กเอนด์ของ FCM จะพิจารณาพารามิเตอร์ที่ระบุทั้งหมดและปรับแต่งข้อความสำหรับแต่ละแพลตฟอร์ม
เมื่อใดควรใช้ฟิลด์ทั่วไป
ใช้ฟิลด์ทั่วไปเมื่อคุณ:
- การกำหนดเป้าหมายอินสแตนซ์ของแอปใน ทุก แพลตฟอร์ม — Apple, Android และ web
- กำลังส่งข้อความไปยังหัวข้อ
อินสแตนซ์ของแอปทั้งหมด โดยไม่คำนึงถึงแพลตฟอร์ม สามารถตีความฟิลด์ทั่วไปต่อไปนี้:
เมื่อใดควรใช้ฟิลด์เฉพาะแพลตฟอร์ม
ใช้ฟิลด์เฉพาะแพลตฟอร์มเมื่อคุณต้องการ:
- ส่งฟิลด์ไปยังแพลตฟอร์มเฉพาะเท่านั้น
- ส่งฟิลด์เฉพาะแพลตฟอร์ม นอกเหนือจาก ฟิลด์ทั่วไป
เมื่อใดก็ตามที่คุณต้องการส่งค่าเฉพาะไปยังแพลตฟอร์มใดแพลตฟอร์มหนึ่ง อย่า ใช้ฟิลด์ทั่วไป ใช้ฟิลด์เฉพาะแพลตฟอร์ม ตัวอย่างเช่น หากต้องการส่งการแจ้งเตือนไปยังแพลตฟอร์มและเว็บของ Apple เท่านั้น แต่ไม่ส่งไปยัง Android คุณต้องใช้ฟิลด์แยกกันสองชุด ชุดหนึ่งสำหรับ Apple และอีกชุดสำหรับเว็บ
เมื่อคุณส่งข้อความที่มี ตัวเลือกการจัดส่ง เฉพาะ ให้ใช้ฟิลด์เฉพาะแพลตฟอร์มเพื่อตั้งค่า คุณสามารถระบุค่าต่างๆ สำหรับแต่ละแพลตฟอร์มได้หากต้องการ อย่างไรก็ตาม แม้ว่าคุณต้องการตั้งค่าโดยพื้นฐานแล้วในแพลตฟอร์มต่างๆ คุณต้องใช้ฟิลด์เฉพาะแพลตฟอร์ม ทั้งนี้เนื่องจากแต่ละแพลตฟอร์มอาจตีความค่าแตกต่างกันเล็กน้อย ตัวอย่างเช่น ตั้งเวลาในการแสดงสดบน Android เป็นเวลาหมดอายุเป็นวินาที ในขณะที่ Apple ถูกตั้งค่าเป็น วันที่ หมดอายุ
ตัวอย่าง: ข้อความแจ้งเตือนพร้อมตัวเลือกการจัดส่งเฉพาะแพลตฟอร์ม
คำขอส่ง v1 ต่อไปนี้จะส่งชื่อการแจ้งเตือนและเนื้อหาทั่วไปไปยังทุกแพลตฟอร์ม แต่ยังส่งการแทนที่เฉพาะแพลตฟอร์มบางอย่างด้วย โดยเฉพาะคำขอ:
- ตั้งค่าให้ใช้งานได้ยาวนานสำหรับแพลตฟอร์ม Android และเว็บ ในขณะที่ตั้งค่าลำดับความสำคัญของข้อความ APN (แพลตฟอร์ม Apple) เป็นการตั้งค่าต่ำ
- ตั้งค่าคีย์ที่เหมาะสมเพื่อกำหนดผลลัพธ์ที่ผู้ใช้แตะที่การแจ้งเตือนบน Android และ Apple —
click_action
และcategory
ตามลำดับ
{ "message":{ "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...", "notification":{ "title":"Match update", "body":"Arsenal goal in added time, score is now 3-0" }, "android":{ "ttl":"86400s", "notification"{ "click_action":"OPEN_ACTIVITY_1" } }, "apns": { "headers": { "apns-priority": "5", }, "payload": { "aps": { "category": "NEW_MESSAGE_CATEGORY" } } }, "webpush":{ "headers":{ "TTL":"86400" } } } }
ดู เอกสารอ้างอิง HTTP v1 สำหรับรายละเอียดทั้งหมดเกี่ยวกับคีย์ที่มีอยู่ในบล็อกเฉพาะแพลตฟอร์มในเนื้อหาของข้อความ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการสร้างคำขอส่งที่มีเนื้อหาของข้อความ โปรดดู สร้างคำขอส่ง
ตัวเลือกการจัดส่ง
FCM ให้ชุดตัวเลือกการส่งเฉพาะสำหรับข้อความที่ส่งไปยังอุปกรณ์ Android และอนุญาตให้ใช้ตัวเลือกที่คล้ายกันบนแพลตฟอร์มและเว็บของ Apple ตัวอย่างเช่น รองรับการทำงานของข้อความ "ที่ยุบได้" บน Android ผ่านทาง Collaps_key ของ FCM, บน Apple ผ่าน apns-collapse-id
collapse_key
บน JavaScript/เว็บผ่าน Topic
สำหรับรายละเอียด โปรดดูคำอธิบายในส่วนนี้และเอกสารอ้างอิงที่เกี่ยวข้อง
ข้อความที่ไม่ยุบและยุบได้
ข้อความ ที่ไม่สามารถยุบได้ แสดงว่าแต่ละข้อความถูกส่งไปยังอุปกรณ์ ข้อความที่ไม่สามารถยุบได้จะนำเสนอเนื้อหาที่มีประโยชน์บางอย่าง ซึ่งต่างจากข้อความที่ยุบได้ เช่น "ping" ที่ปราศจากเนื้อหาไปยังแอปบนอุปกรณ์เคลื่อนที่เพื่อติดต่อเซิร์ฟเวอร์เพื่อดึงข้อมูล
กรณีการใช้งานทั่วไปของข้อความที่ไม่สามารถยุบได้คือข้อความแชทหรือข้อความสำคัญ ตัวอย่างเช่น ในแอป IM คุณต้องการส่งทุกข้อความ เนื่องจากทุกข้อความมีเนื้อหาที่แตกต่างกัน
สำหรับ Android มีขีด จำกัด 100 ข้อความที่สามารถจัดเก็บได้โดยไม่ยุบ หากถึงขีดจำกัด ข้อความที่เก็บไว้ทั้งหมดจะถูกยกเลิก เมื่ออุปกรณ์กลับมาออนไลน์อีกครั้ง จะได้รับข้อความพิเศษระบุว่าถึงขีดจำกัดแล้ว แอปสามารถจัดการกับสถานการณ์ได้อย่างเหมาะสม โดยทั่วไปแล้วจะร้องขอการซิงค์แบบเต็มจากเซิร์ฟเวอร์แอป
ข้อความที่ ยุบ ได้คือข้อความที่อาจแทนที่ด้วยข้อความใหม่หากยังไม่ได้ส่งไปยังอุปกรณ์
กรณีการใช้งานทั่วไปของข้อความที่ยุบได้คือข้อความที่ใช้เพื่อบอกให้แอปมือถือซิงค์ข้อมูลจากเซิร์ฟเวอร์ ตัวอย่างจะเป็นแอปกีฬาที่อัปเดตผู้ใช้ด้วยคะแนนล่าสุด เฉพาะข้อความล่าสุดเท่านั้นที่เกี่ยวข้อง
หากต้องการทำเครื่องหมายข้อความว่ายุบได้บน Android ให้ใส่พารามิเตอร์ collapse_key
_key ในเพย์โหลดข้อความ โดยค่าเริ่มต้น คีย์ยุบคือชื่อแพ็กเกจแอปที่ลงทะเบียนในคอนโซล Firebase เซิร์ฟเวอร์ FCM สามารถจัดเก็บข้อความที่ยุบได้สี่ข้อความต่ออุปกรณ์พร้อมกัน โดยแต่ละข้อความมีคีย์การยุบที่แตกต่างกัน หากคุณเกินจำนวนนี้ FCM จะเก็บคีย์การยุบไว้เพียงสี่คีย์เท่านั้น โดยไม่รับประกันว่าจะเก็บคีย์ใดไว้
ข้อความหัวข้อที่ไม่มีส่วนของข้อมูลจะยุบได้ตามค่าเริ่มต้น ข้อความแจ้งเตือนจะยุบได้เสมอและจะไม่สนใจพารามิเตอร์ collapse_key
_key
ฉันควรใช้อะไร
ข้อความที่ยุบได้เป็นทางเลือกที่ดีกว่าในแง่ของประสิทธิภาพ โดยที่แอปของคุณไม่จำเป็นต้องใช้ข้อความที่ยุบไม่ได้ อย่างไรก็ตาม หากคุณใช้ข้อความที่ยุบได้ โปรดจำไว้ว่า FCM อนุญาตให้ FCM ใช้คีย์การยุบที่ต่างกันได้สูงสุดสี่คีย์ต่อโทเค็นการลงทะเบียนในช่วงเวลาหนึ่งๆ คุณต้องไม่เกินจำนวนนี้ มิฉะนั้นอาจก่อให้เกิดผลที่คาดเดาไม่ได้
ใช้สถานการณ์ | วิธีการส่ง | |
---|---|---|
พับไม่ได้ | ทุกข้อความมีความสำคัญต่อแอปไคลเอนต์และจำเป็นต้องส่ง | ยกเว้นข้อความแจ้งเตือน ข้อความทั้งหมดไม่สามารถยุบได้ตามค่าเริ่มต้น |
พับได้ | เมื่อมีข้อความใหม่ที่แสดงข้อความที่เก่ากว่าและไม่เกี่ยวข้องกับแอปไคลเอ็นต์ FCM จะแทนที่ข้อความที่เก่ากว่า ตัวอย่างเช่น: ข้อความที่ใช้เพื่อเริ่มต้นการซิงค์ข้อมูลจากเซิร์ฟเวอร์ หรือข้อความแจ้งเตือนที่ล้าสมัย | ตั้งค่าพารามิเตอร์ที่เหมาะสมในคำขอข้อความของคุณ:
|
การตั้งค่าลำดับความสำคัญของข้อความ
คุณมีสองตัวเลือกในการกำหนดลำดับความสำคัญในการส่งให้กับข้อความดาวน์สตรีม: ปกติและลำดับความสำคัญสูง แม้ว่าพฤติกรรมจะแตกต่างกันเล็กน้อยในแต่ละแพลตฟอร์ม แต่การส่งข้อความปกติและลำดับความสำคัญสูงจะทำงานดังนี้:
ลำดับความสำคัญปกติ ข้อความที่มีลำดับความสำคัญปกติจะถูกส่งทันทีเมื่อแอปอยู่เบื้องหน้า สำหรับแอปที่ทำงานอยู่เบื้องหลัง การจัดส่งอาจล่าช้า สำหรับข้อความที่ไม่ค่อยคำนึงถึงเวลา เช่น การแจ้งเตือนอีเมลใหม่ การซิงค์ UI ของคุณ หรือการซิงค์ข้อมูลแอปในเบื้องหลัง ให้เลือกลำดับความสำคัญในการส่งแบบปกติ
ลำดับความสำคัญสูง FCM พยายามส่งข้อความที่มีลำดับความสำคัญสูงในทันที แม้ว่าอุปกรณ์จะอยู่ในโหมด Doze ข้อความที่มีลำดับความสำคัญสูงมีไว้สำหรับเนื้อหาที่ผู้ใช้มองเห็นได้ซึ่งมีความอ่อนไหวต่อเวลา
ต่อไปนี้คือตัวอย่างข้อความลำดับความสำคัญปกติที่ส่งผ่านโปรโตคอล FCM HTTP v1 เพื่อแจ้งให้สมาชิกนิตยสารทราบว่ามีเนื้อหาใหม่ให้ดาวน์โหลด:
{ "message":{ "topic":"subscriber-updates", "notification":{ "body" : "This week's edition is now available.", "title" : "NewsMagazine.com", }, "data" : { "volume" : "3.21.15", "contents" : "http://www.news-magazine.com/world-week/21659772" }, "android":{ "priority":"normal" }, "apns":{ "headers":{ "apns-priority":"5" } }, "webpush": { "headers": { "Urgency": "high" } } } }
สำหรับรายละเอียดเพิ่มเติมเฉพาะแพลตฟอร์มเกี่ยวกับการตั้งค่าลำดับความสำคัญของข้อความ:
การตั้งค่าอายุขัยของข้อความ
FCM มักจะส่งข้อความทันทีหลังจากที่ส่ง อย่างไรก็ตาม สิ่งนี้อาจไม่สามารถทำได้เสมอไป ตัวอย่างเช่น หากแพลตฟอร์มเป็น Android อุปกรณ์อาจถูกปิด ออฟไลน์ หรือไม่พร้อมใช้งาน หรือ FCM อาจจงใจหน่วงเวลาข้อความเพื่อป้องกันไม่ให้แอปใช้ทรัพยากรมากเกินไปและส่งผลเสียต่ออายุการใช้งานแบตเตอรี่
เมื่อสิ่งนี้เกิดขึ้น FCM จะจัดเก็บข้อความและส่งข้อความทันทีที่ทำได้ แม้ว่าจะเป็นเรื่องปกติในกรณีส่วนใหญ่ แต่ก็มีบางแอปที่อาจไม่สามารถส่งข้อความล่าช้าได้เช่นกัน ตัวอย่างเช่น หากข้อความเป็นสายเรียกเข้าหรือการแจ้งเตือนทางวิดีโอแชท ข้อความนั้นจะมีความหมายเพียงช่วงเวลาสั้นๆ ก่อนที่สายจะถูกยกเลิก หรือหากข้อความเป็นการเชิญเข้าร่วมงานจะไม่มีประโยชน์หากได้รับหลังจากสิ้นสุดกิจกรรม
บน Android และ Web/JavaScript คุณสามารถระบุอายุขัยสูงสุดของข้อความได้ ค่าต้องมีระยะเวลาตั้งแต่ 0 ถึง 2,419,200 วินาที (28 วัน) และสอดคล้องกับระยะเวลาสูงสุดที่ FCM จัดเก็บและพยายามส่งข้อความ คำขอที่ไม่มีฟิลด์นี้มีค่าเริ่มต้นเป็นระยะเวลาสูงสุดสี่สัปดาห์
ต่อไปนี้คือการใช้งานบางส่วนที่เป็นไปได้สำหรับคุณลักษณะนี้:
- วิดีโอแชทสายเรียกเข้า
- กิจกรรมเชิญที่กำลังจะหมดอายุ
- กิจกรรมในปฏิทิน
ข้อดีอีกประการของการระบุอายุขัยของข้อความคือ FCM จะไม่ควบคุมข้อความที่มีค่า time-to-live เป็น 0 วินาที กล่าวอีกนัยหนึ่ง FCM รับประกันความพยายามอย่างดีที่สุดสำหรับข้อความที่ต้องส่ง "ตอนนี้หรือไม่" โปรดทราบว่าค่า time_to_live
เป็น 0 หมายความว่าข้อความที่ไม่สามารถส่งได้ทันทีจะถูกยกเลิก อย่างไรก็ตาม เนื่องจากข้อความดังกล่าวจะไม่ถูกจัดเก็บ จึงทำให้มีเวลาแฝงที่ดีที่สุดสำหรับการส่งข้อความแจ้งเตือน
นี่คือตัวอย่างคำขอที่มี TTL:
{ "message":{ "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...", "data":{ "Nick" : "Mario", "body" : "great match!", "Room" : "PortugalVSDenmark" }, "apns":{ "headers":{ "apns-expiration":"1604750400" } }, "android":{ "ttl":"4500s" }, "webpush":{ "headers":{ "TTL":"4500" } } } }
การรับข้อความจากผู้ส่งหลายคน
FCM อนุญาตให้หลายฝ่ายส่งข้อความไปยังแอปไคลเอนต์เดียวกัน ตัวอย่างเช่น สมมติว่าแอปไคลเอ็นต์เป็นผู้รวบรวมบทความที่มีผู้ร่วมให้ข้อมูลหลายคน และแต่ละคนควรสามารถส่งข้อความได้เมื่อเผยแพร่บทความใหม่ ข้อความนี้อาจมี URL เพื่อให้แอปไคลเอ็นต์สามารถดาวน์โหลดบทความได้ แทนที่จะต้องรวมศูนย์กิจกรรมการส่งทั้งหมดไว้ในที่เดียว FCM ช่วยให้คุณสามารถให้ผู้ร่วมให้ข้อมูลแต่ละรายส่งข้อความของตนเองได้
ในการเปิดใช้งานคุณลักษณะนี้ ตรวจสอบให้แน่ใจว่าคุณมี ID ผู้ส่ง ของผู้ส่งแต่ละราย เมื่อขอลงทะเบียน แอปไคลเอนต์จะดึงโทเค็นหลายครั้ง แต่ละครั้งด้วย ID ผู้ส่งที่แตกต่างกันในช่องผู้ชม โดยใช้วิธีการดึงโทเค็นสำหรับแพลตฟอร์มที่กำหนด:
- Swift —
token(completion:)
- Android —
FirebaseMessaging.getInstance().getToken()
ตรวจสอบให้แน่ใจว่าคุณ ไม่ได้ เพิ่ม ID ผู้ส่งหลายรายการในคำขอโทเค็นเดียว เนื่องจากอาจมีผลลัพธ์ที่คาดเดาไม่ได้ โทรแยกกันหนึ่งครั้งต่อ ID ผู้ส่ง
สุดท้าย แชร์โทเค็นการลงทะเบียนกับผู้ส่งที่เกี่ยวข้อง และพวกเขาจะสามารถส่งข้อความไปยังแอปไคลเอนต์ได้โดยใช้คีย์การตรวจสอบสิทธิ์ของตนเอง
โปรดทราบว่ามีผู้ส่งหลายคนจำกัด 100 คน
อายุการใช้งานของข้อความ
เมื่อเซิร์ฟเวอร์แอปโพสต์ข้อความไปยัง FCM และได้รับรหัสข้อความกลับ ไม่ได้หมายความว่าข้อความนั้นถูกส่งไปยังอุปกรณ์แล้ว ค่อนข้างหมายความว่าเป็นที่ยอมรับสำหรับการจัดส่ง สิ่งที่เกิดขึ้นกับข้อความหลังจากที่ได้รับการยอมรับนั้นขึ้นอยู่กับหลายปัจจัย
ในกรณีที่ดีที่สุด หากอุปกรณ์เชื่อมต่อกับ FCM หน้าจอจะเปิดขึ้นและไม่มีข้อจำกัดในการควบคุมปริมาณ ข้อความจะถูกส่งทันที
หากอุปกรณ์เชื่อมต่ออยู่แต่อยู่ใน Doze ข้อความที่มีลำดับความสำคัญต่ำจะถูกจัดเก็บโดย FCM จนกว่าอุปกรณ์จะไม่มี Doze และนั่นคือจุดที่แฟล็ก collapse_key
_key มีบทบาท: หากมีข้อความที่มีคีย์ยุบ (และโทเค็นการลงทะเบียน) เดียวกันจัดเก็บไว้และรอการส่ง ข้อความเก่าจะถูกยกเลิกและข้อความใหม่จะเข้ามาแทนที่ (นั่นคือ ข้อความเก่า ข้อความถูกยุบโดยข้อความใหม่) อย่างไรก็ตาม หากไม่ได้ตั้งค่าคีย์ยุบ ข้อความทั้งใหม่และเก่าจะถูกเก็บไว้สำหรับการส่งในอนาคต
หากอุปกรณ์ไม่ได้เชื่อมต่อกับ FCM ข้อความจะถูกเก็บไว้จนกว่าจะมีการสร้างการเชื่อมต่อ (เคารพกฎการยุบอีกครั้ง) เมื่อสร้างการเชื่อมต่อแล้ว FCM จะส่งข้อความที่รอดำเนินการทั้งหมดไปยังอุปกรณ์ หากอุปกรณ์ไม่เชื่อมต่ออีกเลย (เช่น หากรีเซ็ตเป็นค่าเริ่มต้นจากโรงงาน) ในที่สุดข้อความจะหมดเวลาและถูกละทิ้งจากที่จัดเก็บข้อมูล FCM ระยะหมดเวลาเริ่มต้นคือสี่สัปดาห์ เว้นแต่จะมีการตั้งค่าสถานะ time_to_live
เพื่อรับข้อมูลเชิงลึกเพิ่มเติมเกี่ยวกับการส่งข้อความ:
หากต้องการรับข้อมูลเชิงลึกเพิ่มเติมเกี่ยวกับการส่งข้อความบนแพลตฟอร์ม Android หรือ Apple โปรดดู แดชบอร์ดการรายงาน FCM ซึ่งบันทึกจำนวนข้อความที่ส่งและเปิดบนอุปกรณ์ Apple และ Android พร้อมด้วยข้อมูลสำหรับ "การแสดงผล" (การแจ้งเตือนที่ผู้ใช้เห็น) สำหรับ แอพแอนดรอยด์
สำหรับอุปกรณ์ Android ที่เปิดใช้งานการส่งข้อความผ่านช่องสัญญาณโดยตรง หากอุปกรณ์ไม่ได้เชื่อมต่อกับ FCM เป็นเวลานานกว่าหนึ่งเดือน FCM จะยังคงยอมรับข้อความนั้น แต่จะยกเลิกทันที หากอุปกรณ์เชื่อมต่อภายในสี่สัปดาห์ของข้อความข้อมูลล่าสุดที่คุณส่งไป ไคลเอ็นต์ของคุณจะได้รับการเรียกกลับ onDeletedMessages() แอปสามารถจัดการกับสถานการณ์ได้อย่างเหมาะสม โดยทั่วไปแล้วจะร้องขอการซิงค์แบบเต็มจากเซิร์ฟเวอร์แอป
สุดท้าย เมื่อ FCM พยายามส่งข้อความไปยังอุปกรณ์และถอนการติดตั้งแอปแล้ว FCM จะทิ้งข้อความนั้นทันทีและทำให้โทเค็นการลงทะเบียนใช้งานไม่ได้ ความพยายามในอนาคตในการส่งข้อความไปยังอุปกรณ์นั้นส่งผลให้เกิดข้อผิดพลาด NotRegistered
การควบคุมปริมาณและการปรับขนาด
เป้าหมายของเราคือส่งทุกข้อความที่ส่งผ่าน FCM เสมอ อย่างไรก็ตาม การส่งทุกข้อความในบางครั้งอาจส่งผลให้ผู้ใช้ได้รับประสบการณ์โดยรวมที่ไม่ดี ในกรณีอื่นๆ เราจำเป็นต้องจัดเตรียมขอบเขตเพื่อให้แน่ใจว่า FCM ให้บริการที่ปรับขนาดได้สำหรับผู้ส่งทั้งหมด
การควบคุมปริมาณข้อความที่ยุบได้
ตามที่อธิบายไว้ข้างต้น ข้อความที่ยุบได้คือการแจ้งเตือนแบบไม่มีเนื้อหาที่ออกแบบมาเพื่อยุบทับกัน ในกรณีที่นักพัฒนาใช้ข้อความเดิมซ้ำกับแอปบ่อยเกินไป เราจะหน่วงเวลา (ควบคุม) ข้อความเพื่อลดผลกระทบต่อแบตเตอรี่ของผู้ใช้
ตัวอย่างเช่น หากคุณส่งคำขอซิงค์อีเมลใหม่จำนวนมากไปยังอุปกรณ์เครื่องเดียว เราอาจชะลอคำขอซิงค์อีเมลครั้งถัดไปสักครู่ เพื่อให้อุปกรณ์สามารถซิงค์ได้ในอัตราเฉลี่ยที่ต่ำกว่า การควบคุมปริมาณนี้ทำขึ้นอย่างเคร่งครัดเพื่อจำกัดผลกระทบของแบตเตอรี่ที่ผู้ใช้ประสบ
หากกรณีการใช้งานของคุณต้องการรูปแบบการส่งแบบต่อเนื่องสูง ข้อความที่ไม่สามารถยุบได้อาจเป็นตัวเลือกที่เหมาะสม สำหรับข้อความดังกล่าว ตรวจสอบให้แน่ใจว่าได้รวมเนื้อหาในข้อความดังกล่าวเพื่อลดต้นทุนแบตเตอรี่
เราจำกัดข้อความที่ยุบได้ไม่เกิน 20 ข้อความต่อแอพต่ออุปกรณ์ โดยต้องเติม 1 ข้อความทุก 3 นาที
การควบคุมปริมาณเซิร์ฟเวอร์ XMPP
เราจำกัดอัตราที่คุณสามารถเชื่อมต่อกับเซิร์ฟเวอร์ FCM XMPP ที่ 400 การเชื่อมต่อต่อนาทีต่อโปรเจ็กต์ สิ่งนี้ไม่ควรเป็นปัญหาสำหรับการส่งข้อความ แต่เป็นสิ่งสำคัญสำหรับการรับรองความเสถียรของระบบของเรา
สำหรับแต่ละโปรเจ็กต์ FCM อนุญาตการเชื่อมต่อ 2500 แบบขนานกัน
อัตราการส่งข้อความสูงสุดในเครื่องเดียว
คุณสามารถส่งข้อความได้มากถึง 240 ข้อความ/นาที และ 5,000 ข้อความต่อชั่วโมงไปยังอุปกรณ์เครื่องเดียว เกณฑ์ที่สูงนี้มีขึ้นเพื่อให้มีปริมาณการใช้ข้อมูลจำนวนมากในระยะสั้น เช่น เมื่อผู้ใช้โต้ตอบอย่างรวดเร็วผ่านการแชท ขีดจำกัดนี้ป้องกันข้อผิดพลาดในการส่งลอจิกจากการทำให้แบตเตอรี่หมดโดยไม่ได้ตั้งใจในอุปกรณ์
ขีด จำกัด ข้อความต้นน้ำ
เราจำกัด ข้อความอัปสตรี มที่ 1,500,000/นาทีต่อโปรเจ็กต์เพื่อหลีกเลี่ยงการโอเวอร์โหลดเซิร์ฟเวอร์ปลายทางอัปสตรีม
เราจำกัดข้อความอัปสตรีมต่ออุปกรณ์ที่ 1,000/นาที เพื่อป้องกันแบตเตอรี่หมดจากการทำงานของแอปที่ไม่ดี
จำกัดข้อความหัวข้อ
อัตราการเพิ่ม/ลบการสมัครรับหัวข้อจำกัดที่ 3,000 QPS ต่อโปรเจ็กต์
สำหรับอัตราการส่งข้อความ โปรดดู ที่ Fanout Throttling
การควบคุมปริมาณ Fanout
การกระจายข้อความเป็นกระบวนการในการส่งข้อความไปยังอุปกรณ์หลายเครื่อง เช่น เมื่อคุณกำหนดเป้าหมายหัวข้อและกลุ่ม หรือเมื่อคุณใช้ตัวเขียนการ แจ้งเตือน เพื่อกำหนดเป้าหมายผู้ชมหรือกลุ่มผู้ใช้
การกระจายข้อความไม่ได้เกิดขึ้นทันที ดังนั้นในบางครั้งคุณจึงมีหลาย fanouts ที่กำลังดำเนินการอยู่พร้อมๆ กัน เราจำกัดจำนวนการแจกแจงข้อความพร้อมกันต่อโปรเจ็กต์ที่ 1,000 หลังจากนั้น เราอาจปฏิเสธคำขอ fanout เพิ่มเติม หรือเลื่อน fanout ของคำขอออกไปจนกว่า fanout ที่กำลังดำเนินการอยู่บางส่วนจะเสร็จสมบูรณ์
อัตราการแจกแจงที่ทำได้จริงจะขึ้นอยู่กับจำนวนโปรเจ็กต์ที่ร้องขอการกระจายพร้อมกัน อัตราการกระจายเสียงที่ 10,000 QPS สำหรับแต่ละโปรเจ็กต์ไม่ใช่เรื่องแปลก แต่ตัวเลขนั้นไม่ได้รับประกัน และเป็นผลมาจากการโหลดทั้งหมดในระบบ สิ่งสำคัญคือต้องทราบว่าความจุ fanout ที่มีอยู่จะถูกแบ่งระหว่างโปรเจ็กต์ ไม่ใช่ในคำขอ fanout ดังนั้น หากโปรเจ็กต์ของคุณมี Fanout สองรายการที่กำลังดำเนินการอยู่ แต่ละ Fanout จะเห็นเพียงครึ่งหนึ่งของอัตราการ Fanout ที่มีอยู่ วิธีที่แนะนำในการเพิ่มความเร็วพัดลมเอาต์ของคุณให้สูงสุดคือการมีแฟนเอาต์ที่ทำงานอยู่เพียงครั้งละหนึ่งรายการเท่านั้น
พอร์ต FCM และไฟร์วอลล์ของคุณ
ถ้าองค์กรของคุณมีไฟร์วอลล์เพื่อจำกัดการรับส่งข้อมูลเข้าหรือออกจากอินเทอร์เน็ต คุณต้องกำหนดค่าให้อุปกรณ์เคลื่อนที่เชื่อมต่อกับ FCM เพื่อให้อุปกรณ์ในเครือข่ายของคุณสามารถรับข้อความได้ โดยทั่วไปแล้ว FCM จะใช้พอร์ต 5228 แต่บางครั้งก็ใช้ 443, 5229 และ 5230
สำหรับอุปกรณ์ที่เชื่อมต่อกับเครือข่ายของคุณ FCM ไม่มี IP เฉพาะ เนื่องจากช่วง IP ของเรามีการเปลี่ยนแปลงบ่อยเกินไป และกฎไฟร์วอลล์ของคุณอาจล้าสมัย ซึ่งส่งผลต่อประสบการณ์ของผู้ใช้ของคุณ ตามหลักการแล้ว พอร์ตรายการที่อนุญาต 5228-5230 & 443 โดยไม่มีข้อจำกัด IP อย่างไรก็ตาม หากคุณต้องมีการจำกัด IP คุณควรอนุญาตที่อยู่ IP ทั้งหมดที่ระบุไว้ใน goog.json รายการขนาดใหญ่นี้มีการอัปเดตเป็นประจำ และขอแนะนำให้คุณอัปเดตกฎของคุณเป็นประจำทุกเดือน ปัญหาที่เกิดจากข้อจำกัด IP ของไฟร์วอลล์มักเกิดขึ้นเป็นระยะๆ และวินิจฉัยได้ยาก
เรามีชุดชื่อโดเมนที่สามารถอนุญาตแทนที่อยู่ IP ชื่อโฮสต์เหล่านี้แสดงอยู่ด้านล่าง หากเราเริ่มใช้ชื่อโฮสต์เพิ่มเติม เราจะอัปเดตรายการที่นี่ การใช้ชื่อโดเมนสำหรับกฎไฟร์วอลล์ของคุณอาจใช้หรือไม่ทำงานในอุปกรณ์ไฟร์วอลล์ของคุณ
พอร์ต TCP ที่จะเปิด:
- 5228
- 5229
- 5230
- 443
ชื่อโฮสต์ที่จะเปิด:
- mtalk.google.com
- mtalk4.google.com
- mtalk-staging.google.com
- mtalk-dev.google.com
- alt1-mtalk.google.com
- alt2-mtalk.google.com
- alt3-mtalk.google.com
- alt4-mtalk.google.com
- alt5-mtalk.google.com
- alt6-mtalk.google.com
- alt7-mtalk.google.com
- alt8-mtalk.google.com
- android.apis.google.com
- device-provisioning.googleapis.com
- firebaseinstallations.googleapis.com
Network Address Translation และ/หรือ Stateful Packet Inspection firewalls:
หากเครือข่ายของคุณใช้ Network Address Translation (NAT) หรือ Stateful Packet Inspection (SPI) ให้ใช้การหมดเวลา 30 นาทีหรือนานกว่านั้นสำหรับการเชื่อมต่อของเราผ่านพอร์ต 5228-5230 สิ่งนี้ทำให้เราสามารถให้การเชื่อมต่อที่เชื่อถือได้ในขณะที่ลดการใช้แบตเตอรี่ของอุปกรณ์มือถือของผู้ใช้ของคุณ
ข้อมูลประจำตัว
คุณอาจต้องใช้ข้อมูลรับรองต่อไปนี้จากโปรเจ็กต์ Firebase ทั้งนี้ขึ้นอยู่กับฟีเจอร์ FCM ที่คุณใช้
รหัสโครงการ | ตัวระบุที่ไม่ซ้ำกันสำหรับโปรเจ็กต์ Firebase ของคุณ ซึ่งใช้ในคำขอไปยังปลายทาง FCM v1 HTTP ค่านี้มีอยู่ใน แผง การตั้งค่า คอนโซล Firebase |
โทเค็นการลงทะเบียน | สตริงโทเค็นที่ไม่ซ้ำกันซึ่งระบุอินสแตนซ์ของแอปไคลเอ็นต์แต่ละรายการ ต้องใช้โทเค็นการลงทะเบียนสำหรับการส่งข้อความในอุปกรณ์เดียวและกลุ่มอุปกรณ์ โปรดทราบว่าโทเค็นการลงทะเบียนจะต้องถูกเก็บเป็นความลับ |
รหัสผู้ส่ง | ค่าตัวเลขที่ไม่ซ้ำกันซึ่งสร้างขึ้นเมื่อคุณสร้างโปรเจ็กต์ Firebase ซึ่งมีอยู่ในแท็บการ รับส่งข้อความในระบบคลาวด์ ของแผง การตั้งค่า คอนโซล Firebase รหัสผู้ส่งใช้เพื่อระบุผู้ส่งแต่ละรายที่สามารถส่งข้อความไปยังแอปไคลเอนต์ได้ |
โทเค็นการเข้าถึง | โทเค็น OAuth 2.0 อายุสั้นที่อนุญาตคำขอไปยัง HTTP v1 API โทเค็นนี้เชื่อมโยงกับบัญชีบริการที่เป็นของโปรเจ็กต์ Firebase ในการสร้างและหมุนเวียนโทเค็นการเข้าถึง ให้ทำตามขั้นตอนที่อธิบายไว้ใน Authorize Send Requests |
รหัสเซิร์ฟเวอร์ (สำหรับโปรโตคอลเดิม) | คีย์เซิร์ฟเวอร์ที่อนุญาตให้เซิร์ฟเวอร์แอปของคุณเข้าถึงบริการของ Google รวมถึงการส่งข้อความผ่านโปรโตคอล Firebase Cloud Messaging เดิม คุณได้รับคีย์เซิร์ฟเวอร์เมื่อคุณสร้างโปรเจ็กต์ Firebase คุณสามารถดูได้ในแท็บ Cloud Messaging ของบานหน้าต่าง การตั้งค่า คอนโซล Firebase สำคัญ: อย่ารวมคีย์เซิร์ฟเวอร์ไว้ในโค้ดไคลเอ็นต์ของคุณ ตรวจสอบให้แน่ใจว่าใช้เฉพาะคีย์เซิร์ฟเวอร์เพื่ออนุญาตเซิร์ฟเวอร์แอปของคุณ FCM ปฏิเสธ Android, แพลตฟอร์ม Apple และเบราว์เซอร์ |