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

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

ข้อความแจ้งเตือนที่มีเพย์โหลดข้อมูลที่ไม่บังคับ

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

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

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

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

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

ตัวเลือกการจัดส่ง

FCM มีชุดตัวเลือกการนำส่งที่เฉพาะเจาะจงสำหรับข้อความที่ส่งไปยัง อุปกรณ์ Android และอนุญาตให้ใช้ตัวเลือกที่คล้ายกันใน แพลตฟอร์ม Apple และเว็บ เช่น ลักษณะการทำงานของข้อความ "ยุบได้" รองรับใน Android ผ่าน FCM ของ collapse_key, ใน Apple ผ่าน apns-collapse-id และใน JavaScript/เว็บผ่าน Topic ดูรายละเอียดได้ที่คำอธิบายในส่วนนี้และเอกสารอ้างอิงที่เกี่ยวข้อง

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

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

  • ความสำคัญปกติ ระบบจะส่งข้อความที่มีลำดับความสำคัญปกติทันทีเมื่อแอปอยู่เบื้องหน้า สำหรับแอปที่ทำงานในเบื้องหลัง การนำส่งอาจล่าช้า สำหรับข้อความที่ไม่ได้เร่งด่วน เช่น การแจ้งเตือนอีเมลใหม่ การซิงค์ UI หรือการซิงค์ข้อมูลแอปใน เบื้องหลัง ให้เลือกความสำคัญในการนำส่งเป็นปกติ

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

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

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

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

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

ใน Android และเว็บ/JavaScript คุณสามารถระบุอายุสูงสุดของข้อความได้ ค่าต้องเป็นระยะเวลาตั้งแต่ 0 ถึง 2,419,200 วินาที (28 วัน) และสอดคล้องกับระยะเวลาสูงสุดที่ FCM จัดเก็บและพยายามนำส่งข้อความ คำขอที่ไม่มีฟิลด์นี้จะใช้ระยะเวลาเริ่มต้นเป็น 4 สัปดาห์

ตัวอย่างการใช้งานฟีเจอร์นี้มีดังนี้

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

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

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

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

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

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

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

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

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

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

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

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

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

ข้อมูลเข้าสู่ระบบ

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

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

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

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