Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

เกี่ยวกับข้อความ FCM

จัดทุกอย่างให้เป็นระเบียบอยู่เสมอด้วยคอลเล็กชัน บันทึกและจัดหมวดหมู่เนื้อหาตามค่ากำหนดของคุณ

Firebase Cloud Messaging (FCM) มีตัวเลือกและความสามารถในการส่งข้อความที่หลากหลาย ข้อมูลในหน้านี้มีไว้เพื่อช่วยให้คุณเข้าใจประเภทต่างๆ ของข้อความ FCM และสิ่งที่คุณสามารถทำได้กับข้อความเหล่านั้น

ประเภทข้อความ

ด้วย FCM คุณสามารถส่งข้อความสองประเภทไปยังลูกค้า:

  • ข้อความแจ้งเตือน บางครั้งคิดว่าเป็น "ข้อความที่แสดง" FCM SDK จะจัดการสิ่งเหล่านี้โดยอัตโนมัติ
  • ข้อความข้อมูลซึ่งจัดการโดยแอปไคลเอนต์

ข้อความแจ้งเตือนประกอบด้วยชุดคีย์ที่ผู้ใช้มองเห็นได้ที่กำหนดไว้ล่วงหน้า ในทางตรงกันข้าม ข้อความข้อมูลจะมีเฉพาะคู่คีย์-ค่าที่คุณกำหนดเองเท่านั้น ข้อความแจ้งเตือนสามารถบรรจุเพย์โหลดข้อมูลเสริมได้ เพย์โหลดสูงสุดสำหรับข้อความทั้งสองประเภทคือ 4,000 ไบต์ ยกเว้นเมื่อส่งข้อความจากคอนโซล Firebase ซึ่งบังคับใช้ขีดจำกัด 1,024 อักขระ

ใช้สถานการณ์ วิธีส่ง
ข้อความแจ้งเตือน FCM จะแสดงข้อความไปยังอุปกรณ์ของผู้ใช้ปลายทางโดยอัตโนมัติในนามของแอปไคลเอ็นต์ ข้อความแจ้งเตือนมีชุดคีย์ที่ผู้ใช้มองเห็นได้ที่กำหนดไว้ล่วงหน้าและเพย์โหลดข้อมูลเสริมของคู่คีย์-ค่าที่กำหนดเอง
  1. ในสภาพแวดล้อมที่เชื่อถือได้ เช่น Cloud Functions หรือเซิร์ฟเวอร์แอปของคุณ ให้ใช้ Admin SDK หรือ FCM Server Protocols : ตั้งค่าคีย์การ notification อาจมีเพย์โหลดข้อมูลเสริม พับได้เสมอ

    ดู ตัวอย่างการแจ้งเตือนที่แสดง และส่งคำขอเพย์โหลด

  2. ใช้ตัวเขียนการ แจ้งเตือน : ป้อนข้อความ ชื่อเรื่อง ฯลฯ แล้วส่ง เพิ่มเพย์โหลดข้อมูลเสริมโดยระบุข้อมูลที่กำหนดเอง
ข้อความข้อมูล แอปไคลเอนต์มีหน้าที่ในการประมวลผลข้อความข้อมูล ข้อความข้อมูลมีเฉพาะคู่คีย์-ค่าที่กำหนดเองโดยไม่มีชื่อคีย์ที่สงวนไว้ (ดูด้านล่าง) ในสภาพแวดล้อมที่เชื่อถือได้ เช่น 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!"
    }
  }
}

ข้อความแจ้งเตือนจะถูกส่งไปยังถาดการแจ้งเตือนเมื่อแอปอยู่ในพื้นหลัง สำหรับแอปเบื้องหน้า ข้อความจะถูกจัดการโดยฟังก์ชันโทรกลับ

ดูเอกสารอ้างอิงสำหรับรายการคีย์ที่กำหนดไว้ล่วงหน้าทั้งหมดสำหรับการสร้างข้อความแจ้งเตือน:

ข้อความข้อมูล

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

ตัวอย่างเช่น ต่อไปนี้เป็นข้อความในรูปแบบ JSON ในแอป IM เดียวกับด้านบน ซึ่งข้อมูลจะถูกห่อหุ้มไว้ในคีย์ data ทั่วไป และแอปไคลเอนต์คาดว่าจะตีความเนื้อหา:

{
  "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "data":{
      "Nick" : "Mario",
      "body" : "great match!",
      "Room" : "PortugalVSDenmark"
    }
  }
}

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

การเข้ารหัสสำหรับข้อความข้อมูล

Android Transport Layer (ดู สถาปัตยกรรม FCM ) ใช้การเข้ารหัสแบบจุดต่อจุด คุณอาจตัดสินใจเพิ่มการเข้ารหัสจากต้นทางถึงปลายทางให้กับข้อความข้อมูล ทั้งนี้ขึ้นอยู่กับความต้องการของคุณ FCM ไม่มีโซลูชันแบบครบวงจร อย่างไรก็ตาม มีโซลูชันภายนอกที่พร้อมใช้งาน เช่น Capillary หรือ DTLS

ข้อความแจ้งเตือนพร้อมเพย์โหลดข้อมูลเสริม

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

พฤติกรรมของแอพเมื่อได้รับข้อความที่มีทั้งการแจ้งเตือนและเพย์โหลดข้อมูลขึ้นอยู่กับว่าแอพนั้นอยู่ในเบื้องหลังหรือเบื้องหน้า—โดยพื้นฐานแล้ว ไม่ว่าจะเปิดใช้งานอยู่หรือไม่ในเวลาที่ได้รับ

  • เมื่ออยู่ในพื้นหลัง แอปจะได้รับเพย์โหลดการแจ้งเตือนในถาดการแจ้งเตือน และจะจัดการเพย์โหลดข้อมูลเมื่อผู้ใช้แตะที่การแจ้งเตือนเท่านั้น
  • เมื่ออยู่ในพื้นหน้า แอปของคุณจะได้รับวัตถุข้อความที่มีเพย์โหลดทั้งสองแบบ

นี่คือข้อความในรูปแบบ JSON ที่มีทั้งคีย์การ notification และคีย์ data :

{
  "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "notification":{
      "title":"Portugal vs. Denmark",
      "body":"great match!"
    },
    "data" : {
      "Nick" : "Mario",
      "Room" : "PortugalVSDenmark"
    }
  }
}

ปรับแต่งข้อความข้ามแพลตฟอร์ม

ทั้ง SDK ผู้ดูแลระบบ Firebase และโปรโตคอล FCM v1 HTTP อนุญาตให้คำขอข้อความของคุณตั้งค่าฟิลด์ทั้งหมดที่มีในวัตถุ message ซึ่งรวมถึง:

  • ชุดของฟิลด์ทั่วไปที่อินสแตนซ์ของแอป ทั้งหมด ที่ได้รับข้อความจะตีความ
  • ชุดฟิลด์เฉพาะแพลตฟอร์ม เช่น AndroidConfig และ WebpushConfig ตีความโดยอินสแตนซ์ของแอปที่ทำงานบนแพลตฟอร์มที่ระบุเท่านั้น

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

เมื่อใดควรใช้ฟิลด์ทั่วไป

ใช้ฟิลด์ทั่วไปเมื่อคุณ:

  • การกำหนดเป้าหมายอินสแตนซ์ของแอปใน ทุก แพลตฟอร์ม — Apple, Android และเว็บ
  • การส่งข้อความไปยังหัวข้อ

อินสแตนซ์ของแอปทั้งหมด โดยไม่คำนึงถึงแพลตฟอร์ม สามารถตีความฟิลด์ทั่วไปต่อไปนี้:

เมื่อใดควรใช้ฟิลด์เฉพาะแพลตฟอร์ม

ใช้ฟิลด์เฉพาะแพลตฟอร์มเมื่อคุณต้องการ:

  • ส่งฟิลด์ไปยังแพลตฟอร์มเฉพาะเท่านั้น
  • ส่งฟิลด์เฉพาะแพลตฟอร์ม นอกเหนือจาก ฟิลด์ทั่วไป

เมื่อใดก็ตามที่คุณต้องการส่งค่าไปยังแพลตฟอร์มใดแพลตฟอร์มหนึ่งเท่านั้น อย่า ใช้ฟิลด์ทั่วไป ใช้ฟิลด์เฉพาะแพลตฟอร์ม ตัวอย่างเช่น หากต้องการส่งการแจ้งเตือนไปยังแพลตฟอร์มและเว็บของ 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 ผ่านทาง FCM's collapse_key , บน Apple ผ่านทาง apns-collapse-id , และบน JavaScript/เว็บ ผ่านทาง Topic สำหรับรายละเอียด โปรดดูคำอธิบายในส่วนนี้และเอกสารอ้างอิงที่เกี่ยวข้อง

ข้อความที่ไม่สามารถยุบตัวและยุบได้

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

กรณีการใช้งานทั่วไปของข้อความที่ไม่สามารถยุบได้ ได้แก่ ข้อความแชทหรือข้อความสำคัญ ตัวอย่างเช่น ในแอป IM คุณต้องการส่งทุกข้อความ เนื่องจากทุกข้อความมีเนื้อหาที่แตกต่างกัน

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

ข้อความที่ ยุบ ได้คือข้อความที่อาจถูกแทนที่ด้วยข้อความใหม่หากยังไม่ได้ส่งไปยังอุปกรณ์

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

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

ข้อความหัวข้อที่ไม่มีเพย์โหลดสามารถยุบได้ตามค่าเริ่มต้น ข้อความแจ้งเตือนจะยุบได้เสมอและจะไม่สนใจพารามิเตอร์การ collapse_key คีย์

ฉันควรใช้อันไหน

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

ใช้สถานการณ์ วิธีส่ง
ไม่ยุบตัว ทุกข้อความมีความสำคัญต่อแอปไคลเอนต์และจำเป็นต้องส่ง ยกเว้นข้อความแจ้งเตือน ข้อความทั้งหมดจะไม่ยุบตามค่าเริ่มต้น
พับได้ เมื่อมีข้อความที่ใหม่กว่าซึ่งแสดงข้อความที่เก่ากว่าซึ่งเกี่ยวข้องกับแอปไคลเอนต์ FCM จะแทนที่ข้อความที่เก่ากว่า ตัวอย่างเช่น: ข้อความที่ใช้ในการเริ่มต้นการซิงค์ข้อมูลจากเซิร์ฟเวอร์ หรือข้อความแจ้งเตือนที่ล้าสมัย ตั้งค่าพารามิเตอร์ที่เหมาะสมในคำขอข้อความของคุณ:
  • collapseKey บน Android
  • apns-collapse-id บน Apple
  • Topic บนเว็บ
  • collapse_key ในโปรโตคอลเดิม (ทุกแพลตฟอร์ม)

การตั้งค่าลำดับความสำคัญของข้อความ

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

  • ลำดับความสำคัญปกติ ข้อความสำคัญปกติจะถูกส่งทันทีเมื่อแอปอยู่เบื้องหน้า สำหรับแอปที่อยู่เบื้องหลัง การจัดส่งอาจล่าช้า สำหรับข้อความที่มีเวลาน้อย เช่น การแจ้งเตือนอีเมลใหม่ การซิงค์ 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 จะไม่ควบคุมข้อความโดยมีค่าเวลาถึงเป็น 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 และได้รับ ID ข้อความกลับ ไม่ได้หมายความว่าข้อความนั้นถูกส่งไปยังอุปกรณ์แล้ว แต่หมายความว่าได้รับการยอมรับสำหรับการจัดส่ง สิ่งที่เกิดขึ้นกับข้อความหลังจากได้รับการยอมรับนั้นขึ้นอยู่กับหลายปัจจัย

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

หากเชื่อมต่ออุปกรณ์แต่อยู่ใน Doze ข้อความที่มีลำดับความสำคัญต่ำจะถูกจัดเก็บโดย FCM จนกว่าอุปกรณ์จะไม่อยู่ใน Doze และนั่นคือจุดที่แฟล็ก collapse_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 อนุญาตการเชื่อมต่อแบบขนาน 2,500 รายการ

อัตราข้อความสูงสุดไปยังอุปกรณ์เครื่องเดียว

สำหรับ Android คุณสามารถส่งข้อความได้สูงสุด 240 ข้อความ/นาที และ 5,000 ข้อความ/ชั่วโมง ไปยังอุปกรณ์เดียว เกณฑ์ที่สูงนี้มีขึ้นเพื่อให้มีการเข้าชมอย่างรวดเร็วในระยะสั้น เช่น เมื่อผู้ใช้โต้ตอบอย่างรวดเร็วผ่านการแชท ขีดจำกัดนี้ป้องกันข้อผิดพลาดในการส่งลอจิกจากการที่แบตเตอรี่ในอุปกรณ์หมดโดยไม่ตั้งใจ

สำหรับ iOS เราจะส่งคืนข้อผิดพลาดเมื่ออัตราเกินขีดจำกัด APN

ขีด จำกัด ข้อความอัปสตรีม

เราจำกัด ข้อความอัปสตรี มไว้ที่ 1,500,000/นาทีต่อโปรเจ็กต์ เพื่อหลีกเลี่ยงไม่ให้เซิร์ฟเวอร์ปลายทางอัปสตรีมโอเวอร์โหลด

เราจำกัดข้อความอัปสตรีมต่ออุปกรณ์ที่ 1,000/นาที เพื่อป้องกันแบตเตอรี่หมดจากพฤติกรรมของแอพที่ไม่ดี

ขีดจำกัดข้อความหัวข้อ

อัตราการเพิ่ม/ลบการสมัครรับข้อมูลหัวข้อจำกัดอยู่ที่ 3,000 QPS ต่อโครงการ

สำหรับอัตราการส่งข้อความ โปรดดู Fanout Throttling

การควบคุม Fanout

การกระจายข้อความคือกระบวนการส่งข้อความไปยังอุปกรณ์หลายเครื่อง เช่น เมื่อคุณกำหนดเป้าหมายหัวข้อและกลุ่ม หรือเมื่อคุณใช้ตัวเขียนการ แจ้งเตือน เพื่อกำหนดเป้าหมายผู้ชมหรือกลุ่มผู้ใช้

การกระจายของข้อความไม่ได้เกิดขึ้นทันที ดังนั้นบางครั้งคุณจึงมีการกระจายของข้อความหลายรายการพร้อมกัน เราจำกัดจำนวน fanouts ข้อความพร้อมกันต่อโครงการที่ 1,000 หลังจากนั้น เราอาจปฏิเสธคำขอเพิ่มเติมหรือเลื่อนเวลาออกไปจนกว่าคำขอบางส่วนที่กำลังดำเนินการอยู่จะเสร็จสิ้น

อัตรา fanout ที่ทำได้จริงจะขึ้นอยู่กับจำนวนโปรเจกต์ที่ร้องขอ fanout ในเวลาเดียวกัน อัตรา Fanout 10,000 QPS สำหรับแต่ละโครงการไม่ใช่เรื่องแปลก แต่ตัวเลขดังกล่าวไม่ได้รับประกัน และเป็นผลมาจากโหลดทั้งหมดในระบบ สิ่งสำคัญคือต้องทราบว่าความสามารถในการกระจายที่มีอยู่นั้นถูกแบ่งตามโปรเจ็กต์ ไม่ใช่จากคำขอการกระจายทั้งหมด ดังนั้น หากโปรเจกต์ของคุณมี fanouts สองรายการที่กำลังดำเนินการอยู่ แต่ละ fanout จะเห็นเพียงครึ่งหนึ่งของอัตราการ fanout ที่มี วิธีที่แนะนำในการเพิ่มความเร็ว fanout สูงสุดคือให้ fanout ที่กำลังดำเนินการอยู่เพียง 1 รายการต่อครั้ง

พอร์ต 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

การแปลที่อยู่เครือข่ายและ/หรือไฟร์วอลล์ Stateful Packet Inspection:

หากเครือข่ายของคุณใช้ Network Address Translation (NAT) หรือ Stateful Packet Inspection (SPI) ให้ใช้งานการเชื่อมต่อของเราผ่านพอร์ต 5228-5230 โดยใช้เวลา 30 นาทีขึ้นไป สิ่งนี้ช่วยให้เราสามารถเชื่อมต่อที่เชื่อถือได้ในขณะที่ลดการใช้แบตเตอรี่ของอุปกรณ์เคลื่อนที่ของผู้ใช้

ข้อมูลรับรอง

คุณอาจต้องใช้ข้อมูลรับรองต่อไปนี้จากโปรเจ็กต์ Firebase ทั้งนี้ขึ้นอยู่กับฟีเจอร์ FCM ที่คุณใช้:

รหัสโครงการ ตัวระบุเฉพาะสำหรับโปรเจ็กต์ Firebase ของคุณ ซึ่งใช้ในการร้องขอไปยังปลายทาง FCM v1 HTTP ค่านี้มีอยู่ใน แผง การตั้งค่า คอนโซล Firebase
โทเค็นการลงทะเบียน

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

รหัสผู้ส่ง ค่าตัวเลขที่ไม่ซ้ำกันที่สร้างขึ้นเมื่อคุณสร้างโปรเจ็กต์ Firebase ซึ่งมีอยู่ในแท็บ Cloud Messaging ของแผง การตั้งค่า คอนโซล Firebase รหัสผู้ส่งใช้เพื่อระบุผู้ส่งแต่ละรายที่สามารถส่งข้อความไปยังแอปไคลเอนต์ได้
โทเค็นการเข้าถึง โทเค็น OAuth 2.0 อายุสั้นที่อนุญาตคำขอไปยัง HTTP v1 API โทเค็นนี้เชื่อมโยงกับบัญชีบริการที่เป็นของโครงการ Firebase ของคุณ หากต้องการสร้างและหมุนเวียนโทเค็นการเข้าถึง ให้ทำตามขั้นตอนที่อธิบายไว้ใน Authorize Send Requests
รหัสเซิร์ฟเวอร์ (สำหรับโปรโตคอลเดิม)

คีย์เซิร์ฟเวอร์ที่อนุญาตให้เซิร์ฟเวอร์แอปของคุณเข้าถึงบริการของ Google รวมถึงการส่งข้อความผ่านโปรโตคอลดั้งเดิมของ Firebase Cloud Messaging คุณได้รับรหัสเซิร์ฟเวอร์เมื่อคุณสร้างโปรเจ็กต์ Firebase คุณสามารถดูได้ในแท็บ Cloud Messaging ของแผง การตั้งค่า คอนโซล Firebase

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