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

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

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

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

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

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

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

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

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

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

เนื่องจากมีเพียงการแจ้งเตือนแบบแจ้งเตือนเท่านั้นที่เรียกให้ส่วนขยายแอปบริการแจ้งเตือนทำงานได้ คุณจึงต้องเพิ่มส่วนขยายบริการแจ้งเตือนลงในแอปและเรียกใช้ API นี้ภายในส่วนขยายบริการเพื่อเปิดใช้การติดตามข้อความที่แสดง โปรดดูเอกสารประกอบของ 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_platform STRING แพลตฟอร์มของแอปผู้รับ
ชื่อแอป 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;