เกี่ยวกับข้อความ 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/นาที เพื่อป้องกันแบตเตอรี่หมดจากการทำงานของแอปที่ไม่ดี

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

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

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

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

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

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

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

พอร์ต FCM และไฟร์วอลล์ของคุณ

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

สำหรับการเชื่อมต่อขาออก FCM ไม่ได้ระบุ IP เฉพาะ เนื่องจากช่วง IP ของเรามีการเปลี่ยนแปลงบ่อยเกินไป และกฎไฟร์วอลล์ของคุณอาจล้าสมัย ซึ่งส่งผลต่อประสบการณ์ของผู้ใช้ ตามหลักการแล้ว พอร์ตที่อนุญาตพิเศษ 5228-5230 โดยไม่มีข้อจำกัด IP แต่ถ้าคุณจะต้องมีข้อ จำกัด IP คุณควรอนุญาตพิเศษทั้งหมดของไอพีแอดเดรสที่ระบุไว้ใน goog.json รายการขนาดใหญ่นี้มีการอัปเดตเป็นประจำ และขอแนะนำให้คุณอัปเดตกฎของคุณเป็นประจำทุกเดือน ปัญหาที่เกิดจากข้อจำกัด IP ของไฟร์วอลล์มักเกิดขึ้นเป็นระยะๆ และวินิจฉัยได้ยาก

พอร์ตที่จะเปิดสำหรับข้อความขาเข้า:

  • 5228
  • 5229
  • 5230
  • 443

พอร์ตเพื่ออนุญาตการเชื่อมต่อขาออก:

หนึ่งในนั้น (ต้องการตัวเลือก #1):

  1. ไม่มีข้อ จำกัด IP
  2. ที่อยู่ IP ทั้งหมดสำหรับโดเมนเริ่มต้น

    เพื่อดึงรายชื่อขึ้นไปวันที่อยู่เหล่านี้ทำตามคำแนะนำที่ระบุไว้ใน ที่อยู่ IP สำหรับโดเมนเริ่มต้น

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 และเบราว์เซอร์