หากต้องการแก้ปัญหาการนำส่งข้อความที่ล้มเหลวอย่างต่อเนื่อง ให้ใช้เครื่องมือแก้ปัญหาของ FCM และอ่านบล็อกโพสต์นี้ เพื่อทำความเข้าใจสาเหตุต่างๆ ที่คุณอาจไม่เห็นข้อความ นอกจากนี้ คุณยังไปที่แดชบอร์ดสถานะของ FCM เพื่อดูว่ามีบริการขัดข้องที่ส่งผลต่อ FCM หรือไม่
นอกจากนี้ FCM ยังมีชุดเครื่องมือ 3 ชุดที่จะช่วยให้คุณได้รับข้อมูลเชิงลึกเกี่ยวกับการประเมินความสำเร็จและกลยุทธ์การรับส่งข้อความในวงกว้าง ดังนี้
- Firebase รายงานการส่งข้อความในคอนโซล
- เมตริกการแสดงผล Android SDK แบบรวมจาก Firebase Cloud Messaging Data API
- การส่งออกข้อมูลที่ครอบคลุมไปยัง Google BigQuery
การส่งออกข้อมูล BigQuery และแท็บรายงานในFirebaseคอนโซลต้องมีGoogle Analyticsจึงจะทํางานได้ หากไม่ได้เปิดใช้ Google Analytics สำหรับโปรเจ็กต์ คุณสามารถตั้งค่าได้ในแท็บการผสานรวมของการตั้งค่าโปรเจ็กต์ Firebase ข้อมูลการนำส่งแบบรวมไม่จำเป็นต้องใช้ Google Analytics ในการทำงาน
โปรดทราบว่าการรายงานสถิติหลายรายการในหน้านี้ อาจล่าช้าได้สูงสุด 24 ชั่วโมงเนื่องจากการจัดกลุ่มข้อมูลวิเคราะห์
รายงานการส่งข้อความ
ในแท็บรายงาน ในคอนโซล Firebase คุณจะดูข้อมูลต่อไปนี้สำหรับข้อความที่ส่งไปยัง SDK ของ FCM ในแพลตฟอร์ม Android หรือ Apple ได้ รวมถึงข้อความที่ส่งผ่านเครื่องมือแต่งข้อความแจ้งและ API ของ FCM
- ส่งแล้ว - ระบบได้จัดคิวข้อความข้อมูลหรือข้อความแจ้งเตือนเพื่อ นำส่ง หรือส่งไปยังบริการของบุคคลที่สาม เช่น APNs เพื่อนำส่งเรียบร้อยแล้ว โปรดทราบว่าสถิติของ Sends อาจล่าช้า 2-3 ชั่วโมง ดูข้อมูลเพิ่มเติมได้ที่อายุของข้อความ
- ได้รับ (ใช้ได้เฉพาะในอุปกรณ์ Android) - แอปได้รับข้อความข้อมูลหรือข้อความแจ้งแล้ว ข้อมูลนี้จะใช้ได้เมื่ออุปกรณ์ Android ที่รับมีการติดตั้ง FCM SDK 18.0.1 ขึ้นไป
- การแสดงผล (ใช้ได้เฉพาะกับข้อความแจ้งเตือนในอุปกรณ์ Android) - การแจ้งเตือนแบบแสดงผลปรากฏในอุปกรณ์ขณะที่แอป ทำงานในเบื้องหลัง
- เปิด - ผู้ใช้เปิดข้อความแจ้งเตือน รายงานเฉพาะ การแจ้งเตือนที่ได้รับเมื่อแอปอยู่ในเบื้องหลัง
ข้อมูลนี้ใช้ได้กับข้อความทั้งหมดที่มีเพย์โหลดการแจ้งเตือน และข้อความข้อมูล ทั้งหมด ดูข้อมูลเพิ่มเติมเกี่ยวกับป้ายกำกับได้ที่การเพิ่มป้ายกำกับวิเคราะห์ลงในข้อความ
เมื่อดูรายงานข้อความ คุณจะตั้งค่าช่วงวันที่สำหรับข้อมูลที่แสดงได้ พร้อมตัวเลือกในการส่งออกเป็น CSV นอกจากนี้ คุณยังกรองตามเกณฑ์ต่อไปนี้ได้ด้วย
- แพลตฟอร์ม (iOS หรือ Android)
- แอป
- ป้ายกำกับข้อมูลวิเคราะห์ที่กำหนดเอง
การเพิ่มป้ายกำกับข้อมูลวิเคราะห์ในข้อความ
การติดป้ายกำกับข้อความมีประโยชน์อย่างยิ่งสำหรับการวิเคราะห์ที่กำหนดเอง ซึ่งช่วยให้คุณ
กรองสถิติการนำส่งตามป้ายกำกับหรือชุดป้ายกำกับได้ คุณเพิ่มป้ายกำกับให้กับข้อความที่ส่งผ่าน HTTP v1 API ได้โดยตั้งค่าฟิลด์ fcmOptions.analyticsLabel
ในออบเจ็กต์ข้อความ หรือในฟิลด์ AndroidFcmOptions
หรือ ApnsFcmOptions
ที่เฉพาะเจาะจงแพลตฟอร์ม
ป้ายกำกับข้อมูลวิเคราะห์คือสตริงข้อความในรูปแบบ ^[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
ข้อมูลแบ่งออกเป็นส่วนๆ อย่างไร
ข้อมูลการนำส่งจะแบ่งตามแอปพลิเคชัน วันที่ และป้ายกำกับ Analytics
การเรียก 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 (หรือขั้นตอนที่ 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 รองรับการส่งออกข้อมูลสําหรับทั้งการแจ้งเตือนและการแจ้งเตือนในเบื้องหลัง ก่อนที่จะเปิดใช้ตัวเลือกเหล่านี้ คุณต้องสร้าง FCMลิงก์ BigQuery สำหรับโปรเจ็กต์ก่อนตามที่อธิบายไว้ใน การส่งออกข้อมูล 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
ในออบเจ็กต์เพย์โหลด
เปิดใช้การส่งออกข้อมูลการนำส่งสำหรับการแจ้งเตือนในเบื้องหลัง
สำหรับข้อความเบื้องหลังที่ได้รับเมื่อแอปทำงานอยู่เบื้องหน้าหรือเบื้องหลัง คุณสามารถเรียกใช้ Data Export 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 | ลำดับความสำคัญของข้อความ ค่าที่ใช้ได้คือ "normal" และ "high" ใน iOS ค่าเหล่านี้จะสอดคล้องกับลำดับความสำคัญของ APNs ที่ 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;