获取我们在 Firebase 峰会上发布的所有信息,了解 Firebase 可如何帮助您加快应用开发速度并满怀信心地运行应用。了解详情

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

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

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

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

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

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

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

หากอุปกรณ์เชื่อมต่ออยู่แต่อยู่ใน 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 แบบขนานกัน

อัตราการส่งข้อความสูงสุดในเครื่องเดียว

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