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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • -
  • ~
  • %

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

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

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

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

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

ข้อมูลมีการแจกแจงอย่างไร

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

 {
  "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 Export จะแสดงบันทึกข้อความแต่ละรายการเกี่ยวกับการยอมรับข้อความโดย แบ็กเอนด์ FCM และการส่งข้อความใน SDK ในอุปกรณ์ (ขั้นตอนที่ 2 และ 4 จาก สถาปัตยกรรม FCM) ข้อมูลนี้มีประโยชน์ในการตรวจสอบว่าข้อความแต่ละรายการได้รับการยอมรับและนำส่งแล้ว อ่านเพิ่มเติมเกี่ยวกับการส่งออกข้อมูล BigQuery ในส่วนถัดไป

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

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

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

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

ลำดับเวลาข้อมูลรวม

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

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

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

ข้อความที่หมดอายุแล้ว

หาก Time To Live (TTL) หมดอายุหลังจากวันที่บันทึกที่ระบุ ระบบจะไม่นับข้อความเป็นdroppedTtlExpiredในวันที่ดังกล่าว

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

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

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

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

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

FCM จงใจปัดเศษและไม่รวมจำนวนที่มีปริมาณไม่มาก ให้เพียงพอ

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

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

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

  • 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 เป็นประจํา การดำเนินการส่งออกรายวันเหล่านี้จะเริ่มตั้งแต่เวลา 04:00 น. ตามเวลาแปซิฟิก และมักจะเสร็จสิ้นภายใน 24 ชั่วโมง

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

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

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

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

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

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

คุณต้องเรียกใช้เมธอดต่อไปนี้สําหรับการแจ้งเตือนที่ได้รับทุกครั้ง

Swift

// 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)
  }
}

Objective-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 ในออบเจ็กต์เพย์โหลด

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

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

Swift

// 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)
}

Objective-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

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

สคีมาของตารางที่ส่งออกมีดังนี้

_นอกเวลา การประทับเวลา คอลัมน์จำลองนี้มีการประทับเวลาของช่วงเริ่มต้นของวัน (ใน UTC) ที่โหลดข้อมูล สําหรับพาร์ติชัน YYYYMMDD คอลัมน์เสมือนนี้จะมีค่า TIMESTAMP('YYYY-MM-DD')
event_timestamp การประทับเวลา การประทับเวลาเหตุการณ์ที่เซิร์ฟเวอร์บันทึกไว้
project_number INTEGER หมายเลขโปรเจ็กต์จะระบุโปรเจ็กต์ที่ส่งข้อความ
message_id STRING รหัสข้อความจะระบุข้อความ รหัสข้อความที่สร้างขึ้นจากรหัสแอปและการประทับเวลาอาจไม่ซ้ำกันทั่วโลกในบางกรณี
instance_id STRING รหัสที่ไม่ซ้ำกันของแอปที่ส่งข้อความถึง (หากมี) ซึ่งอาจเป็นรหัสอินสแตนซ์หรือรหัสการติดตั้ง Firebase
ประเภทข้อความ STRING ประเภทของข้อความ อาจเป็นข้อความแจ้งเตือนหรือข้อความข้อมูล หัวข้อ ใช้เพื่อระบุข้อความต้นฉบับสำหรับหัวข้อหรือแคมเปญที่ส่ง ข้อความที่ตามมาจะเป็นการแจ้งเตือนหรือข้อความข้อมูล
SDK แพลตฟอร์ม STRING แพลตฟอร์มของแอปผู้รับ
app_name STRING ชื่อแพ็กเกจสำหรับแอป Android หรือรหัสชุดสำหรับแอป iOS
ปุ่มยุบ STRING คีย์การยุบจะระบุกลุ่มข้อความที่ยุบได้ เมื่อไม่ได้เชื่อมต่ออุปกรณ์ ระบบจะแสดงเฉพาะข้อความสุดท้ายที่มีการยุบเท่านั้น คีย์ อยู่ในคิวเพื่อนำส่งขั้นสุดท้าย
Priority INTEGER ลำดับความสำคัญของข้อความ ค่าที่ถูกต้องคือ "ปกติ" และ "สูง" ใน iOS ลำดับความสำคัญเหล่านี้จะสอดคล้องกับลำดับความสำคัญของ APN 5 และ 10
TTL INTEGER พารามิเตอร์นี้จะระบุระยะเวลา (เป็นวินาที) ที่จะเก็บข้อความไว้ ในพื้นที่เก็บข้อมูล FCM หากอุปกรณ์ออฟไลน์อยู่
หัวข้อ STRING ชื่อหัวข้อที่มีการส่งข้อความ (หากมี)
bulk_id INTEGER รหัสกลุ่มจะระบุกลุ่มข้อความที่เกี่ยวข้อง เช่น การส่งข้อความหนึ่งๆ ไปยังหัวข้อ
เหตุการณ์ 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 สำหรับหัวข้อหรือแคมเปญหนึ่งๆ

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

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;