การทำความเข้าใจการส่งข้อความ

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 เพื่อเริ่มต้นใช้งาน โดยทำดังนี้

  1. เลือกตัวเลือกใดตัวเลือกหนึ่งต่อไปนี้

    • เปิดการเขียนการแจ้งเตือน แล้วคลิกเข้าถึง BigQuery ที่ด้านล่างของหน้า

    • จากหน้าการผสานรวมในคอนโซล Firebase ให้คลิกลิงก์ในการ์ด BigQuery

      หน้านี้แสดงตัวเลือกการส่งออก FCM สำหรับแอปที่เปิดใช้ FCM ทั้งหมดในโปรเจ็กต์

  2. ทำตามวิธีการบนหน้าจอเพื่อเปิดใช้ BigQuery

โปรดดูข้อมูลเพิ่มเติมที่ลิงก์ Firebase กับ BigQuery

เมื่อเปิดใช้การส่งออก BigQuery สำหรับ Cloud Messaging จะมีผลดังนี้

  • Firebase จะส่งออกข้อมูลไปยัง BigQuery โปรดทราบว่าการเผยแพร่ข้อมูลครั้งแรกเพื่อส่งออกอาจใช้เวลาถึง 48 ชั่วโมงจึงจะเสร็จสมบูรณ์

  • หลังจากที่สร้างชุดข้อมูลแล้ว คุณจะเปลี่ยนแปลงตำแหน่งไม่ได้ แต่จะคัดลอกชุดข้อมูลไปยังตำแหน่งอื่นหรือย้าย (สร้างใหม่) ชุดข้อมูลไปยังตำแหน่งอื่นด้วยตนเองได้ ดูข้อมูลเพิ่มเติมได้ที่เปลี่ยนตำแหน่งชุดข้อมูล

  • 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 ประเภทของเหตุการณ์ ค่าที่เป็นไปได้มีดังนี้
  • MESSAGE_ACCEPTED: เซิร์ฟเวอร์ FCM ได้รับข้อความแล้ว และคำขอถูกต้อง
  • MESSAGE_DELIVERED: ข้อความถูกส่งไปยัง FCM SDK ของแอปในอุปกรณ์แล้ว ช่องนี้จะไม่มีการเผยแพร่โดยค่าเริ่มต้น หากต้องการเปิดใช้ ให้ทำตามวิธีการที่ระบุไว้ใน setDeliveryMetricsExportToBigQuery(boolean)
  • MISSING_REGISTRATIONS: คำขอถูกปฏิเสธเนื่องจากไม่มีการจดทะเบียน
  • UNAUTHORIZED_REGISTRATION: ข้อความถูกปฏิเสธเนื่องจากผู้ส่งไม่ได้รับอนุญาตให้ส่งไปยังการลงทะเบียน
  • MESSAGE_RECEIVED_INTERNAL_ERROR: เกิดข้อผิดพลาดที่ไม่ระบุเมื่อประมวลผลคำขอข้อความ
  • MISMATCH_SENDER_ID: คำขอส่งข้อความถูกปฏิเสธเนื่องจากรหัสผู้ส่งที่ส่งข้อความไม่ตรงกับรหัสที่ประกาศสำหรับปลายทาง
  • QUOTA_EXCEEDED: คำขอส่งข้อความถูกปฏิเสธเนื่องจากโควต้าไม่เพียงพอ
  • INVALID_REGISTRATION: คำขอส่งข้อความถูกปฏิเสธเนื่องจากการลงทะเบียนไม่ถูกต้อง
  • INVALID_PACKAGE_NAME: คำขอส่งข้อความถูกปฏิเสธเนื่องจากชื่อแพ็กเกจไม่ถูกต้อง
  • INVALID_APNS_CREDENTIAL: คำขอส่งข้อความถูกปฏิเสธเนื่องจากใบรับรอง APNS ไม่ถูกต้อง
  • INVALID_PARAMETERS: คำขอส่งข้อความถูกปฏิเสธเนื่องจากพารามิเตอร์ไม่ถูกต้อง
  • PAYLOAD_TOO_LARGE: คำขอส่งข้อความถูกปฏิเสธเนื่องจากมีเพย์โหลดเกินขีดจำกัด
  • AUTHENTICATION_ERROR: คำขอส่งข้อความถูกปฏิเสธเนื่องจากเกิดข้อผิดพลาดในการตรวจสอบสิทธิ์ (ตรวจสอบคีย์ API ที่ใช้ส่งข้อความ)
  • INVALID_TTL: คำขอส่งข้อความถูกปฏิเสธเนื่องจาก TTL ไม่ถูกต้อง
ป้ายกำกับ 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;