หน้านี้ได้รับการแปลโดย Cloud Translation API
Switch to English

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ในการทำเครื่องหมายข้อความว่าพับได้บน Android ให้ใส่พารามิเตอร์ collapse_key _ คีย์ในเพย์โหลดข้อความ FCM อนุญาตให้ใช้คีย์การยุบที่แตกต่างกันได้สูงสุดสี่คีย์ต่ออุปกรณ์ Android ที่เซิร์ฟเวอร์แอปจะใช้ในเวลาใดก็ได้ กล่าวอีกนัยหนึ่งเซิร์ฟเวอร์ 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 และเว็บ / JavaScript คุณสามารถระบุอายุการใช้งานสูงสุดของข้อความได้ ค่าต้องเป็นระยะเวลาตั้งแต่ 0 ถึง 2,419,200 วินาที (28 วัน) และสอดคล้องกับระยะเวลาสูงสุดที่ FCM จัดเก็บและพยายามส่งข้อความ คำขอที่ไม่มีฟิลด์นี้มีค่าเริ่มต้นเป็นระยะเวลาสูงสุดสี่สัปดาห์

การใช้งานที่เป็นไปได้สำหรับคุณสมบัตินี้มีดังนี้:

  • วิดีโอแชทสายเรียกเข้า
  • กิจกรรมเชิญที่กำลังจะหมดอายุ
  • กิจกรรมในปฏิทิน

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

นี่คือตัวอย่างคำขอที่มี TTL:

{
  "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "data":{
      "Nick" : "Mario",
      "body" : "great match!",
      "Room" : "PortugalVSDenmark"
    },
    "apns":{
      "headers":{
        "apns-expiration":"1604750400"
      }
    },
    "android":{
      "ttl":"4500s"
    },
    "webpush":{
      "headers":{
        "TTL":"4500"
      }
    }
  }
}

การรับข้อความจากผู้ส่งหลายคน

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

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

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

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

โปรดทราบว่ามีผู้ส่งหลายรายได้ไม่เกิน 100 ราย

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

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

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

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

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

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

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

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

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

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

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

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

สำหรับแต่ละโปรเจ็กต์ FCM อนุญาตให้มีการเชื่อมต่อแบบขนาน 2,500 รายการ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • 5228
  • 5229
  • 5230
  • 443

พอร์ตสำหรับเชื่อมต่อขาออก:

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

  1. ไม่มีข้อ จำกัด IP
  2. ที่อยู่ IP ทั้งหมดที่อยู่ในบล็อก IP ที่ระบุไว้ใน ASN ของ Google 15169 อย่าลืมอัปเดตสิ่งนี้อย่างน้อยเดือนละครั้ง

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

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

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

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

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

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

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

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

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