Firebase Cloud Messaging (FCM) มีตัวเลือกการรับส่งข้อความที่หลากหลาย และความสามารถต่างๆ ข้อมูลในหน้านี้มีไว้เพื่อช่วยให้คุณเข้าใจFCMข้อความประเภทต่างๆ และสิ่งที่คุณทำได้กับข้อความเหล่านั้น
ข้อความแจ้งเตือนที่มีเพย์โหลดข้อมูลที่ไม่บังคับ
คุณสามารถส่งข้อความแจ้งที่มีเพย์โหลดคู่คีย์-ค่าที่กำหนดเอง (ไม่บังคับ) ได้ทั้งแบบเป็นโปรแกรมหรือผ่านFirebaseคอนโซล ใน เครื่องมือสร้างการแจ้งเตือน ให้ใช้ช่องข้อมูลที่กำหนดเองในตัวเลือกขั้นสูง
ลักษณะการทำงานของแอปเมื่อได้รับข้อความที่มีทั้งการแจ้งเตือนและเพย์โหลดข้อมูล จะขึ้นอยู่กับว่าแอปอยู่ในเบื้องหลังหรือเบื้องหน้า กล่าวคือ ขึ้นอยู่กับว่าแอปทำงานอยู่หรือไม่ในขณะที่ได้รับข้อความ
- เมื่ออยู่ใน เบื้องหลัง แอปจะได้รับเพย์โหลดการแจ้งเตือนใน ถาดการแจ้งเตือน และจะจัดการเพย์โหลดข้อมูลเฉพาะเมื่อผู้ใช้ แตะการแจ้งเตือน
- เมื่ออยู่ในเบื้องหน้า แอปจะได้รับออบเจ็กต์ข้อความ ที่มีทั้งเพย์โหลด
นี่คือข้อความในรูปแบบ JSON ที่มีทั้งคีย์ notification
และคีย์ data
{ "message":{ "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...", "notification":{ "title":"Portugal vs. Denmark", "body":"great match!" }, "data" : { "Nick" : "Mario", "Room" : "PortugalVSDenmark" } } }
ตัวเลือกการจัดส่ง
FCM มีชุดตัวเลือกการนำส่งที่เฉพาะเจาะจงสำหรับข้อความที่ส่งไปยัง
อุปกรณ์ Android และอนุญาตให้ใช้ตัวเลือกที่คล้ายกันใน
แพลตฟอร์ม Apple และเว็บ เช่น ลักษณะการทำงานของข้อความ "ยุบได้" รองรับใน Android ผ่าน FCM ของ collapse_key
, ใน Apple ผ่าน apns-collapse-id
และใน JavaScript/เว็บผ่าน Topic
ดูรายละเอียดได้ที่คำอธิบายในส่วนนี้และเอกสารอ้างอิงที่เกี่ยวข้อง
การตั้งค่าลำดับความสำคัญของข้อความ
คุณมี 2 ตัวเลือกในการกำหนดลำดับความสำคัญในการนำส่งข้อความปลายทาง ได้แก่ ลำดับความสำคัญปกติและสูง แม้ว่าลักษณะการทำงานจะแตกต่างกันเล็กน้อยในแต่ละแพลตฟอร์ม แต่การนำส่งข้อความที่มีลำดับความสำคัญปกติและสูงจะมีลักษณะดังนี้
ความสำคัญปกติ ระบบจะส่งข้อความที่มีลำดับความสำคัญปกติทันทีเมื่อแอปอยู่เบื้องหน้า สำหรับแอปที่ทำงานในเบื้องหลัง การนำส่งอาจล่าช้า สำหรับข้อความที่ไม่ได้เร่งด่วน เช่น การแจ้งเตือนอีเมลใหม่ การซิงค์ UI หรือการซิงค์ข้อมูลแอปใน เบื้องหลัง ให้เลือกความสำคัญในการนำส่งเป็นปกติ
ลำดับความสำคัญสูง FCM พยายามส่งข้อความที่มีลำดับความสำคัญสูงทันทีแม้ว่าอุปกรณ์จะอยู่ในโหมดพักเครื่องก็ตาม ข้อความที่มีลำดับความสำคัญสูงใช้สำหรับเนื้อหาที่ผู้ใช้มองเห็นได้และต้องดำเนินการอย่างรวดเร็ว
ตัวอย่างข้อความที่มีลำดับความสำคัญปกติซึ่งส่งผ่านโปรโตคอล 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" } } } }
ดูรายละเอียดเพิ่มเติมเกี่ยวกับการตั้งค่าลำดับความสำคัญของข้อความสำหรับแพลตฟอร์มที่เฉพาะเจาะจงได้ที่
- เอกสารประกอบของ APNs
- ตั้งค่าและจัดการลำดับความสำคัญของข้อความ (Android)
- ความเร่งด่วนของข้อความ Push บนเว็บ
กรณีการใช้งานที่สำคัญต่อชีวิต
FCM API ไม่ได้ ออกแบบมาสำหรับการแจ้งเตือนฉุกเฉินหรือกิจกรรมที่มีความเสี่ยงสูงอื่นๆ ซึ่งการใช้หรือ ความล้มเหลวของ API อาจส่งผลให้เกิดการเสียชีวิต การบาดเจ็บส่วนบุคคล หรือความเสียหายต่อสิ่งแวดล้อม (เช่น การปฏิบัติการของหน่วยงานพลังงานนิวเคลียร์ การควบคุมจราจรทางอากาศ หรือ ระบบช่วยชีวิต) การใช้งานดังกล่าวเป็นสิ่งต้องห้ามอย่างชัดแจ้งภายใต้ส่วนที่ 4 ก. 7 ของข้อกำหนดในการให้บริการ คุณมีหน้าที่รับผิดชอบแต่เพียงผู้เดียวในการจัดการการปฏิบัติตามข้อกำหนดของแอป และความเสียหายใดๆ ที่เกิดจากการไม่ปฏิบัติตามข้อกำหนด Google ให้บริการ API "ตามที่เป็น" และขอสงวนสิทธิ์ในการปิดให้บริการ API หรือบางส่วน รวมถึงฟีเจอร์ต่างๆ หรือการเข้าถึงของคุณได้ทุกเมื่อไม่ว่าด้วยเหตุผลใดๆ โดยไม่มีความรับผิดหรือภาระหน้าที่อื่นๆ ต่อคุณหรือผู้ใช้ของคุณ
การกำหนดอายุการใช้งานของข้อความ
FCM มักจะส่งข้อความทันทีหลังจากที่ส่ง อย่างไรก็ตาม การดำเนินการนี้อาจทำไม่ได้เสมอไป เช่น หากแพลตฟอร์มเป็น Android อุปกรณ์อาจปิด ออฟไลน์ หรือไม่พร้อมใช้งาน หรือ FCM อาจตั้งใจหน่วงเวลาข้อความ เพื่อป้องกันไม่ให้แอปใช้ทรัพยากรมากเกินไปและส่งผลเสีย ต่ออายุการใช้งานแบตเตอรี่
ในกรณีนี้ FCM จะจัดเก็บข้อความและส่งข้อความทันทีที่ทำได้ แม้ว่าในกรณีส่วนใหญ่จะไม่มีปัญหา แต่ก็มีบางแอปที่ข้อความที่ส่งล่าช้าอาจไม่ได้รับการนำส่งเลย ตัวอย่างเช่น หากข้อความ เป็นการแจ้งเตือนสายเรียกเข้าหรือวิดีโอแชท ข้อความนี้จะมีประโยชน์เพียง ในช่วงเวลาสั้นๆ ก่อนที่การโทรจะสิ้นสุดลง หรือหากข้อความเป็นคำเชิญให้เข้าร่วมกิจกรรม ก็จะไม่มีประโยชน์หากได้รับหลังจากกิจกรรมสิ้นสุดลง
ใน Android และเว็บ/JavaScript คุณสามารถระบุอายุสูงสุดของข้อความได้ ค่าต้องเป็นระยะเวลาตั้งแต่ 0 ถึง 2,419,200 วินาที (28 วัน) และสอดคล้องกับระยะเวลาสูงสุดที่ FCM จัดเก็บและพยายามนำส่งข้อความ คำขอที่ไม่มีฟิลด์นี้จะใช้ระยะเวลาเริ่มต้นเป็น 4 สัปดาห์
ตัวอย่างการใช้งานฟีเจอร์นี้มีดังนี้
- สายเรียกเข้าวิดีโอแชท
- กิจกรรมคำเชิญที่กำลังจะหมดอายุ
- กิจกรรมในปฏิทิน
ข้อดีอีกอย่างของการระบุอายุของข้อความคือ 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 และได้รับรหัสข้อความ กลับมา ไม่ได้หมายความว่าระบบได้นำส่งข้อความไปยังอุปกรณ์ แล้ว แต่หมายความว่าได้รับการยอมรับให้แสดงโฆษณาแล้ว สิ่งที่จะเกิดขึ้นกับข้อความหลังจากได้รับการยอมรับแล้วนั้นขึ้นอยู่กับหลายปัจจัย
ในกรณีที่ดีที่สุด หากอุปกรณ์เชื่อมต่อกับ FCM หน้าจอเปิดอยู่และไม่มีข้อจำกัดในการควบคุมปริมาณ ข้อความจะ ส่งทันที
หากอุปกรณ์เชื่อมต่ออยู่แต่เข้าสู่โหมดพัก ระบบจะจัดเก็บข้อความที่มีลำดับความสำคัญต่ำ
โดย FCM จนกว่าอุปกรณ์จะออกจากโหมดพัก และcollapse_key
แฟล็กจะมีบทบาทในกรณีที่ระบบจัดเก็บข้อความที่มีคีย์การยุบ (และโทเค็นการลงทะเบียน) เดียวกันอยู่แล้วและรอการนำส่ง ระบบจะทิ้งข้อความเก่าและใช้ข้อความใหม่แทน (กล่าวคือ ข้อความใหม่จะยุบข้อความเก่า) อย่างไรก็ตาม หากไม่ได้ตั้งค่าคีย์การยุบ
ระบบจะจัดเก็บทั้งข้อความใหม่และข้อความเก่าเพื่อนำส่งในอนาคต
หากอุปกรณ์ไม่ได้เชื่อมต่อกับ FCM ระบบจะจัดเก็บข้อความไว้จนกว่าจะมีการเชื่อมต่อ (โดยยังคงปฏิบัติตามกฎคีย์การยุบ) เมื่อสร้างการเชื่อมต่อแล้ว FCM จะส่งข้อความที่รอดำเนินการทั้งหมดไปยังอุปกรณ์
หากอุปกรณ์ไม่เชื่อมต่ออีกเลย
(เช่น หากรีเซ็ตเป็นค่าเริ่มต้น) ข้อความจะหมดเวลาและ
ถูกทิ้งจากFCMที่เก็บข้อมูล ระยะหมดเวลาเริ่มต้นคือ 4 สัปดาห์
เว้นแต่จะตั้งค่าtime_to_live
หากต้องการดูข้อมูลเชิงลึกเพิ่มเติมเกี่ยวกับการนำส่งข้อความ ให้ทำดังนี้
หากต้องการข้อมูลเชิงลึกเพิ่มเติมเกี่ยวกับการนำส่งข้อความในแพลตฟอร์ม Android หรือ Apple โปรดดู FCMแดชบอร์ดการรายงาน ซึ่งบันทึก จำนวนข้อความที่ส่งและเปิดในอุปกรณ์ Apple และ Android พร้อมกับ ข้อมูลสำหรับ "การแสดงผล" (การแจ้งเตือนที่ผู้ใช้เห็น) สำหรับแอป Android
สำหรับอุปกรณ์ Android ที่เปิดใช้การรับส่งข้อความในช่องโดยตรง หากอุปกรณ์ไม่ได้เชื่อมต่อกับ FCM นานกว่า 1 เดือน FCM จะยังคงรับข้อความแต่จะทิ้งข้อความทันที หากอุปกรณ์เชื่อมต่อภายใน 4 สัปดาห์นับจากข้อความข้อมูลสุดท้ายที่คุณส่งไปยังอุปกรณ์ ไคลเอ็นต์จะได้รับการเรียกกลับ onDeletedMessages() จากนั้นแอปจะจัดการสถานการณ์ได้อย่างเหมาะสม โดยปกติแล้วจะขอซิงค์แบบเต็มจากเซิร์ฟเวอร์แอป
สุดท้ายนี้ เมื่อ FCM พยายามส่งข้อความไปยังอุปกรณ์และ
ถอนการติดตั้งแอป FCM จะทิ้งข้อความนั้นทันทีและ
ทำให้โทเค็นการลงทะเบียนไม่ถูกต้อง การพยายามส่งข้อความไปยังอุปกรณ์ดังกล่าวในอนาคตจะทำให้เกิดข้อผิดพลาด NotRegistered
ข้อมูลเข้าสู่ระบบ
คุณอาจต้องใช้ข้อมูลเข้าสู่ระบบต่อไปนี้จากโปรเจ็กต์ Firebase ทั้งนี้ขึ้นอยู่กับFCMฟีเจอร์ที่คุณใช้งาน
รหัสโปรเจ็กต์ | ตัวระบุที่ไม่ซ้ำกันสำหรับโปรเจ็กต์ Firebase ของคุณ ซึ่งใช้ในคำขอไปยังFCMปลายทาง HTTP v1 ค่านี้จะ อยู่ในแผง Firebase คอนโซลการตั้งค่า |
โทเค็นการลงทะเบียน | สตริงโทเค็นที่ไม่ซ้ำกันซึ่งระบุอินสแตนซ์ของแอปไคลเอ็นต์แต่ละรายการ ต้องใช้โทเค็นการลงทะเบียนสำหรับการรับส่งข้อความในอุปกรณ์เครื่องเดียวและกลุ่มอุปกรณ์ โปรดทราบว่า ต้องเก็บโทเค็นการลงทะเบียนไว้เป็นความลับ |
รหัสผู้ส่ง | ค่าตัวเลขที่ไม่ซ้ำกันซึ่งสร้างขึ้นเมื่อคุณสร้างโปรเจ็กต์ Firebase โดยจะอยู่ในแท็บ Cloud Messaging ของคอนโซล Firebase แผงการตั้งค่า ระบบจะใช้รหัสผู้ส่งเพื่อระบุผู้ส่งแต่ละราย ที่ส่งข้อความไปยังแอปไคลเอ็นต์ได้ |
โทเค็นเพื่อการเข้าถึง | โทเค็น OAuth 2.0 ที่มีอายุสั้นซึ่งให้สิทธิ์คำขอไปยัง HTTP v1 API โทเค็นนี้เชื่อมโยงกับบัญชีบริการที่เป็นของโปรเจ็กต์ Firebase ของคุณ หากต้องการสร้างและหมุนเวียนโทเค็นเพื่อการเข้าถึง ให้ทำตาม ขั้นตอนที่อธิบายไว้ใน ให้สิทธิ์คำขอส่ง |