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