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 โดยทำดังนี้
เลือกหนึ่งในตัวเลือกต่อไปนี้:
เปิด ตัวเขียนการแจ้งเตือน จากนั้นคลิก เข้าถึง BigQuery ที่ด้านล่างของหน้า
จากหน้า การผสานรวม ในคอนโซล Firebase ให้คลิก ลิงก์ ในการ์ด BigQuery
หน้านี้แสดงตัวเลือกการส่งออก FCM สำหรับแอปที่เปิดใช้งาน FCM ทั้งหมดในโครงการ
ทำตามคำแนะนำบนหน้าจอเพื่อเปิดใช้ BigQuery
โปรดดู ลิงก์ Firebase กับ BigQuery สำหรับข้อมูลเพิ่มเติม
เมื่อคุณเปิดใช้การส่งออก BigQuery สำหรับ Cloud Messaging:
Firebase ส่งออกข้อมูลของคุณ ไปยัง BigQuery โปรดทราบว่าการเผยแพร่ข้อมูลเริ่มแรกเพื่อการส่งออกอาจใช้เวลาถึง 48 ชั่วโมงจึงจะเสร็จสมบูรณ์
- คุณ ตั้งเวลาการทดแทนข้อมูลด้วยตนเอง ได้สูงสุด 30 วันที่ผ่านมา
หลังจากสร้างชุดข้อมูลแล้ว คุณจะเปลี่ยนตำแหน่งไม่ได้ แต่คุณสามารถคัดลอกชุดข้อมูลไปยังตำแหน่งอื่นหรือย้าย (สร้างใหม่) ชุดข้อมูลในตำแหน่งอื่นด้วยตนเองได้ หากต้องการเรียนรู้เพิ่มเติม ดู ที่ เปลี่ยนตำแหน่งชุดข้อมูล
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 | ประเภทของงาน ค่าที่เป็นไปได้คือ:
|
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;