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

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 data Export ก่อน

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

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

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

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

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

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

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

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

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

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;