ทำความเข้าใจการส่งข้อความ

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

  • รายงานการส่งข้อความคอนโซล Firebase
  • เมตริกการนำส่ง Android SDK แบบรวมจาก Firebase Cloud Messaging Data API
  • การส่งออกข้อมูลที่ครอบคลุมไปยัง Google BigQuery

เครื่องมือการรายงานที่อธิบายไว้ในหน้านี้ทั้งหมดต้องใช้ Google Analytics เพื่อให้ทำงานได้ หากโครงการของคุณไม่ได้เปิดใช้ Google Analytics คุณสามารถตั้งค่าได้ในแท็บ การผสานรวม ของการตั้งค่าโครงการ Firebase

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

รายงานการส่งข้อความ

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

  • ส่ง — ข้อความข้อมูลหรือข้อความแจ้งเตือนได้รับการจัดคิวเพื่อจัดส่งหรือส่งต่อไปยังบริการของบุคคลที่สาม เช่น APN เพื่อจัดส่งเรียบร้อยแล้ว ดู อายุการใช้งานของข้อความ สำหรับข้อมูลเพิ่มเติม
  • ได้รับ (มีเฉพาะในอุปกรณ์ Android เท่านั้น) — แอปได้รับข้อความข้อมูลหรือข้อความแจ้งเตือนแล้ว ข้อมูลนี้จะพร้อมใช้งานเมื่ออุปกรณ์ Android ที่รับมีการติดตั้ง FCM SDK 18.0.1 หรือสูงกว่า
  • การแสดงผล (ใช้ได้เฉพาะกับข้อความแจ้งเตือนบนอุปกรณ์ Android เท่านั้น) — การแสดงผลการแจ้งเตือนจะแสดงบนอุปกรณ์ในขณะที่แอปอยู่ในพื้นหลัง
  • เปิด — ผู้ใช้เปิดข้อความแจ้งเตือน รายงานเฉพาะการแจ้งเตือนที่ได้รับเมื่อแอปอยู่ในพื้นหลัง

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

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

  • แพลตฟอร์ม (iOS หรือ Android)
  • แอป
  • ป้ายกำกับการวิเคราะห์ที่กำหนดเอง

การเพิ่มป้ายกำกับการวิเคราะห์ในข้อความ

การติดป้ายกำกับข้อความมีประโยชน์มากสำหรับการวิเคราะห์แบบกำหนดเอง ทำให้คุณสามารถกรองสถิติการจัดส่งตามป้ายกำกับหรือชุดป้ายกำกับ คุณสามารถเพิ่มป้ายกำกับให้กับข้อความที่ส่งผ่าน HTTP v1 API ได้โดยการตั้งค่าฟิลด์ fcmOptions.analyticsLabel ในวัตถุ ข้อความ หรือในฟิลด์ AndroidFcmOptions หรือ ApnsFcmOptions เฉพาะแพลตฟอร์ม

ป้ายกำกับ Analytics คือสตริงข้อความในรูปแบบ ^[a-zA-Z0-9-_.~%]{1,50}$ ป้ายกำกับสามารถประกอบด้วยตัวอักษรพิมพ์เล็กและพิมพ์ใหญ่ ตัวเลข และสัญลักษณ์ต่อไปนี้:

  • -
  • ~
  • %

ความยาวสูงสุดคือ 50 อักขระ คุณสามารถระบุป้ายกำกับที่ไม่ซ้ำกันได้สูงสุด 100 รายการต่อวัน ระบบจะไม่รายงานข้อความที่มีป้ายกำกับที่เพิ่มเกินขีดจำกัดดังกล่าว

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

รวมข้อมูลการจัดส่งผ่าน FCM Data API

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

API ให้ข้อมูลทั้งหมดที่มีสำหรับแอปพลิเคชันที่กำหนด ดู เอกสารอ้างอิง API

ข้อมูลถูกแยกย่อยอย่างไร?

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

 {
  "appId": "1:23456789:android:a93a5mb1234efe56",
  "date": {
    "year": 2021,
    "month": 1,
    "day": 1
  },
  "analyticsLabel": "foo",
  "data": {
    "countMessagesAccepted": "314159",
    "messageOutcomePercents": {
      "delivered": 71,
      "pending": 15
    },
   "deliveryPerformancePercents": {
      "deliveredNoDelay": 45,
      "delayedDeviceOffline": 11
    }
  }

วิธีตีความเมตริก

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

นับข้อความที่ยอมรับ

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

เปอร์เซ็นต์ผลลัพธ์ของข้อความ

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

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

เปอร์เซ็นต์ประสิทธิภาพการจัดส่ง

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

เปอร์เซ็นต์ข้อมูลเชิงลึกของข้อความ

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

ข้อมูลนี้แตกต่างจากข้อมูลที่ส่งออกไปยัง BigQuery อย่างไร

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

ในทางตรงกันข้าม Firebase Cloud Messaging Data API ให้รายละเอียดโดยรวมเกี่ยวกับสิ่งที่เกิดขึ้นโดยเฉพาะใน Android Transport Layer (หรือขั้นตอนที่ 3 ของ สถาปัตยกรรม FCM ) ข้อมูลนี้ให้ข้อมูลเชิงลึกเกี่ยวกับการส่งข้อความจากแบ็กเอนด์ FCM ไปยัง Android SDK โดยเฉพาะ มีประโยชน์อย่างยิ่งสำหรับการแสดงแนวโน้มว่าเหตุใดข้อความจึงล่าช้าหรือตกหล่นระหว่างการขนส่งนี้

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

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

ข้อจำกัดของ API

ไทม์ไลน์รวมข้อมูล

API จะส่งคืนข้อมูลย้อนหลัง 7 วัน อย่างไรก็ตาม ข้อมูลที่ส่งคืนโดย API นี้จะล่าช้าถึง 5 วัน ตัวอย่างเช่น ในวันที่ 20 มกราคม ข้อมูลสำหรับวันที่ 9 มกราคม - 15 มกราคมจะพร้อมใช้งาน แต่ไม่ใช่สำหรับวันที่ 16 มกราคมหรือหลังจากนั้น นอกจากนี้ ข้อมูลยังมีให้อย่างดีที่สุด ในกรณีที่ข้อมูลขัดข้อง FCM จะดำเนินการแก้ไขไปข้างหน้าและจะไม่เติมข้อมูลกลับเข้าไปหลังจากปัญหาได้รับการแก้ไขแล้ว ในการหยุดทำงานขนาดใหญ่ ข้อมูลอาจไม่พร้อมใช้งานเป็นเวลาหนึ่งสัปดาห์หรือมากกว่านั้น

ความครอบคลุมของข้อมูล

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

ข้อความที่ยุบ

ข้อความที่ถูก ยุบ โดยข้อความอื่นจะไม่ปรากฏในชุดข้อมูล

ข้อความไปยังอุปกรณ์ที่ไม่ได้ใช้งาน

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

ข้อความไปยังอุปกรณ์ที่มีการกำหนดลักษณะเฉพาะของผู้ใช้

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

การปัดเศษและขั้นต่ำ

FCM จงใจปัดเศษและไม่รวมการนับเมื่อปริมาณไม่มากพอ

การส่งออกข้อมูล BigQuery

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

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

  • Android 20.1.0 หรือสูงกว่า
  • iOS 8.6.0 หรือสูงกว่า
  • Firebase Web SDK 9.0.0 หรือสูงกว่า

ดูรายละเอียดด้านล่างเกี่ยวกับการเปิดใช้งานการส่งออกข้อมูลสำหรับ Android และ iOS

ในการเริ่มต้น ให้ลิงก์โครงการของคุณกับ BigQuery:

  1. เลือกหนึ่งในตัวเลือกต่อไปนี้:

    • เปิด เครื่องมือสร้างการแจ้งเตือน จากนั้นคลิก เข้าถึง BigQuery ที่ด้านล่างสุดของหน้า

    • จากหน้า การผสานรวม ในคอนโซล Firebase ให้คลิก ลิงก์ ในการ์ด BigQuery

      หน้านี้แสดงตัวเลือกการส่งออก FCM สำหรับแอปที่เปิดใช้งาน FCM ทั้งหมดในโครงการ

  2. ทำตามวิธีการบนหน้าจอเพื่อเปิดใช้ BigQuery

โปรดดู ลิงก์ Firebase กับ BigQuery สำหรับข้อมูลเพิ่มเติม

เมื่อคุณเปิดใช้งานการส่งออก BigQuery สำหรับ Cloud Messaging:

  • Firebase ส่งออกข้อมูลของคุณ ไปยัง BigQuery โปรดทราบว่าการเผยแพร่ข้อมูลเพื่อส่งออกครั้งแรกอาจใช้เวลาถึง 48 ชั่วโมงจึงจะเสร็จสมบูรณ์

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

  • Firebase ตั้งค่าการซิงค์ข้อมูลจากโปรเจ็กต์ Firebase ไปยัง BigQuery เป็นประจำ การดำเนินการส่งออกรายวันเหล่านี้เริ่มต้นเวลา 4:00 น. ตามเวลาแปซิฟิก และมักจะเสร็จสิ้นภายใน 24 ชั่วโมง

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

หากต้องการปิดใช้งานการส่งออก BigQuery ให้ยกเลิกการลิงก์โครงการ ในคอนโซล Firebase

เปิดใช้งานการส่งออกข้อมูลการส่งข้อความ

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

เปิดใช้งานการส่งออกข้อมูลการจัดส่งสำหรับการแจ้งเตือน

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

ต้องทำการโทรต่อไปนี้สำหรับทุกการแจ้งเตือนที่ได้รับ:

สวิฟต์

// For alert notifications, call the API inside the service extension:
class NotificationService: UNNotificationServiceExtension {
  override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
  Messaging.extensionHelper()
      .exportDeliveryMetricsToBigQuery(withMessageInfo:request.content.userInfo)
  }
}

วัตถุประสงค์-C

// For alert notifications, call the API inside the service extension:
@implementation NotificationService
- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request
                   withContentHandler:(void (^)(UNNotificationContent *_Nonnull))contentHandler {
  [[FIRMessaging extensionHelper] exportDeliveryMetricsToBigQueryWithMessageInfo:request.content.userInfo];
}
@end

หากคุณกำลังสร้างคำขอส่งโดยใช้ HTTP v1 API อย่าลืมระบุ mutable-content = 1 ใน payload object

เปิดใช้งานการส่งออกข้อมูลการจัดส่งสำหรับการแจ้งเตือนเบื้องหลัง

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

สวิฟต์

// For background notifications, call the API inside the UIApplicationDelegate or NSApplicationDelegate method:
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any]) {
  Messaging.extensionHelper().exportDeliveryMetricsToBigQuery(withMessageInfo:userInfo)
}

วัตถุประสงค์-C

// For background notifications, call the API inside the UIApplicationDelegate or NSApplicationDelegate method:
@implementation AppDelegate
- (void)application:(UIApplication *)application
    didReceiveRemoteNotification:(NSDictionary *)userInfo
          fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
  [[FIRMessaging extensionHelper] exportDeliveryMetricsToBigQueryWithMessageInfo:userInfo];
}
@end

ข้อมูลใดบ้างที่ส่งออกไปยัง BigQuery

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

สคีมาของตารางที่ส่งออกคือ:

_PARTITIONเวลา ประทับเวลา คอลัมน์เทียมนี้มีการประทับเวลาสำหรับการเริ่มต้นของวัน (ใน UTC) ซึ่งมีการโหลดข้อมูล สำหรับพาร์ติชัน YYYYMMDD คอลัมน์เทียมนี้มีค่า TIMESTAMP('YYYY-MM-DD')
เหตุการณ์_timestamp ประทับเวลา การประทับเวลาเหตุการณ์ตามที่บันทึกโดยเซิร์ฟเวอร์
โครงการ_number จำนวนเต็ม หมายเลขโครงการระบุโครงการที่ส่งข้อความ
ข้อความ_id STRING ID ข้อความระบุข้อความ สร้างจาก ID แอปและการประทับเวลา ในบางกรณี ID ข้อความอาจไม่ซ้ำกัน
อินสแตนซ์_id STRING รหัสเฉพาะของแอปที่ส่งข้อความถึง (หากมี) อาจเป็นรหัสอินสแตนซ์หรือรหัสการติดตั้ง Firebase
ข้อความ_ประเภท STRING ประเภทของข้อความ สามารถเป็นข้อความแจ้งเตือนหรือข้อความข้อมูล หัวข้อใช้เพื่อระบุข้อความต้นฉบับสำหรับหัวข้อหรือแคมเปญที่ส่ง ข้อความที่ตามมาเป็นข้อความแจ้งเตือนหรือข้อมูล
sdk_platform STRING แพลตฟอร์มของแอปผู้รับ
ชื่อแอป STRING ชื่อแพ็กเกจสำหรับแอป Android หรือรหัสชุดสำหรับแอป iOS
ยุบ_คีย์ STRING ปุ่มยุบระบุกลุ่มของข้อความที่สามารถยุบได้ เมื่ออุปกรณ์ไม่ได้เชื่อมต่อ เฉพาะข้อความสุดท้ายที่มีปุ่มยุบที่กำหนดเท่านั้นที่จะถูกจัดคิวสำหรับการจัดส่งในที่สุด
ลำดับความสำคัญ จำนวนเต็ม ลำดับความสำคัญของข้อความ ค่าที่ถูกต้องคือ "ปกติ" และ "สูง" บน iOS สิ่งเหล่านี้สอดคล้องกับลำดับความสำคัญของ APN 5 และ 10
ttl จำนวนเต็ม พารามิเตอร์นี้ระบุระยะเวลา (เป็นวินาที) ข้อความควรเก็บไว้ในที่จัดเก็บ FCM หากอุปกรณ์ออฟไลน์
หัวข้อ STRING ชื่อของหัวข้อที่ส่งข้อความ (ถ้ามี)
หมายเลขจำนวนมาก จำนวนเต็ม รหัสกลุ่มจะระบุกลุ่มของข้อความที่เกี่ยวข้อง เช่น ข้อความเฉพาะที่ส่งไปยังหัวข้อหนึ่งๆ
เหตุการณ์ STRING ประเภทของเหตุการณ์ ค่าที่เป็นไปได้คือ:
  • MESSAGE_ACCEPTED: เซิร์ฟเวอร์ FCM ได้รับข้อความและคำขอนั้นถูกต้อง
  • MESSAGE_DELIVERED: ข้อความถูกส่งไปยัง FCM SDK ของแอปบนอุปกรณ์แล้ว ตามค่าเริ่มต้น ฟิลด์นี้จะไม่เผยแพร่ หากต้องการเปิดใช้งาน ให้ทำตามคำแนะนำที่ให้ไว้ใน setDeliveryMetricsExportToBigQuery(boolean)
  • MISSING_REGISTRATIONS: คำขอถูกปฏิเสธเนื่องจากไม่มีการลงทะเบียน
  • UNAUTHORIZED_REGISTRATION: ข้อความถูกปฏิเสธเนื่องจากผู้ส่งไม่ได้รับอนุญาตให้ส่งไปที่การลงทะเบียน
  • MESSAGE_RECEIVED_INTERNAL_ERROR: มีข้อผิดพลาดที่ไม่ได้ระบุขณะประมวลผลคำขอข้อความ
  • MISMATCH_SENDER_ID: คำขอส่งข้อความถูกปฏิเสธเนื่องจากรหัสผู้ส่งที่ส่งข้อความไม่ตรงกันและรหัสที่แจ้งสำหรับปลายทาง
  • QUOTA_EXCEEDED: คำขอส่งข้อความถูกปฏิเสธเนื่องจากโควต้าไม่เพียงพอ
  • INVALID_REGISTRATION: คำขอส่งข้อความถูกปฏิเสธเนื่องจากการลงทะเบียนไม่ถูกต้อง
  • INVALID_PACKAGE_NAME: คำขอส่งข้อความถูกปฏิเสธเนื่องจากชื่อแพ็คเกจไม่ถูกต้อง
  • INVALID_APNS_CREDENTIAL: คำขอส่งข้อความถูกปฏิเสธเนื่องจากใบรับรอง APNS ไม่ถูกต้อง
  • INVALID_PARAMETERS: คำขอส่งข้อความถูกปฏิเสธเนื่องจากพารามิเตอร์ไม่ถูกต้อง
  • PAYLOAD_TOO_LARGE: คำขอส่งข้อความถูกปฏิเสธเนื่องจากเพย์โหลดเกินขีดจำกัด
  • AUTHENTICATION_ERROR: คำขอส่งข้อความถูกปฏิเสธเนื่องจากข้อผิดพลาดในการตรวจสอบสิทธิ์ (ตรวจสอบคีย์ API ที่ใช้ส่งข้อความ)
  • INVALID_TTL: คำขอส่งข้อความถูกปฏิเสธเนื่องจาก TTL ไม่ถูกต้อง
analytics_label STRING ด้วย HTTP v1 API คุณสามารถตั้งค่าป้ายกำกับการวิเคราะห์เมื่อส่งข้อความ เพื่อทำเครื่องหมายข้อความสำหรับวัตถุประสงค์ในการวิเคราะห์

คุณทำอะไรกับข้อมูลที่ส่งออกได้บ้าง

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

นับข้อความที่ส่งโดยแอพ

SELECT app_name, COUNT(1)
FROM `project ID.firebase_messaging.data`
WHERE
  _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
  AND event = 'MESSAGE_ACCEPTED'
  AND message_id != ''
GROUP BY 1;

นับอินสแตนซ์ของแอปที่ไม่ซ้ำซึ่งกำหนดเป้าหมายโดยข้อความ

SELECT COUNT(DISTINCT instance_id)
FROM `project ID.firebase_messaging.data`
WHERE
  _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
  AND event = 'MESSAGE_ACCEPTED';

นับข้อความแจ้งเตือนที่ส่ง

SELECT COUNT(1)
FROM `project ID.firebase_messaging.data`
WHERE
  _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
  AND event = 'MESSAGE_ACCEPTED'
  AND message_type = 'DISPLAY_NOTIFICATION';

นับข้อมูลที่ส่ง

SELECT COUNT(1)
FROM `project ID.firebase_messaging.data`
WHERE
  _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
  AND event = 'MESSAGE_ACCEPTED'
  AND message_type = 'DATA_MESSAGE';

นับข้อความที่ส่งไปยังหัวข้อหรือแคมเปญ

SELECT COUNT(1)
FROM `project ID.firebase_messaging.data`
WHERE
  _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
  AND event = 'MESSAGE_ACCEPTED'
  AND bulk_id = your bulk id AND message_id != '';

หากต้องการติดตามเหตุการณ์สำหรับข้อความที่ส่งถึงหัวข้อใดหัวข้อหนึ่ง ให้แก้ไขข้อความค้นหานี้เพื่อแทนที่ AND message_id != '' ด้วย AND message_id = <your message id>; .

คำนวณระยะเวลา fanout สำหรับหัวข้อหรือแคมเปญที่กำหนด

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

SELECT
  TIMESTAMP_DIFF(
    end_timestamp, start_timestamp, MILLISECOND
  ) AS fanout_duration_ms,
  end_timestamp,
  start_timestamp
FROM (
    SELECT MAX(event_timestamp) AS end_timestamp
    FROM `project ID.firebase_messaging.data`
    WHERE
      _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
      AND event = 'MESSAGE_ACCEPTED'
      AND bulk_id = your bulk id
  ) sent
  CROSS JOIN (
    SELECT event_timestamp AS start_timestamp
    FROM `project ID.firebase_messaging.data`
    WHERE
      _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
      AND event = 'MESSAGE_ACCEPTED'
      AND bulk_id = your bulk id
      AND message_type = 'TOPIC'
  ) initial_message;

นับเปอร์เซ็นต์ของข้อความที่ส่ง

SELECT
  messages_sent,
  messages_delivered,
  messages_delivered / messages_sent * 100 AS percent_delivered
FROM (
    SELECT COUNT(DISTINCT CONCAT(message_id, instance_id)) AS messages_sent
    FROM `project ID.firebase_messaging.data`
    WHERE
      _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
      AND event = 'MESSAGE_ACCEPTED'
  ) sent
  CROSS JOIN (
    SELECT COUNT(DISTINCT CONCAT(message_id, instance_id)) AS messages_delivered
    FROM `project ID.firebase_messaging.data`
    WHERE
      _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
      AND (event = 'MESSAGE_DELIVERED'
      AND message_id
      IN (
        SELECT message_id FROM `project ID.firebase_messaging.data`
        WHERE
          _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
          AND event = 'MESSAGE_ACCEPTED'
        GROUP BY 1
      )
  ) delivered;

ติดตามเหตุการณ์ทั้งหมดสำหรับรหัสข้อความและรหัสอินสแตนซ์ที่กำหนด

SELECT *
FROM `project ID.firebase_messaging.data`
WHERE
    _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
    AND message_id = 'your message id'
    AND instance_id = 'your instance id'
ORDER BY event_timestamp;

ประมวลผลเวลาแฝงสำหรับรหัสข้อความและรหัสอินสแตนซ์ที่กำหนด

SELECT
  TIMESTAMP_DIFF(
    MAX(delivered_time), MIN(accepted_time), MILLISECOND
  ) AS latency_ms
FROM (
    SELECT event_timestamp AS accepted_time
    FROM `project ID.firebase_messaging.data`
    WHERE
      _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
      AND message_id = 'your message id'
      AND instance_id = 'your instance id'
      AND event = 'MESSAGE_ACCEPTED'
  ) sent
  CROSS JOIN (
    SELECT event_timestamp AS delivered_time
    FROM `project ID.firebase_messaging.data`
    WHERE
      _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD') AND
      message_id = 'your message id' AND instance_id = 'your instance id'
      AND (event = 'MESSAGE_DELIVERED'
  ) delivered;