FCM มีเครื่องมือ 3 ชุดที่จะช่วยให้คุณได้รับข้อมูลเชิงลึกเกี่ยวกับการส่งข้อความ ดังนี้
- รายงานการส่งข้อความคอนโซล Firebase
- เมตริกการนำส่ง Android SDK แบบรวมจาก Firebase Cloud Messaging Data API
- การส่งออกข้อมูลที่ครอบคลุมไปยัง Google BigQuery
เครื่องมือการรายงานที่อธิบายในหน้านี้ทั้งหมดต้องใช้ Google Analytics จึงจะทำงานได้ หากไม่ได้เปิดใช้ Google Analytics สำหรับโปรเจ็กต์ของคุณ คุณสามารถตั้งค่าได้ในแท็บการผสานรวมของการตั้งค่าโปรเจ็กต์ Firebase
โปรดทราบว่าการรายงานสถิติหลายรายการในหน้านี้อาจมีความล่าช้าสูงสุด 24 ชั่วโมงเนื่องจากการจัดกลุ่มข้อมูลการวิเคราะห์
รายงานการส่งข้อความ
ในแท็บรายงานในคอนโซล Firebase คุณสามารถดูข้อมูลต่อไปนี้สำหรับข้อความที่ส่งไปยัง FCM SDK สำหรับแพลตฟอร์ม Android หรือ Apple ซึ่งรวมถึงข้อความที่ส่งผ่านการเขียนการแจ้งเตือนและ API ของ FCM
- การส่ง - ข้อความข้อมูลหรือข้อความแจ้งเตือนถูกจัดคิวสำหรับการส่ง หรือถูกส่งไปยังบริการของบุคคลที่สาม เช่น APN สำหรับการส่งเรียบร้อยแล้ว โปรดดูข้อมูลเพิ่มเติมที่อายุการใช้งานของข้อความ
- ได้รับแล้ว (ใช้ได้ในอุปกรณ์ 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 ป้ายต่อวัน ข้อความที่มีป้ายกำกับที่เพิ่มเกินจากขีดจำกัดดังกล่าวจะไม่ได้รับการรายงาน
ในแท็บรายงานการรับส่งข้อความในคอนโซล Firebase คุณจะค้นหารายการป้ายกำกับที่มีอยู่ทั้งหมดและใช้ป้ายกำกับทีละป้ายหรือใช้ร่วมกันเพื่อกรองสถิติที่แสดงได้
ข้อมูลการนำส่งรวมผ่าน FCM Data API
Firebase Cloud Messaging Data API ช่วยให้คุณเรียกข้อมูลที่จะช่วยให้คุณเข้าใจผลลัพธ์ของคำขอแชทที่กำหนดเป้าหมายไปยังแอปพลิเคชัน Android ได้ API จะให้ข้อมูลแบบรวมในอุปกรณ์ Android ทั้งหมดที่เปิดใช้การรวบรวมข้อมูลในโปรเจ็กต์ ซึ่งรวมถึงรายละเอียดเกี่ยวกับเปอร์เซ็นต์ของข้อความที่ส่งโดยไม่ล่าช้าและจำนวนข้อความที่ล่าช้าหรือหายไปภายใน Android Transport Layer การประเมินข้อมูลนี้สามารถเผยให้เห็นแนวโน้มกว้างๆ ในการส่งข้อความและช่วยให้คุณค้นพบวิธีที่มีประสิทธิภาพในการปรับปรุงประสิทธิภาพของคำขอที่ส่ง โปรดดูลำดับเวลาข้อมูลสรุปสำหรับข้อมูลเกี่ยวกับความพร้อมใช้งานของช่วงวันที่ในรายงาน
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 Export ให้ยกเลิกการลิงก์โปรเจ็กต์ในคอนโซล 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 แพลตฟอร์ม | STRING | แพลตฟอร์มของแอปผู้รับ |
ชื่อแอป | STRING | ชื่อแพ็กเกจสำหรับแอป Android หรือรหัสชุดสำหรับแอป iOS |
ปุ่มยุบ | STRING | คีย์ยุบจะระบุกลุ่มข้อความที่สามารถยุบได้ เมื่อไม่ได้เชื่อมต่ออุปกรณ์ เฉพาะข้อความสุดท้ายที่มีคีย์ยุบเท่านั้นจึงจะเข้าคิวรอการนำส่งในลำดับสุดท้าย |
Priority | INTEGER | ลำดับความสำคัญของข้อความ ค่าที่ถูกต้องคือ "normal" และ "high" ใน iOS ค่าเหล่านี้สอดคล้องกับ ลำดับความสำคัญของ APN ที่ 5 และ 10 |
TTL | INTEGER | พารามิเตอร์นี้จะระบุระยะเวลา (เป็นวินาที) ที่จะเก็บข้อความไว้ในพื้นที่เก็บข้อมูล FCM หากอุปกรณ์ออฟไลน์ |
หัวข้อ | STRING | ชื่อหัวข้อที่มีการส่งข้อความ (หากมี) |
รหัสกลุ่ม | INTEGER | รหัสจำนวนมากจะระบุกลุ่มของข้อความที่เกี่ยวข้องกัน เช่น ข้อความบางรายการส่งไปยังหัวข้อ |
เหตุการณ์ | STRING | ประเภทของเหตุการณ์
ค่าที่เป็นไปได้มีดังนี้
|
ป้ายกำกับ analytics_label | STRING | เมื่อใช้ HTTP v1 API คุณสามารถตั้งค่าป้ายกำกับ Analytics เมื่อส่งข้อความ เพื่อทำเครื่องหมายข้อความ เพื่อวัตถุประสงค์ด้านการวิเคราะห์ |
คุณใช้ข้อมูลที่ส่งออกทำอะไรได้บ้าง
ส่วนต่อไปนี้จะแสดงตัวอย่างการค้นหาที่คุณเรียกใช้ใน 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;