Firebase Cloud Messaging (FCM) มีตัวเลือกและความสามารถในการส่งข้อความที่หลากหลาย ข้อมูลในหน้านี้มีไว้เพื่อช่วยให้คุณเข้าใจข้อความ FCM ประเภทต่างๆและสิ่งที่คุณสามารถทำได้กับข้อความเหล่านี้
ประเภทข้อความ
ด้วย FCM คุณสามารถส่งข้อความถึงลูกค้าได้สองประเภท:
- ข้อความแจ้งเตือนบางครั้งคิดว่าเป็น "ข้อความที่แสดง" FCM SDK จัดการโดยอัตโนมัติ
- ข้อความข้อมูลซึ่งจัดการโดยแอปไคลเอ็นต์
ข้อความแจ้งเตือนประกอบด้วยชุดคีย์ที่ผู้ใช้มองเห็นได้ซึ่งกำหนดไว้ล่วงหน้า ในทางตรงกันข้ามข้อความข้อมูลจะมีเฉพาะคู่คีย์ - ค่าที่ผู้ใช้กำหนดเอง ข้อความแจ้งเตือนสามารถมีส่วนข้อมูลเสริมได้ เพย์โหลดสูงสุดสำหรับข้อความทั้งสองประเภทคือ 4KB ยกเว้นเมื่อส่งข้อความจากคอนโซล Firebase ซึ่งบังคับใช้ขีด จำกัด 1024 อักขระ
ใช้สถานการณ์ | วิธีการส่ง | |
---|---|---|
ข้อความแจ้งเตือน | FCM แสดงข้อความโดยอัตโนมัติไปยังอุปกรณ์ของผู้ใช้ปลายทางในนามของแอปไคลเอ็นต์ ข้อความแจ้งเตือนมีชุดคีย์ที่ผู้ใช้มองเห็นซึ่งกำหนดไว้ล่วงหน้าและเพย์โหลดข้อมูลที่เป็นทางเลือกของคู่คีย์ - ค่าที่กำหนดเอง |
|
ข้อความข้อมูล | แอปไคลเอ็นต์มีหน้าที่ในการประมวลผลข้อความข้อมูล ข้อความข้อมูลมีเฉพาะคู่คีย์ - ค่าที่กำหนดเองโดยไม่มีชื่อคีย์สำรอง (ดูด้านล่าง) | ในสภาพแวดล้อมที่เชื่อถือได้เช่น Cloud Functions หรือเซิร์ฟเวอร์แอปของคุณให้ใช้ Admin SDK หรือ FCM Server Protocols : ตั้งค่าคีย์ data เท่านั้น |
ใช้ข้อความแจ้งเตือนเมื่อคุณต้องการให้ FCM จัดการกับการแสดงการแจ้งเตือนในนามของแอปไคลเอ็นต์ของคุณ ใช้ข้อความข้อมูลเมื่อคุณต้องการประมวลผลข้อความบนแอปไคลเอ็นต์ของคุณ
FCM สามารถส่งข้อความแจ้งเตือนรวมถึงเพย์โหลดข้อมูลเสริม ในกรณีเช่นนี้ FCM จะจัดการกับการแสดงเพย์โหลดการแจ้งเตือนและแอปไคลเอ็นต์จะจัดการเพย์โหลดข้อมูล
ข้อความแจ้งเตือน
สำหรับการทดสอบหรือเพื่อการตลาดและการมีส่วนร่วมซ้ำของผู้ใช้คุณสามารถ ส่งข้อความแจ้งเตือนโดยใช้คอนโซล Firebase คอนโซล Firebase มีการ ทดสอบ A / B ตามการวิเคราะห์เพื่อช่วยคุณปรับแต่งและปรับปรุงข้อความทางการตลาด
ในการส่งข้อความแจ้งเตือนทางโปรแกรมโดยใช้ Admin SDK หรือโปรโตคอล FCM ให้ตั้งค่าคีย์การ notification
ด้วยชุดตัวเลือกคีย์ - ค่าที่กำหนดไว้ล่วงหน้าที่จำเป็นสำหรับส่วนที่ผู้ใช้มองเห็นได้ของข้อความแจ้งเตือน ตัวอย่างเช่นนี่คือข้อความแจ้งเตือนในรูปแบบ JSON ในแอป IM ผู้ใช้สามารถคาดหวังว่าจะเห็นข้อความที่มีหัวข้อ "โปรตุเกสกับเดนมาร์ก" และข้อความ "การแข่งขันที่ยอดเยี่ยม!" บนอุปกรณ์:
{ "message":{ "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...", "notification":{ "title":"Portugal vs. Denmark", "body":"great match!" } } }
ข้อความแจ้งเตือนจะถูกส่งไปยังถาดการแจ้งเตือนเมื่อแอปทำงานอยู่เบื้องหลัง สำหรับแอปที่อยู่เบื้องหน้าข้อความจะถูกจัดการโดยฟังก์ชันเรียกกลับ
ดูเอกสารอ้างอิงสำหรับรายการคีย์ที่กำหนดไว้ล่วงหน้าทั้งหมดสำหรับการสร้างข้อความแจ้งเตือน:
- วัตถุการแจ้งเตือนโปรโตคอล HTTP v1
- เพย์โหลดการแจ้งเตือนโปรโตคอล HTTP เดิม
- เพย์โหลดการแจ้งเตือน XMPP Protocol
ข้อความข้อมูล
ตั้งค่าคีย์ที่เหมาะสมกับคู่คีย์ - ค่าที่คุณกำหนดเองเพื่อส่งเพย์โหลดข้อมูลไปยังแอปไคลเอ็นต์
ตัวอย่างเช่นต่อไปนี้เป็นข้อความที่จัดรูปแบบ JSON ในแอป IM เดียวกันกับด้านบนซึ่งข้อมูลจะถูกห่อหุ้มไว้ในคีย์ data
ทั่วไปและคาดว่าแอปไคลเอ็นต์จะตีความเนื้อหา:
{ "message":{ "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...", "data":{ "Nick" : "Mario", "body" : "great match!", "Room" : "PortugalVSDenmark" } } }
ตัวอย่างข้างต้นแสดงการใช้งานฟิลด์ data
ระดับบนสุดหรือทั่วไปซึ่งตีความโดยไคลเอ็นต์ในทุกแพลตฟอร์มที่ได้รับข้อความ ในแต่ละแพลตฟอร์มแอปไคลเอ็นต์จะได้รับส่วนข้อมูลในฟังก์ชันเรียกกลับ :
ข้อความแจ้งเตือนพร้อมเพย์โหลดข้อมูลเสริม
ทั้งแบบเป็นโปรแกรมหรือผ่านคอนโซล 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 และโปรโตคอล HTTP FCM v1 อนุญาตให้คำขอข้อความของคุณตั้งค่าช่องทั้งหมดที่มีอยู่ในวัตถุ message
ซึ่งรวมถึง:
- ชุดฟิลด์ทั่วไปที่จะตีความโดยอินสแตนซ์ของแอป ทั้งหมด ที่ได้รับข้อความ
- ชุดฟิลด์เฉพาะแพลตฟอร์มเช่น
AndroidConfig
และWebpushConfig
ตีความโดยอินสแตนซ์ของแอปที่ทำงานบนแพลตฟอร์มที่ระบุเท่านั้น
บล็อกเฉพาะแพลตฟอร์มให้ความยืดหยุ่นในการปรับแต่งข้อความสำหรับแพลตฟอร์มต่างๆเพื่อให้แน่ใจว่าได้รับการจัดการอย่างถูกต้องเมื่อได้รับ แบ็กเอนด์ FCM จะนำพารามิเตอร์ที่ระบุทั้งหมดมาพิจารณาและปรับแต่งข้อความสำหรับแต่ละแพลตฟอร์ม
เมื่อใดควรใช้ฟิลด์ทั่วไป
ใช้ฟิลด์ทั่วไปเมื่อคุณ:
- กำหนดเป้าหมายอินสแตนซ์ของแอพใน ทุก แพลตฟอร์ม - iOS, Android และเว็บ
- การส่งข้อความไปยังหัวข้อ
อินสแตนซ์ของแอปทั้งหมดโดยไม่คำนึงถึงแพลตฟอร์มสามารถตีความฟิลด์ทั่วไปต่อไปนี้:
เมื่อใดควรใช้ฟิลด์เฉพาะแพลตฟอร์ม
ใช้ฟิลด์เฉพาะแพลตฟอร์มเมื่อคุณต้องการ:
- ส่งฟิลด์ไปยังแพลตฟอร์มใดแพลตฟอร์มหนึ่งเท่านั้น
- ส่งฟิลด์เฉพาะแพลตฟอร์ม เพิ่มเติม จากฟิลด์ทั่วไป
เมื่อใดก็ตามที่คุณต้องการส่งค่าไปยังแพลตฟอร์มใดแพลตฟอร์มหนึ่งเท่านั้น อย่า ใช้ฟิลด์ทั่วไป ใช้ฟิลด์เฉพาะแพลตฟอร์ม ตัวอย่างเช่นหากต้องการส่งการแจ้งเตือนไปยัง iOS และเว็บเท่านั้น แต่ไม่ส่งไปยัง Android คุณต้องใช้ฟิลด์สองชุดแยกกันชุดหนึ่งสำหรับ iOS และอีกชุดสำหรับเว็บ
เมื่อคุณส่งข้อความพร้อม ตัวเลือกการส่ง เฉพาะให้ใช้ฟิลด์เฉพาะแพลตฟอร์มเพื่อตั้งค่า คุณสามารถระบุค่าที่แตกต่างกันต่อแพลตฟอร์มได้หากต้องการ อย่างไรก็ตามแม้ว่าคุณต้องการกำหนดค่าที่เหมือนกันในทุกแพลตฟอร์ม แต่คุณต้องใช้ฟิลด์เฉพาะแพลตฟอร์ม เนื่องจากแต่ละแพลตฟอร์มอาจตีความค่าแตกต่างกันเล็กน้อยตัวอย่างเช่นกำหนดเวลาถ่ายทอดสดบน Android เป็นเวลาหมดอายุเป็นวินาทีในขณะที่บน iOS จะกำหนดเป็น วัน หมดอายุ
ตัวอย่าง: ข้อความแจ้งเตือนพร้อมตัวเลือกการจัดส่งเฉพาะแพลตฟอร์ม
คำขอส่ง v1 ต่อไปนี้จะส่งชื่อและเนื้อหาการแจ้งเตือนทั่วไปไปยังทุกแพลตฟอร์ม แต่ยังส่งการลบล้างเฉพาะบางแพลตฟอร์มด้วย โดยเฉพาะคำขอ:
- กำหนดระยะเวลาการใช้งานที่ยาวนานสำหรับแพลตฟอร์ม Android และเว็บในขณะที่ตั้งค่าลำดับความสำคัญของข้อความ APN (iOS) เป็นการตั้งค่าต่ำ
- ตั้งค่าคีย์ที่เหมาะสมเพื่อกำหนดผลลัพธ์ของผู้ใช้แตะที่การแจ้งเตือนบน Android และ iOS -
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 และอนุญาตให้ใช้ตัวเลือกที่คล้ายกันบน iOS และเว็บ ตัวอย่างเช่นการทำงานของข้อความ "พับได้" ได้รับการสนับสนุนบน Android ผ่านทาง apns-collapse-id
collapse_key
ของ FCM บน iOS ผ่าน apns-collapse-id
และบน JavaScript / เว็บผ่าน Topic
สำหรับรายละเอียดโปรดดูคำอธิบายในส่วนนี้และเอกสารอ้างอิงที่เกี่ยวข้อง
ข้อความที่ไม่ยุบและพับได้
ข้อความที่ ไม่สามารถยุบได้ แสดงว่าข้อความแต่ละข้อความถูกส่งไปยังอุปกรณ์ ข้อความที่ไม่สามารถพับเก็บได้จะให้เนื้อหาที่เป็นประโยชน์ซึ่งตรงข้ามกับข้อความที่ยุบได้เช่น "ping" ที่ไม่มีเนื้อหาไปยังแอปบนอุปกรณ์เคลื่อนที่เพื่อติดต่อเซิร์ฟเวอร์เพื่อดึงข้อมูล
กรณีการใช้งานโดยทั่วไปของข้อความที่ไม่สามารถพับเก็บได้คือข้อความแชทหรือข้อความสำคัญ ตัวอย่างเช่นในแอป IM คุณต้องการส่งทุกข้อความเนื่องจากทุกข้อความมีเนื้อหาที่แตกต่างกัน
สำหรับ Android มีขีด จำกัด 100 ข้อความที่สามารถจัดเก็บได้โดยไม่ยุบ หากถึงขีด จำกัด ข้อความที่จัดเก็บไว้ทั้งหมดจะถูกทิ้ง เมื่ออุปกรณ์กลับมาออนไลน์อีกครั้งอุปกรณ์จะได้รับข้อความพิเศษที่ระบุว่าถึงขีด จำกัด แล้ว จากนั้นแอปจะสามารถจัดการกับสถานการณ์ได้อย่างเหมาะสมโดยปกติแล้วโดยการร้องขอการซิงค์ทั้งหมดจากเซิร์ฟเวอร์ของแอป
ข้อความที่ ยุบได้ คือข้อความที่อาจถูกแทนที่ด้วยข้อความใหม่หากยังไม่ได้ส่งไปยังอุปกรณ์
กรณีการใช้งานทั่วไปของข้อความที่ยุบได้คือข้อความที่ใช้เพื่อบอกให้แอปบนอุปกรณ์เคลื่อนที่ซิงค์ข้อมูลจากเซิร์ฟเวอร์ ตัวอย่างเช่นแอปกีฬาที่อัปเดตผู้ใช้ด้วยคะแนนล่าสุด เฉพาะข้อความล่าสุดเท่านั้นที่เกี่ยวข้อง
ในการทำเครื่องหมายข้อความว่าพับได้บน Android ให้ใส่พารามิเตอร์ collapse_key
_ คีย์ในเพย์โหลดข้อความ FCM อนุญาตให้ใช้ปุ่มยุบที่แตกต่างกันได้สูงสุดสี่คีย์ต่ออุปกรณ์ Android ที่เซิร์ฟเวอร์แอปจะใช้ในเวลาใดก็ได้ กล่าวอีกนัยหนึ่งเซิร์ฟเวอร์ FCM สามารถจัดเก็บข้อความที่ยุบได้สี่ข้อความต่ออุปกรณ์แต่ละเครื่องมีคีย์ยุบที่แตกต่างกัน หากคุณใช้เกินจำนวนนี้ FCM จะเก็บคีย์ยุบไว้เพียงสี่ปุ่มโดยไม่มีการรับประกันว่าจะเก็บคีย์ใดไว้
ข้อความหัวข้อที่ไม่มีเพย์โหลดจะยุบได้ตามค่าเริ่มต้น
ควรใช้ตัวไหนดี?
ข้อความที่พับได้เป็นตัวเลือกที่ดีกว่าจากมุมมองด้านประสิทธิภาพหากแอปของคุณไม่จำเป็นต้องใช้ข้อความที่พับไม่ได้ อย่างไรก็ตามหากคุณใช้ข้อความที่ยุบได้โปรดจำไว้ว่า FCM อนุญาตให้เซิร์ฟเวอร์การเชื่อมต่อ FCM ใช้คีย์ยุบได้สูงสุดสี่คีย์ต่อโทเค็นการลงทะเบียนในช่วงเวลาใดเวลาหนึ่ง คุณต้องไม่เกินจำนวนนี้มิฉะนั้นอาจทำให้เกิดผลที่คาดเดาไม่ได้
ใช้สถานการณ์ | วิธีการส่ง | |
---|---|---|
ไม่ยุบ | ทุกข้อความมีความสำคัญต่อแอปไคลเอ็นต์และจำเป็นต้องส่ง | ยกเว้นข้อความแจ้งเตือนข้อความทั้งหมดจะไม่สามารถยุบได้ตามค่าเริ่มต้น |
พับได้ | เมื่อมีข้อความที่ใหม่กว่าซึ่งแสดงข้อความที่เก่ากว่าซึ่งเกี่ยวข้องกับแอปไคลเอ็นต์ FCM จะแทนที่ข้อความเก่า ตัวอย่างเช่นข้อความที่ใช้เพื่อเริ่มต้นการซิงค์ข้อมูลจากเซิร์ฟเวอร์หรือข้อความแจ้งเตือนที่ล้าสมัย | ตั้งค่าพารามิเตอร์ที่เหมาะสมในคำขอข้อความของคุณ:
|
การตั้งค่าลำดับความสำคัญของข้อความ
คุณมีสองตัวเลือกในการกำหนดลำดับความสำคัญในการส่งให้กับข้อความดาวน์สตรีมบน Android: ปกติและลำดับความสำคัญสูง การส่งข้อความปกติและข้อความที่มีลำดับความสำคัญสูงจะมีลักษณะดังนี้:
ลำดับความสำคัญปกติ นี่คือลำดับความสำคัญเริ่มต้นสำหรับ ข้อความข้อมูล ข้อความที่มีลำดับความสำคัญปกติจะถูกส่งทันทีเมื่อแอปอยู่เบื้องหน้า เมื่ออุปกรณ์อยู่ใน Doze การจัดส่งอาจล่าช้าเพื่อประหยัดแบตเตอรี่ สำหรับข้อความที่ไวต่อเวลาน้อยลงเช่นการแจ้งเตือนอีเมลใหม่การซิงค์ UI ของคุณหรือการซิงค์ข้อมูลแอปในพื้นหลังให้เลือกลำดับความสำคัญในการส่งปกติ
เมื่อได้รับข้อความลำดับความสำคัญตามปกติบน Android ที่ร้องขอให้ซิงค์ข้อมูลพื้นหลังสำหรับแอปของคุณคุณสามารถกำหนดเวลางานโดยให้ WorkManager จัดการเมื่อเครือข่ายพร้อมใช้งาน
ลำดับความสำคัญสูง FCM พยายามส่งข้อความที่มีลำดับความสำคัญสูงทันทีโดยอนุญาตให้บริการ FCM ปลุกอุปกรณ์สลีปเมื่อจำเป็นและเพื่อเรียกใช้การประมวลผลที่ จำกัด บางอย่าง (รวมถึงการเข้าถึงเครือข่ายที่ จำกัด มาก) โดยทั่วไปข้อความที่มีลำดับความสำคัญสูงควรส่งผลให้ผู้ใช้โต้ตอบกับแอปของคุณหรือการแจ้งเตือน หาก FCM ตรวจพบรูปแบบที่ไม่เป็นเช่นนั้นข้อความของคุณอาจไม่ได้รับการจัดลำดับความสำคัญ Android P เปิดตัวที่ เก็บข้อมูลสแตนด์บายของแอป ซึ่ง จำกัด จำนวนข้อความที่มีลำดับความสำคัญสูง FCM ที่คุณสามารถส่งไปยังแอปของคุณซึ่งไม่ส่งผลให้ผู้ใช้ใช้แอปของคุณหรือดูการแจ้งเตือน หากในการตอบกลับข้อความที่มีลำดับความสำคัญสูงการแจ้งเตือนจะแสดงในลักษณะที่ผู้ใช้มองเห็นได้โควต้าที่เก็บข้อมูลสแตนด์บายของแอปของคุณจะไม่ถูกใช้โดยข้อความนั้น
เนื่องจากประชากรมือถือ Android ส่วนน้อยอยู่ในเครือข่ายที่มีเวลาแฝงสูงหลีกเลี่ยงการเปิดการเชื่อมต่อกับเซิร์ฟเวอร์ของคุณก่อนที่จะแสดงการแจ้งเตือน การโทรกลับไปที่เซิร์ฟเวอร์ก่อนสิ้นสุดเวลาการประมวลผลที่อนุญาตอาจมีความเสี่ยงสำหรับผู้ใช้บนเครือข่ายที่มีเวลาแฝงสูง ให้รวมเนื้อหาการแจ้งเตือนในข้อความ FCM แทนและแสดงทันที หากคุณต้องการซิงค์เนื้อหาในแอปเพิ่มเติมบน Android คุณสามารถกำหนดเวลางานโดยให้ WorkManager จัดการสิ่งนั้นในพื้นหลังได้
นี่คือตัวอย่างของข้อความลำดับความสำคัญปกติที่ส่งผ่านโปรโตคอล 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 และเว็บ / 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 ผู้ส่งที่แตกต่างกันในฟิลด์ผู้ชมโดยใช้วิธีการดึงโทเค็นสำหรับแพลตฟอร์มที่กำหนด:
- iOS (Swift) -
token(completion:)
- Android -
FirebaseMessaging.getInstance().getToken()
ตรวจสอบให้แน่ใจว่าคุณ ไม่ได้ เพิ่ม ID ผู้ส่งหลายรายการในคำขอโทเค็นเดียวเนื่องจากอาจให้ผลลัพธ์ที่คาดเดาไม่ได้ โทรแต่ละครั้งแยกกันหนึ่งครั้งต่อ ID ผู้ส่ง
สุดท้ายแชร์โทเค็นการลงทะเบียนกับผู้ส่งที่เกี่ยวข้องและพวกเขาจะสามารถส่งข้อความไปยังแอปไคลเอนต์โดยใช้คีย์การตรวจสอบสิทธิ์ของตนเอง
โปรดทราบว่ามีผู้ส่งหลายรายได้ไม่เกิน 100 ราย
อายุการใช้งานของข้อความ
เมื่อเซิร์ฟเวอร์แอปโพสต์ข้อความไปยัง FCM และได้รับ ID ข้อความกลับไม่ได้หมายความว่าข้อความนั้นถูกส่งไปยังอุปกรณ์แล้ว แต่หมายความว่าได้รับการยอมรับสำหรับการจัดส่ง สิ่งที่เกิดขึ้นกับข้อความหลังจากได้รับการยอมรับนั้นขึ้นอยู่กับหลายปัจจัย
ในกรณีที่ดีที่สุดหากอุปกรณ์เชื่อมต่อกับ FCM หน้าจอจะเปิดอยู่และไม่มีข้อ จำกัด ในการควบคุมปริมาณข้อความจะถูกส่งทันที
หากเชื่อมต่ออุปกรณ์ แต่อยู่ใน Doze ข้อความที่มีลำดับความสำคัญต่ำจะถูกจัดเก็บโดย FCM จนกว่าอุปกรณ์จะหลุดจาก Doze และนั่นคือสิ่งที่ collapse_key
ธงบทบาท: ถ้ามีอยู่แล้วข้อความที่มีคีย์เดียวกันการล่มสลาย (และโทเค็นการลงทะเบียน) การจัดเก็บและการรอคอยสำหรับการจัดส่งข้อความเก่าจะถูกยกเลิกและข้อความใหม่ที่จะเกิดขึ้นของมัน (นั่นคือเก่า ข้อความถูกยุบโดยข้อความใหม่) อย่างไรก็ตามหากไม่ได้ตั้งค่าคีย์ยุบทั้งข้อความใหม่และข้อความเก่าจะถูกจัดเก็บไว้สำหรับการจัดส่งในอนาคต
หากอุปกรณ์ไม่ได้เชื่อมต่อกับ FCM ข้อความจะถูกเก็บไว้จนกว่าจะสร้างการเชื่อมต่อได้ (ตามกฎคีย์การยุบอีกครั้ง) เมื่อสร้างการเชื่อมต่อ FCM จะส่งข้อความที่รอดำเนินการทั้งหมดไปยังอุปกรณ์ หากไม่เคยเชื่อมต่ออุปกรณ์อีกเลย (เช่นหากรีเซ็ตเป็นค่าเริ่มต้นจากโรงงาน) ข้อความจะหมดเวลาและถูกยกเลิกจากที่จัดเก็บ FCM ในที่สุด ระยะหมดเวลาเริ่มต้นคือสี่สัปดาห์เว้นแต่จะตั้งค่าสถานะ time_to_live
หากต้องการรับข้อมูลเชิงลึกเพิ่มเติมเกี่ยวกับการส่งข้อความ:
หากต้องการรับข้อมูลเชิงลึกเพิ่มเติมเกี่ยวกับการส่งข้อความบน Android หรือ iOS โปรดดู แดชบอร์ดการรายงาน FCM ซึ่งบันทึกจำนวนข้อความที่ส่งและเปิดบนอุปกรณ์ iOS และ Android พร้อมกับข้อมูลสำหรับ "การแสดงผล" (การแจ้งเตือนที่ผู้ใช้เห็น) สำหรับ Android แอพ
สำหรับอุปกรณ์ Android ที่เปิดใช้งานการส่งข้อความแชนเนลโดยตรงหากอุปกรณ์ไม่ได้เชื่อมต่อกับ FCM เป็นเวลานานกว่าหนึ่งเดือน FCM จะยังคงยอมรับข้อความ แต่จะยกเลิกทันที หากอุปกรณ์เชื่อมต่อภายในสี่สัปดาห์ของข้อความข้อมูลล่าสุดที่คุณส่งไปไคลเอนต์ของคุณจะได้รับการติดต่อกลับ onDeletedMessages () จากนั้นแอปสามารถจัดการกับสถานการณ์ได้อย่างเหมาะสมโดยทั่วไปแล้วโดยการร้องขอการซิงค์ทั้งหมดจากเซิร์ฟเวอร์ของแอป
สุดท้ายเมื่อ FCM พยายามส่งข้อความไปยังอุปกรณ์และแอปถูกถอนการติดตั้ง FCM จะทิ้งข้อความนั้นทันทีและทำให้โทเค็นการลงทะเบียนเป็นโมฆะ ความพยายามในการส่งข้อความไปยังอุปกรณ์นั้นในอนาคตส่งผลให้ NotRegistered
ข้อผิดพลาด NotRegistered
การควบคุมปริมาณและการปรับขนาด
เป้าหมายของเราคือส่งทุกข้อความที่ส่งผ่าน FCM เสมอ อย่างไรก็ตามการส่งข้อความทุกครั้งบางครั้งอาจทำให้ผู้ใช้ได้รับประสบการณ์โดยรวมที่ไม่ดี ในกรณีอื่น ๆ เราจำเป็นต้องจัดเตรียมขอบเขตเพื่อให้แน่ใจว่า FCM ให้บริการที่ปรับขนาดได้สำหรับผู้ส่งทั้งหมด
การควบคุมปริมาณข้อความที่พับได้
ดังที่อธิบายไว้ข้างต้นข้อความที่ยุบได้คือการแจ้งเตือนที่ไม่มีเนื้อหาซึ่งออกแบบมาให้ยุบทับกัน ในกรณีที่นักพัฒนาซอฟต์แวร์ส่งข้อความเดียวกันนี้ไปยังแอปบ่อยเกินไปเราจะเลื่อนข้อความ (เร่งความเร็ว) เพื่อลดผลกระทบต่อแบตเตอรี่ของผู้ใช้
ตัวอย่างเช่นหากคุณส่งคำขอซิงค์อีเมลใหม่จำนวนมากไปยังอุปกรณ์เครื่องเดียวเราอาจชะลอคำขอการซิงค์อีเมลครั้งถัดไปสองสามนาทีเพื่อให้อุปกรณ์สามารถซิงค์ได้ในอัตราเฉลี่ยที่ต่ำลง การควบคุมปริมาณนี้กระทำอย่างเคร่งครัดเพื่อ จำกัด ผลกระทบของแบตเตอรี่ที่ผู้ใช้ประสบ
หากกรณีการใช้งานของคุณต้องการรูปแบบการส่งต่อเนื่องที่สูงข้อความที่ไม่ยุบอาจเป็นทางเลือกที่เหมาะสม สำหรับข้อความดังกล่าวตรวจสอบให้แน่ใจว่าได้รวมเนื้อหาไว้ในข้อความดังกล่าวเพื่อลดต้นทุนแบตเตอรี่
เรา จำกัด ข้อความที่ยุบได้ไม่เกิน 20 ข้อความต่อแอพต่ออุปกรณ์โดยจะเติม 1 ข้อความทุกๆ 3 นาที
การควบคุมเซิร์ฟเวอร์ XMPP
เรา จำกัด อัตราที่คุณสามารถเชื่อมต่อกับเซิร์ฟเวอร์ FCM XMPP ไว้ที่ 400 การเชื่อมต่อต่อนาทีต่อโปรเจ็กต์ สิ่งนี้ไม่ควรเป็นปัญหาสำหรับการส่งข้อความ แต่เป็นสิ่งสำคัญในการรับรองความเสถียรของระบบของเรา
สำหรับแต่ละโปรเจ็กต์ FCM อนุญาตให้มีการเชื่อมต่อแบบขนาน 2,500 รายการ
อัตราข้อความสูงสุดสำหรับอุปกรณ์เดียว
คุณสามารถส่งข้อความได้ถึง 240 ข้อความ / นาทีและ 5,000 ข้อความ / ชั่วโมงไปยังอุปกรณ์เครื่องเดียว เกณฑ์ที่สูงนี้มีขึ้นเพื่อให้มีปริมาณการใช้งานมากในระยะสั้นเช่นเมื่อผู้ใช้โต้ตอบอย่างรวดเร็วผ่านการแชท ขีด จำกัด นี้จะป้องกันข้อผิดพลาดในการส่งตรรกะจากการใช้พลังงานแบตเตอรี่บนอุปกรณ์โดยไม่ได้ตั้งใจ
ขีด จำกัด ข้อความต้นน้ำ
เรา จำกัด ข้อความต้นน้ำไว้ ที่ 1,500,000 / นาทีต่อโปรเจ็กต์เพื่อหลีกเลี่ยงไม่ให้เซิร์ฟเวอร์ปลายทางอัปสตรีมโหลดมากเกินไป
เรา จำกัด ข้อความต้นน้ำต่ออุปกรณ์ไว้ที่ 1,000 / นาทีเพื่อป้องกันแบตเตอรี่หมดจากพฤติกรรมของแอปที่ไม่ดี
ขีด จำกัด ข้อความหัวข้อ
อัตราการเพิ่ม / ลบการสมัครสมาชิกหัวข้อ จำกัด ไว้ที่ 3,000 QPS ต่อโปรเจ็กต์
สำหรับอัตราการส่งข้อความโปรดดูที่ Fanout Throttling
การควบคุมปริมาณ Fanout
Message fanout เป็นกระบวนการส่งข้อความไปยังอุปกรณ์หลายเครื่องเช่นเมื่อคุณกำหนดเป้าหมายหัวข้อและกลุ่มหรือเมื่อคุณใช้ตัว เรียบเรียงการแจ้งเตือน เพื่อกำหนดเป้าหมายผู้ชมหรือกลุ่มผู้ใช้
การ Fanout ข้อความไม่ได้เกิดขึ้นในทันทีและในบางครั้งคุณก็มี Fanouts หลายรายการพร้อมกัน เรา จำกัด จำนวน Fanouts ข้อความพร้อมกันต่อโปรเจ็กต์ไว้ที่ 1,000 หลังจากนั้นเราอาจปฏิเสธคำขอ fanout เพิ่มเติมหรือเลื่อนการแสดงของคำขอออกไปจนกว่า fanouts ที่กำลังดำเนินอยู่บางส่วนจะเสร็จสมบูรณ์
อัตราแฟนเอาต์ที่ทำได้จริงนั้นขึ้นอยู่กับจำนวนโครงการที่ขอแฟนเอาท์ในเวลาเดียวกัน อัตรา fanout 10,000 QPS สำหรับแต่ละโปรเจ็กต์ไม่ใช่เรื่องแปลก แต่ตัวเลขนั้นไม่ได้เป็นการรับประกันและเป็นผลมาจากการโหลดทั้งหมดในระบบ สิ่งสำคัญคือต้องทราบว่าความสามารถในการจัดแฟนเอาต์ที่มีอยู่จะถูกแบ่งออกเป็นโครงการต่างๆ ดังนั้นหากโปรเจ็กต์ของคุณมีแฟนเอาท์สองรายการที่กำลังดำเนินอยู่การจัดแฟนเอาท์แต่ละครั้งจะเห็นเพียงครึ่งหนึ่งของอัตราแฟนเอาต์ที่มีอยู่ วิธีที่แนะนำในการเพิ่มความเร็ว Fanout ของคุณคือการมี Fanout ที่กำลังดำเนินการอยู่ครั้งละหนึ่งรายการเท่านั้น
พอร์ต FCM และไฟร์วอลล์ของคุณ
หากองค์กรของคุณมีไฟร์วอลล์เพื่อ จำกัด การรับส่งข้อมูลไปยังหรือจากอินเทอร์เน็ตคุณต้องกำหนดค่าให้อุปกรณ์เคลื่อนที่เชื่อมต่อกับ FCM เพื่อให้อุปกรณ์ในเครือข่ายของคุณสามารถรับข้อความได้ โดยทั่วไป FCM ใช้พอร์ต 5228 แต่บางครั้งก็ใช้ 5229 และ 5230
สำหรับการเชื่อมต่อขาออก FCM ไม่ได้ให้ IP ที่เฉพาะเจาะจงเนื่องจากช่วง IP ของเรามีการเปลี่ยนแปลงบ่อยเกินไปและกฎไฟร์วอลล์ของคุณอาจล้าสมัยส่งผลกระทบต่อประสบการณ์ของผู้ใช้ของคุณ ตามหลักการแล้วรายการที่อนุญาตพิเศษพอร์ต 5228-5230 โดยไม่มีข้อ จำกัด IP อย่างไรก็ตามหากคุณต้องมีข้อ จำกัด IP คุณควรอนุญาตที่อยู่ IP ทั้งหมดที่ระบุไว้ใน goog.json รายการขนาดใหญ่นี้ได้รับการอัปเดตเป็นประจำและขอแนะนำให้คุณอัปเดตกฎของคุณเป็นประจำทุกเดือน ปัญหาที่เกิดจากการ จำกัด IP ของไฟร์วอลล์มักเกิดขึ้นไม่ต่อเนื่องและยากต่อการวินิจฉัย
พอร์ตที่จะเปิดสำหรับข้อความขาเข้า:
- 5228
- 5229
- 5230
- 443
พอร์ตสำหรับการเชื่อมต่อขาออก:
หนึ่งในนั้น (ตัวเลือก # 1 เป็นที่ต้องการ):
- ไม่มีข้อ จำกัด IP
ที่อยู่ IP ทั้งหมดสำหรับโดเมนเริ่มต้น
ในการดึงรายการที่อยู่เหล่านี้ล่าสุดให้ทำตามคำแนะนำที่อธิบายไว้ใน ที่อยู่ IP สำหรับโดเมนเริ่มต้น
การแปลที่อยู่เครือข่ายและ / หรือไฟร์วอลล์การตรวจสอบแพ็กเก็ตสถานะ:
หากเครือข่ายของคุณใช้ Network Address Translation (NAT) หรือ Stateful Packet Inspection (SPI) ให้ใช้การหมดเวลา 30 นาทีขึ้นไปสำหรับการเชื่อมต่อของเราผ่านพอร์ต 5228-5230 สิ่งนี้ช่วยให้เราสามารถให้การเชื่อมต่อที่เชื่อถือได้ในขณะที่ลดการใช้แบตเตอรี่ของอุปกรณ์เคลื่อนที่ของผู้ใช้ของคุณ
ข้อมูลรับรอง
ขึ้นอยู่กับคุณลักษณะ FCM ที่คุณใช้คุณอาจต้องมีข้อมูลรับรองต่อไปนี้จากโครงการ Firebase ของคุณ:
รหัสโครงการ | ตัวระบุเฉพาะสำหรับโปรเจ็กต์ Firebase ของคุณซึ่งใช้ในคำขอไปยังปลายทาง HTTP FCM v1 ค่านี้มีอยู่ในบานหน้าต่าง การตั้งค่า คอนโซล Firebase |
โทเค็นการลงทะเบียน | สตริงโทเค็นเฉพาะที่ระบุอินสแตนซ์แอปไคลเอ็นต์แต่ละรายการ โทเค็นการลงทะเบียนจำเป็นสำหรับอุปกรณ์เดียวและการส่งข้อความกลุ่มอุปกรณ์ โปรดทราบว่าโทเค็นการลงทะเบียนจะต้องเก็บเป็นความลับ |
รหัสผู้ส่ง | ค่าตัวเลขเฉพาะที่สร้างขึ้นเมื่อคุณสร้างโครงการ Firebase ซึ่งมีอยู่ในแท็บ Cloud Messaging ของบานหน้าต่าง การตั้งค่า คอนโซล Firebase ID ผู้ส่งใช้เพื่อระบุผู้ส่งแต่ละรายที่สามารถส่งข้อความไปยังแอปไคลเอ็นต์ |
โทเค็นการเข้าถึง | โทเค็น OAuth 2.0 อายุสั้นที่อนุญาตคำขอไปยัง HTTP v1 API โทเค็นนี้เชื่อมโยงกับบัญชีบริการที่เป็นของโครงการ Firebase ของคุณ ในการสร้างและหมุนเวียนโทเค็นการเข้าถึงให้ทำตามขั้นตอนที่อธิบายไว้ใน อนุญาตส่งคำขอ |
รหัสเซิร์ฟเวอร์ (สำหรับโปรโตคอลเดิม) | คีย์เซิร์ฟเวอร์ที่อนุญาตให้เซิร์ฟเวอร์แอปของคุณเข้าถึงบริการของ Google รวมถึงการส่งข้อความผ่านโปรโตคอลระบบเดิมของ Firebase Cloud Messaging คุณได้รับคีย์เซิร์ฟเวอร์เมื่อสร้างโครงการ Firebase คุณสามารถดูได้ในแท็บ Cloud Messaging ของบานหน้าต่าง การตั้งค่า คอนโซล Firebase สำคัญ: อย่าใส่คีย์เซิร์ฟเวอร์ไว้ที่ใดก็ได้ในรหัสไคลเอ็นต์ของคุณ นอกจากนี้อย่าลืมใช้เฉพาะคีย์เซิร์ฟเวอร์เพื่ออนุญาตเซิร์ฟเวอร์แอปของคุณ คีย์ของ Android, iOS และเบราว์เซอร์ถูกปฏิเสธโดย FCM |