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 ที่รับมี FCM SDK 18.0.1 หรือ สูงกว่าที่ติดตั้ง
- การแสดงผล (ใช้ได้กับข้อความแจ้งเตือนในอุปกรณ์ Android เท่านั้น) — การแจ้งเตือนบนจอแสดงผลปรากฏในอุปกรณ์ขณะที่แอปทำงานอยู่เบื้องหลัง
- เปิด — ผู้ใช้เปิดข้อความแจ้งเตือน รายงานสำหรับ การแจ้งเตือนที่ได้รับเมื่อแอปอยู่ในเบื้องหลัง
ข้อมูลนี้พร้อมใช้งานสำหรับข้อความทั้งหมดที่มีเพย์โหลดการแจ้งเตือน และข้อความข้อมูลที่ติดป้ายกำกับทั้งหมด หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับป้ายกำกับ โปรดดู การเพิ่มป้ายกำกับข้อมูลวิเคราะห์ในข้อความ
เมื่อดูรายงานข้อความ คุณจะตั้งค่าช่วงวันที่ของข้อมูลที่แสดงได้ โดยมีตัวเลือกในการส่งออกเป็น CSV นอกจากนี้ คุณยังกรองตามเกณฑ์ต่อไปนี้ได้ด้วย
- แพลตฟอร์ม (iOS หรือ Android)
- แอป
- ป้ายกำกับข้อมูลวิเคราะห์ที่กำหนดเอง
การเพิ่มป้ายกำกับข้อมูลวิเคราะห์ในข้อความ
การติดป้ายกำกับข้อความมีประโยชน์อย่างยิ่งสําหรับการวิเคราะห์ที่กําหนดเอง ซึ่งช่วยให้คุณกรองสถิติการนำส่งตามป้ายกำกับหรือชุดป้ายกำกับได้ คุณสามารถเพิ่ม
ติดป้ายกำกับให้กับข้อความที่ส่งผ่าน API ของ HTTP v1 โดยการตั้งค่า
ฟิลด์ 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 ที่เปิดใช้การเก็บรวบรวมข้อมูลทั้งหมดในโปรเจ็กต์ ซึ่งรวมถึงรายละเอียดเกี่ยวกับ เปอร์เซ็นต์ของข้อความที่ส่ง โดยไม่ล่าช้า รวมถึงจำนวนข้อความที่ล่าช้าหรือหายไปภายใน Transport Layer ของ 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
จะแสดงข้อมูลเกี่ยวกับผลลัพธ์ของคำขอข้อความ หมวดหมู่ทั้งหมดจะแยกจากกันโดยสิ้นเชิง ช่วย
ตอบคำถาม เช่น "ข้อความของฉันถูกส่งไปแล้วหรือไม่" และ "สาเหตุเกิดจาก
ข้อความจะถูกทิ้งหรือไม่"
เช่น ค่าสูงสำหรับช่อง 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 หรือ การเขียนการแจ้งเตือน
สำหรับข้อความที่ส่งไปยังอุปกรณ์ที่มี SDK ขั้นต่ำ FCM ดังต่อไปนี้ คุณจะมีตัวเลือกเพิ่มเติมในการเปิดใช้การส่งออกข้อความ ข้อมูลการนำส่งของแอป
- 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 รองรับการส่งออกข้อมูลสําหรับทั้งการแจ้งเตือนและการแจ้งเตือนในเบื้องหลัง ก่อนเปิดใช้ตัวเลือกเหล่านี้ คุณต้องสร้าง FCM-ลิงก์ BigQuery สำหรับโปรเจ็กต์ตามที่อธิบายไว้ในการส่งออกข้อมูล BigQuery
เปิดใช้การส่งออกข้อมูลการนำส่งสำหรับการแจ้งเตือน
เนื่องจากจะมีเพียงการแจ้งเตือนเท่านั้นที่สามารถเรียกใช้แอปบริการการแจ้งเตือนได้ คุณต้องเพิ่มส่วนขยายบริการการแจ้งเตือนลงในแอปและการโทร API นี้ภายในส่วนขยายบริการเพื่อเปิดใช้การติดตามข้อความ Display ดูเอกสารประกอบของ 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 | การประทับเวลา | การประทับเวลาเหตุการณ์ที่เซิร์ฟเวอร์บันทึกไว้ |
project_number | INTEGER | หมายเลขโปรเจ็กต์จะระบุโปรเจ็กต์ที่ส่งข้อความ |
message_id | STRING | รหัสข้อความจะระบุข้อความ รหัสข้อความที่สร้างขึ้นจากรหัสแอปและการประทับเวลาอาจไม่ซ้ำกันทั่วโลกในบางกรณี |
instance_id | STRING | รหัสที่ไม่ซ้ำกันของแอปที่ส่งข้อความถึง (หากมี) ซึ่งอาจเป็นรหัสอินสแตนซ์หรือรหัสการติดตั้ง Firebase |
ประเภทข้อความ | STRING | ประเภทของข้อความ อาจเป็นข้อความแจ้งเตือนหรือข้อความข้อมูล หัวข้อ ใช้เพื่อระบุข้อความต้นฉบับสำหรับหัวข้อหรือแคมเปญที่ส่ง ข้อความที่ตามมาจะเป็นการแจ้งเตือนหรือข้อความข้อมูล |
SDK แพลตฟอร์ม | STRING | แพลตฟอร์มของแอปผู้รับ |
app_name | STRING | ชื่อแพ็กเกจสำหรับแอป Android หรือรหัสชุดสำหรับแอป iOS |
ปุ่มยุบ | 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>;
คำนวณระยะเวลา 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;