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

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

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

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

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

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

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

  • การส่ง — ข้อความเกี่ยวกับข้อมูลหรือข้อความแจ้งเตือนอยู่ในคิวแล้วสำหรับ หรือได้รับการส่งไปยังบริการของบุคคลที่สาม เช่น APN เรียบร้อยแล้ว สำหรับการจัดส่ง ดูอายุการใช้งานของข้อความ เพื่อดูข้อมูลเพิ่มเติม
  • ได้รับแล้ว (ใช้ได้เฉพาะในอุปกรณ์ 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 ป้ายต่อวัน ข้อความที่มีป้ายกำกับที่เพิ่มเกินกว่าขีดจำกัดดังกล่าวจะไม่ได้รับการรายงาน

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

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

เช่น ค่าสูงสำหรับช่อง 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 Transport Layer (หรือขั้นตอนที่ 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 หรือ การเขียนการแจ้งเตือน

สำหรับข้อความที่ส่งไปยังอุปกรณ์ที่มี 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 Export ยกเลิกการลิงก์โปรเจ็กต์ ในคอนโซล Firebase

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

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

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

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;