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

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

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

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

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

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

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

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

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

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

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!"
    }
  }
}

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

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

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

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

ตัวอย่างเช่น นี่คือข้อความที่จัดรูปแบบ 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 และเว็บ
  • การส่งข้อความไปยังหัวข้อ

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

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

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

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

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

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

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

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

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

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

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

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

หากต้องการรับข้อมูลเชิงลึกเพิ่มเติมเกี่ยวกับการส่งข้อความ:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

อัตราการกระจายออกที่ทำได้จริงจะขึ้นอยู่กับจำนวนโปรเจ็กต์ที่ร้องขอการกระจายออกในเวลาเดียวกัน อัตราการกระจาย 10,000 QPS สำหรับแต่ละโปรเจ็กต์ไม่ใช่เรื่องแปลก แต่ตัวเลขดังกล่าวไม่ใช่การรับประกัน และเป็นผลมาจากโหลดทั้งหมดบนระบบ สิ่งสำคัญคือต้องทราบว่าความจุ fanout ที่มีอยู่จะถูกแบ่งตามโปรเจ็กต์ และไม่ข้ามคำขอ fanout ดังนั้น หากโปรเจ็กต์ของคุณมี 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
  • อุปกรณ์-provisioning.googleapis.com
  • firebaseinstallations.googleapis.com

การแปลที่อยู่เครือข่ายและ/หรือไฟร์วอลล์การตรวจสอบแพ็คเก็ตแบบมีสถานะ:

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

การโต้ตอบ VPN และความสามารถในการข้ามผ่าน

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

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

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

หากไม่ได้กำหนดค่า VPN เพื่อให้สามารถข้ามได้ Firebase Cloud Messaging จะใช้เครือข่าย VPN เพื่อเชื่อมต่อกับเซิร์ฟเวอร์ ซึ่งอาจส่งผลให้ข้อความล่าช้าเป็นระยะเวลาหนึ่งและอาจส่งผลให้มีการใช้งานแบตเตอรี่มากขึ้น เนื่องจาก Cloud Messaging ทำงานเพื่อรักษาการเชื่อมต่อผ่านการเชื่อมต่อ VPN

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

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

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

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

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

รหัสเซิร์ฟเวอร์ที่ให้สิทธิ์เซิร์ฟเวอร์แอปของคุณสำหรับการเข้าถึงบริการของ Google รวมถึงการส่งข้อความผ่านโปรโตคอลเดิมของ Firebase Cloud Messaging ที่เลิกใช้งานแล้ว

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