Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

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

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

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

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

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

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

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

    ดูบาง ตัวอย่างของการแสดงการแจ้งเตือน และส่ง payloads คำขอ

  2. ใช้ แต่งเพลงการแจ้งเตือน : ใส่ข้อความ, ชื่อ, ฯลฯ และส่ง เพิ่มเพย์โหลดข้อมูลเสริมโดยระบุข้อมูลที่กำหนดเอง
ข้อความข้อมูล แอปไคลเอ็นต์มีหน้าที่ในการประมวลผลข้อความข้อมูล ข้อความข้อมูลมีเฉพาะคู่คีย์-ค่าที่กำหนดเองโดยไม่มีชื่อคีย์ที่สงวนไว้ (ดูด้านล่าง) ในสภาพแวดล้อมที่เชื่อถือได้เช่น ฟังก์ชั่นคลาวด์ หรือเซิร์ฟเวอร์ของแอปใช้ SDK ผู้ดูแลระบบ หรือ โปรโตคอล FCM เซิร์ฟเวอร์ : ตั้งค่า data ที่สำคัญเท่านั้น

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

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

ข้อความแจ้งเตือน

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

การแจ้งเตือนข้อความส่งโปรแกรมใช้ SDK ผู้ดูแลระบบหรือโปรโตคอล FCM ให้ตั้งค่า notification ที่สำคัญกับชุดที่กำหนดไว้ล่วงหน้าที่จำเป็นของตัวเลือกที่สำคัญที่มีมูลค่าสำหรับส่วนที่ผู้ใช้มองเห็นข้อความแจ้งเตือน ตัวอย่างเช่น นี่คือข้อความแจ้งเตือนรูปแบบ JSON ในแอป IM ผู้ใช้สามารถคาดหวังว่าจะเห็นข้อความที่มีชื่อ "โปรตุเกส vs. เดนมาร์ก" และข้อความ "คู่กันมาก!" บนอุปกรณ์:

{
  "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "notification":{
      "title":"Portugal vs. Denmark",
      "body":"great match!"
    }
  }
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Firebase SDK ผู้ดูแลระบบและ FCM v1 โปรโตคอล HTTP ทั้งอนุญาตการร้องขอข้อความของคุณในการตั้งค่าเขตข้อมูลทั้งหมดที่มีอยู่ใน 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 ผ่าน FCM ของ collapse_key , บน iOS ผ่าน apns-collapse-id และ JavaScript / เว็บผ่านทาง Topic สำหรับรายละเอียด โปรดดูคำอธิบายในส่วนนี้และเอกสารอ้างอิงที่เกี่ยวข้อง

ข้อความที่ไม่ยุบและยุบได้

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

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

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

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

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

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

ข้อความหัวข้อที่ไม่มีส่วนของข้อมูลจะยุบได้ตามค่าเริ่มต้น

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

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

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

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

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

ตรวจสอบให้แน่ใจว่าคุณไม่ได้เพิ่ม ID ผู้ส่งหลายคำขอโทเค็นเดียวนี้สามารถมีผลการคาดเดาไม่ได้ โทรแยกกันหนึ่งครั้งต่อ ID ผู้ส่ง

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

โปรดทราบว่ามีผู้ส่งหลายคนจำกัด 100 คน

อายุการใช้งานของข้อความ

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

ในกรณีที่ดีที่สุด หากอุปกรณ์เชื่อมต่อกับ 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 ข้อผิดพลาด

การควบคุมปริมาณและการปรับขนาด

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

การควบคุมปริมาณข้อความที่ยุบได้

ตามที่อธิบายไว้ข้างต้น ข้อความที่ยุบได้คือการแจ้งเตือนแบบไม่มีเนื้อหาที่ออกแบบมาเพื่อยุบทับกัน ในกรณีที่นักพัฒนาใช้ข้อความเดิมซ้ำกับแอปบ่อยเกินไป เราจะหน่วงเวลา (ควบคุม) ข้อความเพื่อลดผลกระทบต่อแบตเตอรี่ของผู้ใช้

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

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

เราจำกัดข้อความที่ยุบได้ไม่เกิน 20 ข้อความต่อแอพต่ออุปกรณ์ โดยต้องเติม 1 ข้อความทุก 3 นาที

การควบคุมปริมาณเซิร์ฟเวอร์ XMPP

เราจำกัดอัตราที่คุณสามารถเชื่อมต่อกับเซิร์ฟเวอร์ FCM XMPP ที่ 400 การเชื่อมต่อต่อนาทีต่อโปรเจ็กต์ สิ่งนี้ไม่ควรเป็นปัญหาสำหรับการส่งข้อความ แต่เป็นสิ่งสำคัญสำหรับการรับรองความเสถียรของระบบของเรา

สำหรับแต่ละโปรเจ็กต์ FCM อนุญาตการเชื่อมต่อ 2500 แบบขนานกัน

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

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

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

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

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

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

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

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

การควบคุมปริมาณ Fanout

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 คุณควร allowlist ทั้งหมดของไอพีแอดเดรสที่ระบุไว้ใน goog.json รายการขนาดใหญ่นี้มีการอัปเดตเป็นประจำ และขอแนะนำให้คุณอัปเดตกฎของคุณเป็นประจำทุกเดือน ปัญหาที่เกิดจากข้อจำกัด IP ของไฟร์วอลล์มักเกิดขึ้นเป็นระยะๆ และวินิจฉัยได้ยาก

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

พอร์ตที่จะเปิด:

  • 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.clients.google.com
  • device-provisioning.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 ส่งคำขอ
รหัสเซิร์ฟเวอร์ (สำหรับโปรโตคอลดั้งเดิม)

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

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