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
สำหรับแพลตฟอร์มที่เฉพาะเจาะจง
ป้ายกํากับข้อมูลวิเคราะห์คือสตริงข้อความในรูปแบบ ^[a-zA-Z0-9-_.~%]{1,50}$
ป้ายกำกับมีได้เฉพาะตัวอักษรพิมพ์เล็กและพิมพ์ใหญ่ ตัวเลข และสัญลักษณ์ต่อไปนี้
-
~
%
ความยาวสูงสุด 50 อักขระ คุณระบุป้ายกำกับที่ไม่ซ้ำกันได้สูงสุด 100 รายการต่อวัน ระบบจะไม่รายงานข้อความที่มีป้ายกำกับซึ่งเพิ่มเกินขีดจำกัดดังกล่าว
ในแท็บรายงานการรับส่งข้อความในคอนโซล คุณสามารถค้นหารายการป้ายกำกับที่มีอยู่ทั้งหมดและใช้ป้ายกำกับเดี่ยวๆ หรือใช้ร่วมกันเพื่อกรองสถิติที่แสดงFirebase
ข้อมูลการแสดงผลแบบรวมผ่าน FCM Data API
Firebase Cloud Messaging Data API ช่วยให้คุณดึงข้อมูลที่จะช่วยให้เข้าใจผลลัพธ์ของคําขอข้อความที่กำหนดเป้าหมายไปยังแอปพลิเคชัน Android API นี้แสดงข้อมูลรวมจากอุปกรณ์ Android ที่เปิดใช้การเก็บรวบรวมข้อมูลทั้งหมดในโปรเจ็กต์ ซึ่งรวมถึงรายละเอียดเกี่ยวกับเปอร์เซ็นต์ของข้อความที่ส่งโดยไม่ล่าช้า รวมถึงจํานวนข้อความที่ล่าช้าหรือถูกทิ้งภายในเลเยอร์การขนส่งของ Android การประเมินข้อมูลนี้สามารถเปิดเผยแนวโน้มโดยรวมในการนำส่งข้อความ และช่วยให้คุณพบวิธีปรับปรุงประสิทธิภาพของคําขอส่งที่ได้ผล ดูข้อมูลเกี่ยวกับช่วงวันที่ที่พร้อมใช้งานในรายงานได้ที่ไทม์ไลน์ข้อมูลรวม
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 Export มีบันทึกข้อความแต่ละรายการเกี่ยวกับการยอมรับข้อความโดยแบ็กเอนด์ FCM และการนำส่งข้อความใน SDK บนอุปกรณ์ (ขั้นตอนที่ 2 และ 4 ของสถาปัตยกรรม FCM) ข้อมูลนี้มีประโยชน์ในการยืนยันว่าข้อความแต่ละรายการได้รับการยอมรับและนำส่งแล้ว อ่านเพิ่มเติมเกี่ยวกับการส่งออกข้อมูล BigQuery ในส่วนถัดไป
ในทางตรงกันข้าม Firebase Cloud Messaging Data API จะแสดงรายละเอียดแบบรวมเกี่ยวกับสิ่งที่เกิดขึ้นในเลเยอร์การขนส่งของ Android โดยเฉพาะ (หรือขั้นตอนที่ 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 โดยทำดังนี้
เลือกตัวเลือกใดตัวเลือกหนึ่งต่อไปนี้
เปิดเครื่องมือเขียนการแจ้งเตือน แล้วคลิกเข้าถึง BigQuery ที่ด้านล่างของหน้า
จากหน้าการผสานรวมในคอนโซล Firebase ให้คลิกลิงก์ในการ์ด BigQuery
หน้านี้จะแสดงตัวเลือกการส่งออก FCM สําหรับแอปที่เปิดใช้ FCM ทั้งหมดในโปรเจ็กต์
ทำตามวิธีการบนหน้าจอเพื่อเปิดใช้ BigQuery
ดูข้อมูลเพิ่มเติมได้ที่ลิงก์ Firebase กับ BigQuery
สิ่งที่จะเกิดขึ้นเมื่อคุณเปิดใช้การส่งออก BigQuery สำหรับ Cloud Messaging
Firebase ส่งออกข้อมูลของคุณไปยัง BigQuery โปรดทราบว่าการนำไปใช้งานข้อมูลครั้งแรกสำหรับการส่งออกอาจใช้เวลาถึง 48 ชั่วโมงจึงจะเสร็จสมบูรณ์
- คุณสามารถกำหนดเวลาทดแทนข้อมูลด้วยตนเองได้สูงสุด 30 วันที่ผ่านมา
หลังจากสร้างชุดข้อมูลแล้ว คุณจะเปลี่ยนแปลงตำแหน่งไม่ได้ แต่จะคัดลอกชุดข้อมูลไปยังตำแหน่งอื่นหรือย้าย (สร้างใหม่) ชุดข้อมูลไปยังตำแหน่งอื่นด้วยตนเองได้ ดูข้อมูลเพิ่มเติมที่หัวข้อเปลี่ยนตำแหน่งชุดข้อมูล
Firebase จะตั้งค่าการซิงค์ข้อมูลของคุณจากโปรเจ็กต์ Firebase กับ BigQuery เป็นประจํา การดำเนินการส่งออกรายวันเหล่านี้จะเริ่มตั้งแต่เวลา 04:00 น. ตามเวลาแปซิฟิก และมักจะเสร็จสิ้นภายใน 24 ชั่วโมง
แอปทั้งหมดในโปรเจ็กต์จะลิงก์อยู่กับ BigQuery โดยค่าเริ่มต้น และแอปที่เพิ่มในโปรเจ็กต์ภายหลังจะลิงก์กับ BigQuery โดยอัตโนมัติด้วยเช่นกัน คุณสามารถจัดการแอปที่ส่งข้อมูลได้
หากต้องการปิดใช้งานการส่งออก BigQuery ให้ยกเลิกการลิงก์โปรเจ็กต์ในคอนโซล Firebase
เปิดใช้การส่งออกข้อมูลการนำส่งข้อความ
อุปกรณ์ iOS ที่มี FCM SDK 8.6.0 ขึ้นไปจะเปิดใช้การส่งออกข้อมูลการนำส่งข้อความของแอปได้ FCM รองรับการส่งออกข้อมูลสําหรับทั้งการแจ้งเตือนและการแจ้งเตือนในเบื้องหลัง ก่อนเปิดใช้ตัวเลือกเหล่านี้ คุณต้องสร้างลิงก์ BigQuery สำหรับโปรเจ็กต์ตามที่อธิบายไว้ในการส่งออกข้อมูล BigQuery ก่อนFCM
เปิดใช้การส่งออกข้อมูลการนำส่งสำหรับการแจ้งเตือน
เนื่องจากมีเพียงการแจ้งเตือนแบบแจ้งเตือนเท่านั้นที่เรียกให้ส่วนขยายแอปบริการแจ้งเตือนทำงานได้ คุณจึงต้องเพิ่มส่วนขยายบริการแจ้งเตือนลงในแอปและเรียกใช้ 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
โปรดทราบว่าการกำหนดเป้าหมายโทเค็นที่ล้าสมัยหรือการลงทะเบียนที่ไม่ได้ใช้งานอาจทำให้สถิติเหล่านี้สูงเกินจริง
สคีมาของตารางที่ส่งออกมีดังนี้
_PARTITIONTIME | การประทับเวลา | คอลัมน์จำลองนี้มีการประทับเวลาของช่วงเริ่มต้นของวัน (ใน UTC) ที่โหลดข้อมูล สําหรับพาร์ติชัน YYYYMMDD คอลัมน์เสมือนนี้จะมีค่า TIMESTAMP('YYYY-MM-DD') |
event_timestamp | การประทับเวลา | การประทับเวลาเหตุการณ์ตามที่เซิร์ฟเวอร์บันทึกไว้ |
project_number | INTEGER | หมายเลขโปรเจ็กต์จะระบุโปรเจ็กต์ที่ส่งข้อความ |
message_id | STRING | รหัสข้อความจะระบุข้อความ รหัสข้อความที่สร้างขึ้นจากรหัสแอปและการประทับเวลาอาจไม่ซ้ำกันทั่วโลกในบางกรณี |
instance_id | STRING | รหัสที่ไม่ซ้ำกันของแอปที่ส่งข้อความถึง (หากมี) ซึ่งอาจเป็นรหัสอินสแตนซ์หรือรหัสการติดตั้ง Firebase |
message_type | STRING | ประเภทของข้อความ อาจเป็นข้อความแจ้งเตือนหรือข้อความข้อมูล หัวข้อ ใช้เพื่อระบุข้อความต้นฉบับสำหรับการส่งหัวข้อหรือแคมเปญ ส่วนข้อความต่อๆ ไปจะเป็นข้อความแจ้งเตือนหรือข้อความข้อมูล |
sdk_platform | STRING | แพลตฟอร์มของแอปผู้รับ |
app_name | STRING | ชื่อแพ็กเกจสําหรับแอป Android หรือรหัสกลุ่มสําหรับแอป iOS |
collapse_key | STRING | คีย์การยุบจะระบุกลุ่มข้อความที่ยุบได้ เมื่ออุปกรณ์ไม่ได้เชื่อมต่ออยู่ ระบบจะจัดคิวเฉพาะข้อความล่าสุดที่มีคีย์การยุบเพื่อส่งในภายหลัง |
Priority | INTEGER | ลำดับความสำคัญของข้อความ ค่าที่ใช้ได้คือ "ปกติ" และ "สูง" ใน iOS ลำดับความสำคัญเหล่านี้จะสอดคล้องกับลำดับความสำคัญของ APN 5 และ 10 |
ttl | INTEGER | พารามิเตอร์นี้ระบุระยะเวลา (เป็นวินาที) ที่ควรเก็บข้อความไว้ในพื้นที่เก็บข้อมูล FCM หากอุปกรณ์ออฟไลน์ |
หัวข้อ | STRING | ชื่อของหัวข้อที่ส่งข้อความไป (หากมี) |
bulk_id | INTEGER | รหัสกลุ่มจะระบุกลุ่มข้อความที่เกี่ยวข้อง เช่น การส่งข้อความหนึ่งๆ ไปยังหัวข้อ |
เหตุการณ์ | 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;