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