درک تحویل پیام

برای عیب‌یابی خرابی‌های ارسال پیام در حال انجام، از عیب‌یاب FCM استفاده کنید و این پست وبلاگ را ببینید تا دلایل مختلفی که ممکن است پیام خود را نمی‌بینید درک کنید. همچنین می‌توانید از داشبورد وضعیت FCM دیدن کنید تا تشخیص دهید که آیا اختلالات مداوم سرویس بر FCM تأثیر می‌گذارد یا خیر.

FCM همچنین سه مجموعه از ابزارها را برای کمک به شما در ارزیابی کلی موفقیت و استراتژی پیام‌رسانی ارائه می‌کند:

  • گزارش های تحویل پیام کنسول Firebase
  • سنجه‌های تحویل Android SDK انبوه از Firebase Cloud Messaging Data API
  • صادرات جامع داده به Google BigQuery

ابزارهای گزارش‌دهی که در این صفحه توضیح داده شده‌اند، همگی برای عملکرد به Google Analytics نیاز دارند. اگر Google Analytics برای پروژه شما فعال نیست، می توانید آن را در تب ادغام تنظیمات پروژه Firebase خود تنظیم کنید.

به خاطر داشته باشید که گزارش بسیاری از آمارهای موجود در این صفحه به دلیل دسته‌بندی داده‌های تحلیلی تا 24 ساعت با تاخیر مواجه می‌شوند.

گزارش های تحویل پیام

در برگه گزارش‌ها در کنسول Firebase ، می‌توانید داده‌های زیر را برای پیام‌های ارسال شده به کیت‌های توسعه نرم‌افزاری FCM پلتفرم Android یا Apple، از جمله پیام‌هایی که از طریق سازنده Notifications و APIهای FCM ارسال می‌شوند، مشاهده کنید:

  • ارسال می کند - پیام داده یا پیام اعلان برای تحویل در نوبت قرار گرفته است یا با موفقیت به یک سرویس شخص ثالث مانند APN ها برای تحویل ارسال شده است. برای اطلاعات بیشتر، طول عمر یک پیام را ببینید.
  • دریافت شده (فقط در دستگاه های Android موجود است) - پیام داده یا پیام اعلان توسط برنامه دریافت شده است. این داده‌ها زمانی در دسترس هستند که دستگاه Android دریافت‌کننده FCM SDK 18.0.1 یا بالاتر را نصب کرده باشد.
  • Impressions (فقط برای پیام‌های اعلان در دستگاه‌های Android موجود است) - در حالی که برنامه در پس‌زمینه است، اعلان نمایش روی دستگاه نمایش داده می‌شود.
  • باز می شود - کاربر پیام اعلان را باز کرد. فقط برای اعلان‌های دریافتی زمانی که برنامه در پس‌زمینه است، گزارش می‌شود.

این داده برای همه پیام‌های دارای بار اعلان و همه پیام‌های داده برچسب‌دار در دسترس است. برای کسب اطلاعات بیشتر درباره برچسب‌ها، به افزودن برچسب‌های تحلیلی به پیام‌ها مراجعه کنید.

هنگام مشاهده گزارش‌های پیام، می‌توانید محدوده تاریخ را برای داده‌های نمایش داده شده با گزینه صادرات به CSV تنظیم کنید. همچنین می توانید با این معیارها فیلتر کنید:

  • پلتفرم (iOS یا Android)
  • برنامه
  • برچسب های تجزیه و تحلیل سفارشی

افزودن برچسب های تحلیلی به پیام ها

برچسب گذاری پیام ها برای تجزیه و تحلیل سفارشی بسیار مفید است و به شما امکان می دهد آمار تحویل را بر اساس برچسب ها یا مجموعه ای از برچسب ها فیلتر کنید. می توانید با تنظیم فیلد fcmOptions.analyticsLabel در شیء پیام یا در فیلدهای AndroidFcmOptions یا ApnsFcmOptions مخصوص پلتفرم، به هر پیام ارسال شده از طریق API HTTP v1 یک برچسب اضافه کنید.

برچسب‌های تجزیه و تحلیل رشته‌های متنی با قالب ^[a-zA-Z0-9-_.~%]{1,50}$ هستند. برچسب ها می توانند شامل حروف کوچک و بزرگ، اعداد و نمادهای زیر باشند:

  • -
  • ~
  • %

حداکثر طول 50 کاراکتر است. شما می توانید تا 100 برچسب منحصر به فرد در روز را مشخص کنید. پیام‌هایی با برچسب‌هایی که بیش از این حد اضافه شده گزارش نمی‌شوند.

در برگه گزارش‌های پیام‌رسانی کنسول Firebase ، می‌توانید فهرستی از تمام برچسب‌های موجود را جستجو کنید و آنها را به‌صورت جداگانه یا ترکیبی برای فیلتر کردن آمار نمایش داده شده اعمال کنید.

جمع آوری داده های تحویل از طریق FCM Data API

Firebase Cloud Messaging Data به شما امکان می‌دهد اطلاعاتی را بازیابی کنید که می‌تواند به شما در درک نتایج درخواست‌های پیام هدف‌گذاری شده برای برنامه‌های Android کمک کند. API داده‌های جمع‌آوری شده را در تمام دستگاه‌های Android با قابلیت جمع‌آوری داده در یک پروژه فراهم می‌کند. این شامل جزئیات درصد پیام‌های ارسال شده بدون تأخیر و همچنین تعداد پیام‌هایی است که در لایه انتقال Android با تأخیر یا حذف شده‌اند. ارزیابی این داده ها می تواند روندهای گسترده ای را در تحویل پیام آشکار کند و به شما کمک کند راه های موثری برای بهبود عملکرد درخواست های ارسال خود پیدا کنید. جدول‌های زمانی داده‌های انبوه را برای اطلاعات در مورد در دسترس بودن محدوده تاریخ در گزارش‌ها ببینید.

API تمام داده های موجود برای یک برنامه خاص را ارائه می دهد. به مستندات مرجع API مراجعه کنید.

چگونه داده ها تجزیه می شوند؟

داده های تحویل بر اساس برنامه، تاریخ و برچسب تجزیه و تحلیل تقسیم می شوند. تماس با 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 ارائه می‌دهند. این به ویژه برای نشان دادن روندهایی که چرا پیام ها در طول این حمل و نقل به تأخیر افتاده یا حذف شده اند مفید است.

در برخی موارد، ممکن است این دو مجموعه داده به دلیل موارد زیر دقیقاً مطابقت نداشته باشند:

  • معیارهای جمع‌آوری شده تنها بخشی از همه پیام‌ها را نمونه‌برداری می‌کنند
  • معیارهای جمع آوری گرد شده است
  • ما معیارهایی را زیر آستانه حریم خصوصی ارائه نمی کنیم
  • بخشی از پیامدهای پیام به دلیل بهینه‌سازی‌هایی که در نحوه مدیریت حجم زیادی از ترافیک انجام می‌شود وجود ندارد.

محدودیت های API

جدول زمانی داده های جمعی

API داده های تاریخی 7 روزه را برمی گرداند. با این حال، داده های بازگردانده شده توسط این API تا 5 روز به تاخیر می افتد. به عنوان مثال، در 20 ژانویه، داده های مربوط به 9 ژانویه تا 15 ژانویه در دسترس خواهد بود، اما نه برای 16 ژانویه یا بعد از آن. علاوه بر این، داده ها در بهترین تلاش ارائه می شوند. در صورت قطع اطلاعات، FCM برای رفع مشکل کار می کند و پس از رفع مشکل، داده ها را پر نمی کند. در قطعی های بزرگتر، داده ها ممکن است برای یک هفته یا بیشتر در دسترس نباشند.

پوشش داده ها

معیارهای ارائه شده توسط Firebase Cloud Messaging Data API به منظور ارائه بینشی در مورد روندهای گسترده تحویل پیام است. با این حال، آنها پوشش 100٪ همه سناریوهای پیام را ارائه نمی دهند. سناریوهای زیر نتایج شناخته شده ای هستند که در معیارها منعکس نشده اند.

پیام های منقضی شده

اگر زمان زندگی (TTL) پس از پایان تاریخ ثبت داده شده منقضی شود، پیام در این تاریخ به عنوان droppedTtlExpired محاسبه نخواهد شد.

پیام به دستگاه های غیرفعال

پیام‌های ارسال شده به دستگاه‌های غیرفعال ممکن است بسته به مسیر داده‌ای که طی می‌کنند، در مجموعه داده نشان داده شوند یا نشوند. این می تواند منجر به شمارش اشتباه در فیلدهای droppedDeviceInactive و pending .

پیام‌هایی به دستگاه‌هایی با تنظیمات خاص کاربر

کاربرانی که جمع‌آوری اطلاعات استفاده و تشخیصی را در دستگاه‌های خود غیرفعال کرده‌اند، با توجه به اولویت‌هایشان، پیام‌هایشان در شمارش ما لحاظ نخواهد شد.

گرد کردن و حداقل ها

FCM عمداً شمارش هایی را که حجم ها به اندازه کافی بزرگ نیستند، گرد می کند و حذف می کند.

صادرات داده BigQuery

می توانید داده های پیام خود را برای تجزیه و تحلیل بیشتر به BigQuery صادر کنید. BigQuery به شما امکان می‌دهد داده‌ها را با استفاده از BigQuery SQL تجزیه و تحلیل کنید، آن‌ها را به ارائه‌دهنده ابری دیگر صادر کنید یا از داده‌ها برای مدل‌های ML سفارشی خود استفاده کنید. صادرات به BigQuery شامل تمام داده‌های موجود برای پیام‌ها، صرف‌نظر از نوع پیام یا ارسال پیام از طریق API یا سازنده Notifications است.

برای پیام‌هایی که به دستگاه‌هایی با حداقل نسخه FCM SDK زیر ارسال می‌شوند، گزینه دیگری برای فعال کردن صادرات داده‌های تحویل پیام برای برنامه خود دارید:

  • اندروید 20.1.0 یا بالاتر.
  • iOS 8.6.0 یا بالاتر
  • Firebase Web SDK 9.0.0 یا بالاتر

برای جزئیات بیشتر در مورد فعال کردن صادرات داده برای Android و iOS به زیر مراجعه کنید.

برای شروع، پروژه خود را به BigQuery پیوند دهید:

  1. یکی از گزینه های زیر را انتخاب کنید:

    • Notifications composer را باز کنید، سپس روی Access BigQuery در پایین صفحه کلیک کنید.

    • از صفحه ادغام در کنسول Firebase ، روی پیوند در کارت BigQuery کلیک کنید.

      این صفحه گزینه های صادرات FCM را برای همه برنامه های دارای FCM فعال در پروژه نمایش می دهد.

  2. دستورالعمل های روی صفحه را برای فعال کردن BigQuery دنبال کنید.

برای اطلاعات بیشتر به لینک Firebase به BigQuery مراجعه کنید.

وقتی صادرات BigQuery را برای Cloud Messaging فعال می‌کنید:

  • Firebase داده های شما را به BigQuery صادر می کند. توجه داشته باشید که انتشار اولیه داده برای صادرات ممکن است تا 48 ساعت طول بکشد.

  • پس از ایجاد مجموعه داده، مکان را نمی توان تغییر داد، اما می توانید مجموعه داده را در مکان دیگری کپی کنید یا به صورت دستی مجموعه داده را در مکان دیگری منتقل کنید (بازآفرینی کنید). برای کسب اطلاعات بیشتر، به تغییر مکان مجموعه داده مراجعه کنید.

  • Firebase همگام‌سازی منظم داده‌های شما را از پروژه Firebase با BigQuery تنظیم می‌کند. این عملیات صادرات روزانه از ساعت 4:00 صبح به وقت اقیانوس آرام آغاز می شود و معمولاً در 24 ساعت به پایان می رسد.

  • به‌طور پیش‌فرض، همه برنامه‌های پروژه شما به BigQuery مرتبط می‌شوند و هر برنامه‌ای که بعداً به پروژه اضافه می‌کنید به‌طور خودکار به BigQuery مرتبط می‌شود. می‌توانید مدیریت کنید که کدام برنامه‌ها داده‌ها را ارسال می‌کنند .

برای غیرفعال کردن صادرات BigQuery ، پیوند پروژه خود را در کنسول Firebase لغو کنید.

فعال کردن صادرات داده های تحویل پیام

دستگاه‌های Android با FCM SDK 20.1.0 یا بالاتر می‌توانند صادرات داده تحویل پیام برنامه خود را فعال کنند. صادرات داده به طور پیش فرض در سطح برنامه غیرفعال است. فعال کردن آن به صورت برنامه‌ای در سطح نمونه برنامه به شما امکان می‌دهد از کاربران نهایی برای تجزیه و تحلیل داده‌های تحویل پیام خود اجازه بخواهید (توصیه می‌شود). در جایی که هر دو تنظیم شده اند، مقدار سطح نمونه برنامه بر مقدار سطح برنامه لغو می شود.

قبل از فعال کردن این گزینه ها، ابتدا باید پیوند FCM -BiqQuery را برای پروژه خود همانطور که در صادرات داده BigQuery توضیح داده شده است ایجاد کنید.

فعال کردن صادرات داده های تحویل برای نمونه های برنامه

در بیشتر موارد، توصیه می‌کنیم که صادرات داده‌های تحویل پیام را فقط در سطح نمونه برنامه فعال کنید و آن را در سطح برنامه غیرفعال کنید.

 FirebaseMessaging.getInstance().setDeliveryMetricsExportToBigQuery(true)

فعال کردن صادرات داده های تحویل برای یک برنامه

اگر ترجیح می دهید صادرات را در سطح برنامه فعال کنید، مطمئن شوید که متد setDeliveryMetricsExportToBigQuery فراخوانی نکنید و ویژگی زیر را به شی برنامه در مانیفست برنامه خود اضافه کنید:

<application>
  <meta-data android:name="delivery_metrics_exported_to_big_query_enabled"
      android:value="true" />
</application>

چه داده هایی به BigQuery صادر می شود؟

توجه داشته باشید که هدف قرار دادن توکن های قدیمی یا ثبت نام های غیرفعال ممکن است برخی از این آمارها را افزایش دهد.

طرح جدول صادر شده به صورت زیر است:

_PARTITIONTIME TIMESTAMP این شبه ستون حاوی یک مهر زمانی برای شروع روز (به UTC) است که در آن داده ها بارگیری شده است. برای پارتیشن YYYYMMDD، این ستون شبه حاوی مقدار TIMESTAMP ('YYYY-MM-DD') است.
رویداد_زمان مهر TIMESTAMP مهر زمانی رویداد همانطور که توسط سرور ثبت شده است
پروژه_شماره عدد صحیح شماره پروژه نشان دهنده پروژه ای است که پیام را ارسال کرده است
message_id STRING شناسه پیام یک پیام را مشخص می کند. شناسه پیام که از روی شناسه برنامه و مُهر زمانی ایجاد می‌شود، ممکن است در برخی موارد منحصربه‌فرد نباشد.
instance_id STRING شناسه منحصر به فرد برنامه ای که پیام به آن ارسال می شود (در صورت موجود بودن). این می تواند یک ID نمونه یا یک شناسه نصب Firebase باشد.
پیام_نوع STRING نوع پیام. می تواند پیام اعلان یا پیام داده باشد. موضوع برای شناسایی پیام اصلی برای ارسال موضوع یا کمپین استفاده می شود. پیام های بعدی یا یک اعلان یا پیام داده است.
sdk_platform STRING پلت فرم برنامه گیرنده
نام_برنامه STRING نام بسته برای برنامه‌های Android یا شناسه بسته برای برنامه‌های iOS
collapse_key STRING کلید collapse گروهی از پیام‌های قابل جمع کردن را شناسایی می‌کند. هنگامی که دستگاهی متصل نیست، فقط آخرین پیام با یک کلید کوچک کردن داده شده برای تحویل نهایی در صف قرار می‌گیرد.
اولویت عدد صحیح اولویت پیام. مقادیر معتبر «نرمال» و «بالا» هستند. در iOS، اینها با اولویت های APN 5 و 10 مطابقت دارند
ttl عدد صحیح این پارامتر مشخص می کند که در صورت آفلاین بودن دستگاه، چه مدت (بر حسب ثانیه) پیام باید در فضای ذخیره سازی FCM نگهداری شود.
موضوع STRING نام موضوعی که پیام به آن ارسال شده است (در صورت لزوم)
bulk_id عدد صحیح شناسه انبوه گروهی از پیام‌های مرتبط را شناسایی می‌کند، مانند ارسال خاص به یک موضوع
رویداد 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 ، برچسب تجزیه و تحلیل را می توان هنگام ارسال پیام تنظیم کرد تا پیام را برای اهداف تجزیه و تحلیل علامت گذاری کند.

با داده های صادر شده چه کاری می توانید انجام دهید؟

بخش‌های زیر نمونه‌هایی از پرس‌وجوها را ارائه می‌دهند که می‌توانید در 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;
  
،

برای عیب‌یابی خرابی‌های ارسال پیام در حال انجام، از عیب‌یاب FCM استفاده کنید و این پست وبلاگ را ببینید تا دلایل مختلفی که ممکن است پیام خود را نمی‌بینید درک کنید. همچنین می‌توانید از داشبورد وضعیت FCM دیدن کنید تا تشخیص دهید که آیا اختلالات مداوم سرویس بر FCM تأثیر می‌گذارد یا خیر.

FCM همچنین سه مجموعه از ابزارها را برای کمک به شما در ارزیابی کلی موفقیت و استراتژی پیام‌رسانی ارائه می‌کند:

  • گزارش های تحویل پیام کنسول Firebase
  • سنجه‌های تحویل Android SDK انبوه از Firebase Cloud Messaging Data API
  • صادرات جامع داده به Google BigQuery

ابزارهای گزارش‌دهی که در این صفحه توضیح داده شده‌اند، همگی برای عملکرد به Google Analytics نیاز دارند. اگر Google Analytics برای پروژه شما فعال نیست، می توانید آن را در تب ادغام تنظیمات پروژه Firebase خود تنظیم کنید.

به خاطر داشته باشید که گزارش بسیاری از آمارهای موجود در این صفحه به دلیل دسته‌بندی داده‌های تحلیلی تا 24 ساعت با تاخیر مواجه می‌شوند.

گزارش های تحویل پیام

در برگه گزارش‌ها در کنسول Firebase ، می‌توانید داده‌های زیر را برای پیام‌های ارسال شده به کیت‌های توسعه نرم‌افزاری FCM پلتفرم Android یا Apple، از جمله پیام‌هایی که از طریق سازنده Notifications و APIهای FCM ارسال می‌شوند، مشاهده کنید:

  • ارسال می کند - پیام داده یا پیام اعلان برای تحویل در نوبت قرار گرفته است یا با موفقیت به یک سرویس شخص ثالث مانند APN ها برای تحویل ارسال شده است. برای اطلاعات بیشتر، طول عمر یک پیام را ببینید.
  • دریافت شده (فقط در دستگاه های Android موجود است) - پیام داده یا پیام اعلان توسط برنامه دریافت شده است. این داده‌ها زمانی در دسترس هستند که دستگاه Android دریافت‌کننده FCM SDK 18.0.1 یا بالاتر را نصب کرده باشد.
  • Impressions (فقط برای پیام‌های اعلان در دستگاه‌های Android موجود است) - در حالی که برنامه در پس‌زمینه است، اعلان نمایش روی دستگاه نمایش داده می‌شود.
  • باز می شود - کاربر پیام اعلان را باز کرد. فقط برای اعلان‌های دریافتی زمانی که برنامه در پس‌زمینه است، گزارش می‌شود.

این داده برای همه پیام‌های دارای بار اعلان و همه پیام‌های داده برچسب‌دار در دسترس است. برای کسب اطلاعات بیشتر درباره برچسب‌ها، به افزودن برچسب‌های تحلیلی به پیام‌ها مراجعه کنید.

هنگام مشاهده گزارش‌های پیام، می‌توانید محدوده تاریخ را برای داده‌های نمایش داده شده با گزینه صادرات به CSV تنظیم کنید. همچنین می توانید با این معیارها فیلتر کنید:

  • پلتفرم (iOS یا Android)
  • برنامه
  • برچسب های تجزیه و تحلیل سفارشی

افزودن برچسب های تحلیلی به پیام ها

برچسب گذاری پیام ها برای تجزیه و تحلیل سفارشی بسیار مفید است و به شما امکان می دهد آمار تحویل را بر اساس برچسب ها یا مجموعه ای از برچسب ها فیلتر کنید. می توانید با تنظیم فیلد fcmOptions.analyticsLabel در شیء پیام یا در فیلدهای AndroidFcmOptions یا ApnsFcmOptions مخصوص پلتفرم، به هر پیام ارسال شده از طریق API HTTP v1 یک برچسب اضافه کنید.

برچسب‌های تجزیه و تحلیل رشته‌های متنی با قالب ^[a-zA-Z0-9-_.~%]{1,50}$ هستند. برچسب ها می توانند شامل حروف کوچک و بزرگ، اعداد و نمادهای زیر باشند:

  • -
  • ~
  • %

حداکثر طول 50 کاراکتر است. شما می توانید تا 100 برچسب منحصر به فرد در روز را مشخص کنید. پیام‌هایی با برچسب‌هایی که بیش از این حد اضافه شده گزارش نمی‌شوند.

در برگه گزارش‌های پیام‌رسانی کنسول Firebase ، می‌توانید فهرستی از تمام برچسب‌های موجود را جستجو کنید و آنها را به‌صورت جداگانه یا ترکیبی برای فیلتر کردن آمار نمایش داده شده اعمال کنید.

جمع آوری داده های تحویل از طریق FCM Data API

Firebase Cloud Messaging Data به شما امکان می‌دهد اطلاعاتی را بازیابی کنید که می‌تواند به شما در درک نتایج درخواست‌های پیام هدف‌گذاری شده برای برنامه‌های Android کمک کند. API داده‌های جمع‌آوری شده را در تمام دستگاه‌های Android با قابلیت جمع‌آوری داده در یک پروژه فراهم می‌کند. این شامل جزئیات درصد پیام‌های ارسال شده بدون تأخیر و همچنین تعداد پیام‌هایی است که در لایه انتقال Android با تأخیر یا حذف شده‌اند. ارزیابی این داده ها می تواند روندهای گسترده ای را در تحویل پیام آشکار کند و به شما کمک کند راه های موثری برای بهبود عملکرد درخواست های ارسال خود پیدا کنید. جدول‌های زمانی داده‌های انبوه را برای اطلاعات در مورد در دسترس بودن محدوده تاریخ در گزارش‌ها ببینید.

API تمام داده های موجود برای یک برنامه خاص را ارائه می دهد. به مستندات مرجع API مراجعه کنید.

چگونه داده ها تجزیه می شوند؟

داده های تحویل بر اساس برنامه، تاریخ و برچسب تجزیه و تحلیل تقسیم می شوند. تماس با 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 ارائه می‌دهند. این به ویژه برای نشان دادن روندهایی که چرا پیام ها در طول این حمل و نقل به تأخیر افتاده یا حذف شده اند مفید است.

در برخی موارد، ممکن است این دو مجموعه داده به دلیل موارد زیر دقیقاً مطابقت نداشته باشند:

  • معیارهای جمع‌آوری شده تنها بخشی از همه پیام‌ها را نمونه‌برداری می‌کنند
  • معیارهای جمع آوری گرد شده است
  • ما معیارهایی را زیر آستانه حریم خصوصی ارائه نمی کنیم
  • بخشی از پیامدهای پیام به دلیل بهینه‌سازی‌هایی که در نحوه مدیریت حجم زیادی از ترافیک انجام می‌شود وجود ندارد.

محدودیت های API

جدول زمانی داده های جمعی

API داده های تاریخی 7 روزه را برمی گرداند. با این حال، داده های بازگردانده شده توسط این API تا 5 روز به تاخیر می افتد. به عنوان مثال، در 20 ژانویه، داده های مربوط به 9 ژانویه تا 15 ژانویه در دسترس خواهد بود، اما نه برای 16 ژانویه یا بعد از آن. علاوه بر این، داده ها در بهترین تلاش ارائه می شوند. در صورت قطع اطلاعات، FCM برای رفع مشکل کار می کند و پس از رفع مشکل، داده ها را پر نمی کند. در قطعی های بزرگتر، داده ها ممکن است برای یک هفته یا بیشتر در دسترس نباشند.

پوشش داده ها

معیارهای ارائه شده توسط Firebase Cloud Messaging Data API به منظور ارائه بینشی در مورد روندهای گسترده تحویل پیام است. با این حال، آنها پوشش 100٪ همه سناریوهای پیام را ارائه نمی دهند. سناریوهای زیر نتایج شناخته شده ای هستند که در معیارها منعکس نشده اند.

پیام های منقضی شده

اگر زمان زندگی (TTL) پس از پایان تاریخ ثبت داده شده منقضی شود، پیام در این تاریخ به عنوان droppedTtlExpired محاسبه نخواهد شد.

پیام به دستگاه های غیرفعال

پیام‌های ارسال شده به دستگاه‌های غیرفعال ممکن است بسته به مسیر داده‌ای که طی می‌کنند، در مجموعه داده نشان داده شوند یا نشوند. این می تواند منجر به شمارش اشتباه در فیلدهای droppedDeviceInactive و pending .

پیام‌هایی به دستگاه‌هایی با تنظیمات خاص کاربر

کاربرانی که جمع‌آوری اطلاعات استفاده و تشخیصی را در دستگاه‌های خود غیرفعال کرده‌اند، با توجه به اولویت‌هایشان، پیام‌هایشان در شمارش ما لحاظ نخواهد شد.

گرد کردن و حداقل ها

FCM عمداً شمارش هایی را که حجم ها به اندازه کافی بزرگ نیستند، گرد می کند و حذف می کند.

صادرات داده BigQuery

می توانید داده های پیام خود را برای تجزیه و تحلیل بیشتر به BigQuery صادر کنید. BigQuery به شما امکان می‌دهد داده‌ها را با استفاده از BigQuery SQL تجزیه و تحلیل کنید، آن‌ها را به ارائه‌دهنده ابری دیگر صادر کنید یا از داده‌ها برای مدل‌های ML سفارشی خود استفاده کنید. صادرات به BigQuery شامل تمام داده‌های موجود برای پیام‌ها، صرف‌نظر از نوع پیام یا ارسال پیام از طریق API یا سازنده Notifications است.

برای پیام‌هایی که به دستگاه‌هایی با حداقل نسخه FCM SDK زیر ارسال می‌شوند، گزینه دیگری برای فعال کردن صادرات داده‌های تحویل پیام برای برنامه خود دارید:

  • اندروید 20.1.0 یا بالاتر.
  • iOS 8.6.0 یا بالاتر
  • Firebase Web SDK 9.0.0 یا بالاتر

برای جزئیات بیشتر در مورد فعال کردن صادرات داده برای Android و iOS به زیر مراجعه کنید.

برای شروع، پروژه خود را به BigQuery پیوند دهید:

  1. یکی از گزینه های زیر را انتخاب کنید:

    • Notifications composer را باز کنید، سپس روی Access BigQuery در پایین صفحه کلیک کنید.

    • از صفحه ادغام در کنسول Firebase ، روی پیوند در کارت BigQuery کلیک کنید.

      این صفحه گزینه های صادرات FCM را برای همه برنامه های دارای FCM فعال در پروژه نمایش می دهد.

  2. دستورالعمل های روی صفحه را برای فعال کردن BigQuery دنبال کنید.

برای اطلاعات بیشتر به لینک Firebase به BigQuery مراجعه کنید.

وقتی صادرات BigQuery را برای Cloud Messaging فعال می‌کنید:

  • Firebase داده های شما را به BigQuery صادر می کند. توجه داشته باشید که انتشار اولیه داده برای صادرات ممکن است تا 48 ساعت طول بکشد.

  • پس از ایجاد مجموعه داده، مکان را نمی توان تغییر داد، اما می توانید مجموعه داده را در مکان دیگری کپی کنید یا به صورت دستی مجموعه داده را در مکان دیگری منتقل کنید (بازآفرینی کنید). برای کسب اطلاعات بیشتر، به تغییر مکان مجموعه داده مراجعه کنید.

  • Firebase همگام‌سازی منظم داده‌های شما را از پروژه Firebase با BigQuery تنظیم می‌کند. این عملیات صادرات روزانه از ساعت 4:00 صبح به وقت اقیانوس آرام آغاز می شود و معمولاً در 24 ساعت به پایان می رسد.

  • به‌طور پیش‌فرض، همه برنامه‌های پروژه شما به BigQuery مرتبط می‌شوند و هر برنامه‌ای که بعداً به پروژه اضافه می‌کنید به‌طور خودکار به BigQuery مرتبط می‌شود. می‌توانید مدیریت کنید که کدام برنامه‌ها داده‌ها را ارسال می‌کنند .

برای غیرفعال کردن صادرات BigQuery ، پیوند پروژه خود را در کنسول Firebase لغو کنید.

فعال کردن صادرات داده های تحویل پیام

دستگاه‌های Android با FCM SDK 20.1.0 یا بالاتر می‌توانند صادرات داده تحویل پیام برنامه خود را فعال کنند. صادرات داده به طور پیش فرض در سطح برنامه غیرفعال است. فعال کردن آن به صورت برنامه‌ای در سطح نمونه برنامه به شما امکان می‌دهد از کاربران نهایی برای تجزیه و تحلیل داده‌های تحویل پیام خود اجازه بخواهید (توصیه می‌شود). در جایی که هر دو تنظیم شده اند، مقدار سطح نمونه برنامه بر مقدار سطح برنامه لغو می شود.

قبل از فعال کردن این گزینه ها، ابتدا باید پیوند FCM -BiqQuery را برای پروژه خود همانطور که در صادرات داده BigQuery توضیح داده شده است ایجاد کنید.

فعال کردن صادرات داده های تحویل برای نمونه های برنامه

در بیشتر موارد ، ما توصیه می کنیم که داده های تحویل پیام را فقط در سطح نمونه برنامه فعال کنید و آن را در سطح برنامه غیرفعال کنید.

 FirebaseMessaging.getInstance().setDeliveryMetricsExportToBigQuery(true)

صادرات داده های تحویل را برای یک برنامه فعال کنید

اگر ترجیح می دهید صادرات را در سطح برنامه فعال کنید ، حتماً با روش setDeliveryMetricsExportToBigQuery تماس نگیرید و ویژگی زیر را به شیء برنامه در برنامه خود اضافه کنید:

<application>
  <meta-data android:name="delivery_metrics_exported_to_big_query_enabled"
      android:value="true" />
</application>

چه داده هایی به BigQuery صادر می شود؟

توجه داشته باشید که هدف قرار دادن نشانه های بی نظیر یا ثبت نام های غیرفعال ممکن است برخی از این آمار را باد کند.

طرح جدول صادر شده:

_PARTITIONTIME TIMESTAMP این ستون شبه حاوی یک جدول زمانی برای شروع روز (در UTC) است که در آن داده ها بارگیری شده است. برای پارتیشن yyyymmdd ، این ستون شبه حاوی جدول زمانی ارزش ("yyyy-mm-dd") است.
Event_timestamp TIMESTAMP Timestamp رویداد همانطور که توسط سرور ثبت شده است
project_number عدد صحیح شماره پروژه پروژه ای را که پیام ارسال کرده است مشخص می کند
پیام_ ID STRING شناسه پیام یک پیام را مشخص می کند. تولید شده از شناسه برنامه و Timestamp ، شناسه پیام ممکن است در بعضی موارد در سطح جهانی بی نظیر نباشد.
نمونه_ id STRING شناسه منحصر به فرد برنامه ای که پیام به آن ارسال می شود (در صورت وجود). این می تواند یک شناسه نمونه یا شناسه نصب Firebase باشد.
پیام_ پیام STRING نوع پیام می تواند پیام اعلان یا پیام داده باشد. موضوع برای شناسایی پیام اصلی برای ارسال موضوع یا کمپین استفاده می شود. پیام های بعدی یا یک اعلان یا پیام داده است.
sdk_platform STRING بستر برنامه گیرنده
نام_برنامه STRING نام بسته برنامه های Android یا شناسه بسته نرم افزاری برای برنامه های iOS
فروپاشی_ کلید STRING کلید فروپاشی گروهی از پیام هایی را که می توانند فرو ریخته باشند ، شناسایی می کند. هنگامی که یک دستگاه به هم وصل نشده است ، فقط آخرین پیام با کلید فروپاشی داده شده برای تحویل نهایی صف می شود
اولویت عدد صحیح اولویت پیام. مقادیر معتبر "طبیعی" و "بالا" هستند. در iOS ، اینها با اولویت های APNS 5 و 10 مطابقت دارد
ttl عدد صحیح این پارامتر مشخص می کند که اگر دستگاه آفلاین باشد ، پیام (در ثانیه) باید در ذخیره سازی FCM نگه داشته شود
موضوع STRING نام موضوعی که پیام به آن ارسال شده است (در صورت کاربرد)
bulk_id عدد صحیح شناسه فله گروهی از پیام های مرتبط ، مانند ارسال خاص به یک موضوع را مشخص می کند
رویداد STRING نوع رویداد مقادیر ممکن عبارتند از:
  • MESSIP_ACCEPTED: پیام توسط سرور FCM دریافت شده و درخواست معتبر است.
  • Message_Delivered: این پیام به FCM SDK برنامه در دستگاه تحویل داده شده است. به طور پیش فرض ، این زمینه پخش نمی شود. برای فعال کردن ، دستورالعمل های ارائه شده در setDeliveryMetricsExportToBigQuery(boolean) را دنبال کنید.
  • Mission_Registrations: این درخواست به دلیل ثبت نام مفقود شده رد شد.
  • غیرمجاز_ ثبت نام: پیام رد شد زیرا فرستنده مجاز به ارسال به ثبت نام نیست.
  • message_received_internal_error: هنگام پردازش درخواست پیام ، خطای نامشخصی وجود داشت.
  • MISTATCH_SENDER_ID: درخواست ارسال پیام به دلیل عدم تطابق بین شناسه فرستنده ارسال پیام رد شد و یکی از آنها اعلام شد.
  • QUOI_EXPEDED: درخواست ارسال پیام به دلیل سهمیه کافی رد شد.
  • INVALID_RETIRATION: درخواست ارسال پیام به دلیل ثبت نام نامعتبر رد شد.
  • INVALID_PACKAGE_NAME: درخواست ارسال پیام به دلیل نام بسته نامعتبر رد شد.
  • INVALID_APNS_CREDEATIAL: درخواست ارسال پیام به دلیل گواهی 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 زمانی است که درخواست اصلی دریافت می شود ، و زمان پایان زمان آخرین پیام فردی است که یک نمونه واحد ایجاد می شود.

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;
  
،

برای عیب یابی در مورد خرابی های ارسال پیام در حال انجام ، از TROBLEOTER FCM استفاده کنید و این پست وبلاگ را ببینید تا دلایل مختلفی را که ممکن است پیام خود را مشاهده نکنید ، درک کنید. همچنین می توانید از داشبورد وضعیت FCM بازدید کنید تا تشخیص دهید که آیا اختلال در سرویس در حال انجام بر FCM وجود دارد یا خیر.

FCM همچنین سه مجموعه ابزار را برای کمک به شما در ارزیابی گسترده موفقیت و استراتژی پیام رسانی فراهم می کند:

  • گزارش ارسال پیام کنسول Firebase
  • معیارهای تحویل SDK Android جمع شده از داده های Firebase Cloud Messaging API
  • صادرات داده های جامع به Google BigQuery

ابزارهای گزارش دهی که در این صفحه شرح داده شده است ، همه برای عملکرد Google Analytics نیاز دارند. اگر Google Analytics برای پروژه شما فعال نشده است ، می توانید آن را در برگه ادغام تنظیمات پروژه Firebase خود تنظیم کنید.

به خاطر داشته باشید که گزارش بسیاری از آمار موجود در این صفحه ، به دلیل دسته بندی داده های تجزیه و تحلیل ، تا 24 ساعت تاخیر می کند.

گزارش های تحویل پیام

در برگه گزارش ها در کنسول Firebase ، می توانید داده های زیر را برای پیام های ارسال شده به Android یا Apple Platform FCM SDK ، از جمله موارد ارسال شده از طریق آهنگساز اعلان ها و API های FCM مشاهده کنید:

  • Sends-پیام داده یا پیام اعلان برای تحویل مورد استفاده قرار گرفته است یا با موفقیت به یک سرویس شخص ثالث مانند APNS برای تحویل منتقل شده است. برای اطلاعات بیشتر به طول عمر یک پیام مراجعه کنید.
  • دریافت شده (فقط در دستگاه های Android موجود است) - پیام داده یا پیام اعلان توسط برنامه دریافت شده است. این داده ها هنگامی که دستگاه Android دریافت شده FCM SDK 18.0.1 یا بالاتر نصب شده است ، در دسترس است.
  • Impressions (فقط برای پیام های اعلان در دستگاه های Android موجود است) - اعلان نمایشگر در حالی که برنامه در پس زمینه است ، روی دستگاه نمایش داده می شود.
  • باز می شود - کاربر پیام اعلان را باز کرد. فقط برای اعلان های دریافت شده هنگام برنامه در پس زمینه گزارش شده است.

این داده ها برای کلیه پیام ها با بارگذاری اعلان و کلیه پیام های داده برچسب در دسترس است. برای کسب اطلاعات بیشتر در مورد برچسب ها ، به اضافه کردن برچسب های Analytics به پیام ها مراجعه کنید.

هنگام مشاهده گزارش های پیام ، می توانید یک محدوده تاریخ را برای داده های نمایش داده شده با گزینه صادرات به CSV تنظیم کنید. همچنین می توانید با این معیارها فیلتر کنید:

  • پلتفرم (iOS یا Android)
  • برنامه
  • برچسب های تحلیلی سفارشی

اضافه کردن برچسب های تحلیلی به پیام ها

پیام های برچسب زدن برای تجزیه و تحلیل سفارشی بسیار مفید است و به شما امکان می دهد آمار تحویل را توسط برچسب ها یا مجموعه برچسب ها فیلتر کنید. می توانید با تنظیم قسمت fcmOptions.analyticsLabel در شیء پیام ، یا در قسمتهای AndroidFcmOptions یا ApnsFcmOptions ، یک برچسب به هر پیام ارسال شده از طریق HTTP V1 API اضافه کنید.

برچسب های تحلیلی رشته های متنی در قالب ^[a-zA-Z0-9-_.~%]{1,50}$ هستند. برچسب ها می توانند شامل حروف پایین و بالا ، شماره ها ، اعداد و نمادهای زیر باشند:

  • -
  • ~
  • %

طول حداکثر 50 نویسه است. می توانید حداکثر 100 برچسب منحصر به فرد در روز مشخص کنید. پیام هایی با برچسب های اضافه شده فراتر از آن حد گزارش نشده است.

در برگه گزارش های پیام رسانی کنسول Firebase ، می توانید لیستی از تمام برچسب های موجود را جستجو کرده و آنها را به صورت مجزا یا به صورت ترکیبی برای فیلتر کردن آمار نمایش داده شده استفاده کنید.

داده های تحویل جمع شده از طریق API داده FCM

API داده پیام رسانی Cloud Firebase به شما امکان می دهد تا اطلاعاتی را که می تواند به شما در درک نتایج درخواست های پیام مورد نظر برای برنامه های Android کمک کند ، بازیابی کنید. API داده های جمع شده را در کلیه دستگاه های Android با قابلیت جمع آوری داده ها در یک پروژه ارائه می دهد. این شامل جزئیات مربوط به درصد پیام های تحویل داده شده بدون تأخیر و همچنین تعداد پیام ها به تأخیر افتاده یا در لایه حمل و نقل اندرویدی کاهش یافته است. ارزیابی این داده ها می تواند روندهای گسترده ای در تحویل پیام را نشان دهد و به شما در یافتن راه های مؤثر برای بهبود عملکرد درخواست های ارسال خود کمک کند. برای اطلاعات در مورد در دسترس بودن محدوده تاریخ در گزارش ها ، به جدول زمانی داده های کل مراجعه کنید.

API تمام داده های موجود را برای یک برنامه خاص ارائه می دهد. به مستندات مرجع API مراجعه کنید.

چگونه داده ها خراب می شوند؟

داده های تحویل توسط برچسب برنامه ، تاریخ و تجزیه و تحلیل تقسیم می شوند. تماس با 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 می تواند نشان دهد که نمونه های برنامه در حال دریافت حجم پیام های غیر قابل جمع شدن بیش از حد 100 پیام در انتظار FCM هستند. برای کاهش این موضوع ، اطمینان حاصل کنید که برنامه شما تماس هایی را به onDeletedMessages انجام می دهد و ارسال پیام های قابل جمع شدن را در نظر بگیرید. به طور مشابه ، درصد بالایی برای droppedDeviceInactive می تواند سیگنالی برای به روزرسانی نشانه های ثبت نام در سرور شما ، از بین بردن نشانه های قدیمی و اشتراک مشترک آنها از موضوعات باشد. برای بهترین شیوه های این زمینه ، مدیریت نشانه های ثبت نام FCM را ببینید.

درصد عملکرد تحویل

زمینه های موجود در شیء DeliveryPerformancePercents اطلاعاتی در مورد پیامهایی که با موفقیت تحویل داده می شوند ، ارائه می دهند. این می تواند به سؤالاتی مانند "پیام های من به تأخیر افتاد؟" و "چرا پیام ها به تأخیر می افتند؟" به عنوان مثال ، مقدار بالایی برای delayedMessageThrottled به وضوح نشان می دهد که شما بیش از حد حداکثر در هر دستگاه هستید و باید نرخ ارسال پیام را تنظیم کنید.

پیام بینش پیام

این شیء اطلاعات اضافی در مورد تمام ارسال پیام ارائه می دهد. حوزه priorityLowered درصد پیام های پذیرفته شده را که اولویت از HIGH به NORMAL کاهش یافته است ، بیان می کند. اگر این مقدار زیاد است ، سعی کنید پیام های با اولویت بالا را ارسال کنید یا اطمینان حاصل کنید که هنگام ارسال پیام با اولویت بالا ، همیشه اعلان را نمایش می دهید. برای اطلاعات بیشتر به اسناد ما در اولویت پیام مراجعه کنید

چگونه این داده ها با داده های صادر شده به BigQuery متفاوت است؟

Export BigQuery گزارش های شخصی را در مورد پذیرش پیام توسط FCM Backend و ارسال پیام در SDK در دستگاه ارائه می دهد (مراحل 2 و 4 معماری FCM ). این داده ها برای اطمینان از پذیرش و تحویل پیام های فردی مفید است. اطلاعات بیشتر در مورد صادرات داده های BigQuery را در بخش بعدی بخوانید.

در مقابل ، API داده های پیام رسانی Cloud Firebase جزئیات جمع آوری شده در مورد آنچه اتفاق می افتد به طور خاص در لایه حمل و نقل اندرویدی (یا مرحله 3 معماری FCM ) ارائه می دهد. این داده ها به طور خاص بینشی در مورد تحویل پیام ها از FCM Backends به Android SDK ارائه می دهد. این امر به ویژه برای نشان دادن روندها در مورد اینکه چرا پیام ها در طول این حمل و نقل به تأخیر افتاده یا کاهش یافته اند ، مفید است.

در بعضی موارد ، این امکان وجود دارد که دو مجموعه داده به دلیل موارد زیر دقیقاً مطابقت نداشته باشند:

  • معیارهای جمع شده فقط بخشی از همه پیام ها را نمونه می گیرند
  • معیارهای جمع شده گرد شده اند
  • ما معیارهای زیر آستانه حفظ حریم خصوصی را ارائه نمی دهیم
  • بخشی از نتایج پیام به دلیل بهینه سازی در نحوه مدیریت حجم زیاد ترافیک از دست رفته است.

محدودیت های API

جدول زمانی داده های جمع شده

API 7 روز از داده های تاریخی را برمی گرداند. با این حال ، داده های برگشتی توسط این API تا 5 روز به تأخیر می افتد. به عنوان مثال ، در تاریخ 20 ژانویه ، داده های مربوط به 9 ژانویه - 15 ژانویه در دسترس خواهد بود ، اما برای 16 یا بعد از آن نه. علاوه بر این ، داده ها با بهترین تلاش ارائه می شوند. در صورت قطع اطلاعات ، FCM برای رفع پیش رو کار خواهد کرد و پس از رفع مشکل ، داده ها را بازگرداند. در قطع بزرگتر ، داده ها می توانند برای یک هفته یا بیشتر در دسترس نباشند.

پوشش داده ها

معیارهای ارائه شده توسط API داده های پیام رسانی ابری Firebase به منظور ارائه بینش در مورد روندهای گسترده تحویل پیام است. با این حال ، آنها 100 ٪ پوشش تمام سناریوهای پیام را ارائه نمی دهند. سناریوهای زیر نتایج شناخته شده ای هستند که در معیارها منعکس نشده اند.

پیام های منقضی شده

اگر زمان زندگی (TTL) پس از پایان تاریخ ورود به سیستم منقضی شود ، پیام در این تاریخ به عنوان droppedTtlExpired شمارش نمی شود.

پیام به دستگاه های غیرفعال

پیام های ارسال شده به دستگاه های غیرفعال بسته به اینکه مسیر داده ای را طی می کنند ، ممکن است در مجموعه داده نشان داده شوند یا نباشند. این می تواند به برخی از سوءاستفاده ها در زمینه های droppedDeviceInactive و pending منجر شود.

پیام هایی به دستگاه هایی با تنظیمات خاص کاربر

کاربرانی که جمع آوری اطلاعات استفاده و تشخیص در مورد دستگاه های خود را غیرفعال کرده اند ، با توجه به ترجیحات خود ، پیام های خود را در شمارش ما گنجانده اند.

گرد و حداقل

FCM عمداً دور می زند و تعداد آنها را حذف می کند که حجم آن به اندازه کافی بزرگ نیست.

صادرات داده های BigQuery

برای تجزیه و تحلیل بیشتر می توانید داده های پیام خود را به BigQuery صادر کنید. BigQuery به شما امکان می دهد داده ها را با استفاده از BigQuery SQL تجزیه و تحلیل کنید ، آن را به یک ارائه دهنده ابر دیگر صادر کنید یا از داده ها برای مدل های ML سفارشی خود استفاده کنید. صادرات به BigQuery شامل تمام داده های موجود برای پیام ها ، صرف نظر از نوع پیام یا اینکه پیام از طریق API یا آهنگساز اعلان ها ارسال می شود.

برای پیام های ارسال شده به دستگاه هایی با نسخه های زیر FCM SDK زیر ، شما گزینه دیگری را دارید که می توانید صادرات داده های تحویل پیام را برای برنامه خود فعال کنید:

  • اندروید 20.1.0 یا بالاتر.
  • iOS 8.6.0 یا بالاتر
  • Firebase Web SDK 9.0.0 یا بالاتر

برای جزئیات بیشتر در مورد فعال کردن صادرات داده برای Android و iOS به زیر مراجعه کنید.

برای شروع ، پروژه خود را به BigQuery پیوند دهید:

  1. یکی از گزینه های زیر را انتخاب کنید:

    • آهنگساز Notifications را باز کنید ، سپس روی Access BigQuery در پایین صفحه کلیک کنید.

    • از صفحه ادغام در کنسول Firebase ، روی Link در کارت BigQuery کلیک کنید.

      در این صفحه گزینه های صادراتی FCM برای همه برنامه های دارای قابلیت FCM در پروژه نمایش داده شده است.

  2. برای فعال کردن BigQuery ، دستورالعمل های روی صفحه را دنبال کنید.

برای اطلاعات بیشتر به Link Firebase به BigQuery مراجعه کنید.

هنگامی که Export BigQuery برای Cloud Messaging فعال می کنید:

  • Firebase داده های شما را به BigQuery صادر می کند. توجه داشته باشید که انتشار اولیه داده ها برای صادرات ممکن است تا 48 ساعت طول بکشد.

  • پس از ایجاد مجموعه داده ، مکان قابل تغییر نیست ، اما می توانید مجموعه داده ها را در یک مکان متفاوت کپی کرده یا به صورت دستی حرکت داده (بازآفرینی) مجموعه داده را در یک مکان متفاوت قرار دهید. برای کسب اطلاعات بیشتر ، به مکان مجموعه داده تغییر دهید .

  • Firebase همگام سازی های منظم از داده های شما را از پروژه Firebase شما تا BigQuery تنظیم می کند. این عملیات صادراتی روزانه از ساعت 4 صبح اقیانوس آرام آغاز می شود و معمولاً در 24 ساعت به پایان می رسد.

  • به طور پیش فرض ، تمام برنامه های پروژه شما به BigQuery مرتبط هستند و هر برنامه ای که بعداً به پروژه اضافه می کنید به طور خودکار با BigQuery مرتبط می شوند. شما می توانید مدیریت کنید که برنامه ها داده ها را ارسال می کنند .

برای غیرفعال کردن صادرات BigQuery ، پروژه خود را در کنسول Firebase مجدداً جستجو کنید.

صادرات داده های تحویل پیام را فعال کنید

دستگاه های Android با FCM SDK 20.1.0 یا بالاتر می توانند صادرات داده های تحویل پیام برنامه خود را فعال کنند. صادرات داده ها به طور پیش فرض در سطح برنامه غیرفعال می شوند. برنامه نویسی فعال کردن آن در سطح نمونه برنامه به شما امکان می دهد از کاربران نهایی مجوز برای تجزیه و تحلیل داده های تحویل پیام خود (توصیه شده) بخواهید. جایی که هر دو تنظیم شده اند ، مقدار سطح نمونه برنامه بر مقدار سطح برنامه غلبه می کند.

قبل از فعال کردن این گزینه ها ، ابتدا باید پیوند FCM -BIQQuery را برای پروژه خود ایجاد کنید ، همانطور که در صادرات داده های BigQuery شرح داده شده است.

صادرات داده های تحویل را برای نمونه های برنامه فعال کنید

در بیشتر موارد ، ما توصیه می کنیم که داده های تحویل پیام را فقط در سطح نمونه برنامه فعال کنید و آن را در سطح برنامه غیرفعال کنید.

 FirebaseMessaging.getInstance().setDeliveryMetricsExportToBigQuery(true)

صادرات داده های تحویل را برای یک برنامه فعال کنید

اگر ترجیح می دهید صادرات را در سطح برنامه فعال کنید ، حتماً با روش setDeliveryMetricsExportToBigQuery تماس نگیرید و ویژگی زیر را به شیء برنامه در برنامه خود اضافه کنید:

<application>
  <meta-data android:name="delivery_metrics_exported_to_big_query_enabled"
      android:value="true" />
</application>

چه داده هایی به BigQuery صادر می شود؟

توجه داشته باشید که هدف قرار دادن نشانه های بی نظیر یا ثبت نام های غیرفعال ممکن است برخی از این آمار را باد کند.

طرح جدول صادر شده:

_PARTITIONTIME TIMESTAMP این ستون شبه حاوی یک جدول زمانی برای شروع روز (در UTC) است که در آن داده ها بارگیری شده است. برای پارتیشن yyyymmdd ، این ستون شبه حاوی جدول زمانی ارزش ("yyyy-mm-dd") است.
Event_timestamp TIMESTAMP Timestamp رویداد همانطور که توسط سرور ثبت شده است
project_number عدد صحیح شماره پروژه پروژه ای را که پیام ارسال کرده است مشخص می کند
پیام_ ID STRING شناسه پیام یک پیام را مشخص می کند. تولید شده از شناسه برنامه و Timestamp ، شناسه پیام ممکن است در بعضی موارد در سطح جهانی بی نظیر نباشد.
نمونه_ id STRING شناسه منحصر به فرد برنامه ای که پیام به آن ارسال می شود (در صورت وجود). این می تواند یک شناسه نمونه یا شناسه نصب Firebase باشد.
پیام_ پیام STRING نوع پیام می تواند پیام اعلان یا پیام داده باشد. موضوع برای شناسایی پیام اصلی برای ارسال موضوع یا کمپین استفاده می شود. پیام های بعدی یا یک اعلان یا پیام داده است.
sdk_platform STRING بستر برنامه گیرنده
نام_برنامه STRING نام بسته برنامه های Android یا شناسه بسته نرم افزاری برای برنامه های iOS
فروپاشی_ کلید STRING کلید فروپاشی گروهی از پیام هایی را که می توانند فرو ریخته باشند ، شناسایی می کند. هنگامی که یک دستگاه به هم وصل نشده است ، فقط آخرین پیام با کلید فروپاشی داده شده برای تحویل نهایی صف می شود
اولویت عدد صحیح اولویت پیام. مقادیر معتبر "طبیعی" و "بالا" هستند. در iOS ، اینها با اولویت های APNS 5 و 10 مطابقت دارد
ttl عدد صحیح این پارامتر مشخص می کند که اگر دستگاه آفلاین باشد ، پیام (در ثانیه) باید در ذخیره سازی FCM نگه داشته شود
موضوع STRING نام موضوعی که پیام به آن ارسال شده است (در صورت کاربرد)
bulk_id عدد صحیح شناسه فله گروهی از پیام های مرتبط ، مانند ارسال خاص به یک موضوع را مشخص می کند
رویداد STRING نوع رویداد مقادیر ممکن عبارتند از:
  • MESSIP_ACCEPTED: پیام توسط سرور FCM دریافت شده و درخواست معتبر است.
  • Message_Delivered: این پیام به FCM SDK برنامه در دستگاه تحویل داده شده است. به طور پیش فرض ، این زمینه پخش نمی شود. برای فعال کردن ، دستورالعمل های ارائه شده در setDeliveryMetricsExportToBigQuery(boolean) را دنبال کنید.
  • Mission_Registrations: این درخواست به دلیل ثبت نام مفقود شده رد شد.
  • غیرمجاز_ ثبت نام: پیام رد شد زیرا فرستنده مجاز به ارسال به ثبت نام نیست.
  • message_received_internal_error: هنگام پردازش درخواست پیام ، خطای نامشخصی وجود داشت.
  • MISTATCH_SENDER_ID: درخواست ارسال پیام به دلیل عدم تطابق بین شناسه فرستنده ارسال پیام رد شد و یکی از آنها اعلام شد.
  • QUOI_EXPEDED: درخواست ارسال پیام به دلیل سهمیه کافی رد شد.
  • INVALID_RETIRATION: درخواست ارسال پیام به دلیل ثبت نام نامعتبر رد شد.
  • INVALID_PACKAGE_NAME: درخواست ارسال پیام به دلیل نام بسته نامعتبر رد شد.
  • INVALID_APNS_CREDEATIAL: درخواست ارسال پیام به دلیل گواهی 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 زمانی است که درخواست اصلی دریافت می شود ، و زمان پایان زمان آخرین پیام فردی است که یک نمونه واحد ایجاد می شود.

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;
  
،

برای عیب یابی در مورد خرابی های ارسال پیام در حال انجام ، از TROBLEOTER FCM استفاده کنید و این پست وبلاگ را ببینید تا دلایل مختلفی را که ممکن است پیام خود را مشاهده نکنید ، درک کنید. همچنین می توانید از داشبورد وضعیت FCM بازدید کنید تا تشخیص دهید که آیا اختلال در سرویس در حال انجام بر FCM وجود دارد یا خیر.

FCM همچنین سه مجموعه ابزار را برای کمک به شما در ارزیابی گسترده موفقیت و استراتژی پیام رسانی فراهم می کند:

  • گزارش ارسال پیام کنسول Firebase
  • معیارهای تحویل SDK Android جمع شده از داده های Firebase Cloud Messaging API
  • صادرات داده های جامع به Google BigQuery

ابزارهای گزارش دهی که در این صفحه شرح داده شده است ، همه برای عملکرد Google Analytics نیاز دارند. اگر Google Analytics برای پروژه شما فعال نشده است ، می توانید آن را در برگه ادغام تنظیمات پروژه Firebase خود تنظیم کنید.

به خاطر داشته باشید که گزارش بسیاری از آمار موجود در این صفحه ، به دلیل دسته بندی داده های تجزیه و تحلیل ، تا 24 ساعت تاخیر می کند.

گزارش های تحویل پیام

در برگه گزارش ها در کنسول Firebase ، می توانید داده های زیر را برای پیام های ارسال شده به Android یا Apple Platform FCM SDK ، از جمله موارد ارسال شده از طریق آهنگساز اعلان ها و API های FCM مشاهده کنید:

  • Sends-پیام داده یا پیام اعلان برای تحویل مورد استفاده قرار گرفته است یا با موفقیت به یک سرویس شخص ثالث مانند APNS برای تحویل منتقل شده است. برای اطلاعات بیشتر به طول عمر یک پیام مراجعه کنید.
  • دریافت شده (فقط در دستگاه های Android موجود است) - پیام داده یا پیام اعلان توسط برنامه دریافت شده است. این داده ها هنگامی که دستگاه Android دریافت شده FCM SDK 18.0.1 یا بالاتر نصب شده است ، در دسترس است.
  • Impressions (فقط برای پیام های اعلان در دستگاه های Android موجود است) - اعلان نمایشگر در حالی که برنامه در پس زمینه است ، روی دستگاه نمایش داده می شود.
  • باز می شود - کاربر پیام اعلان را باز کرد. فقط برای اعلان های دریافت شده هنگام برنامه در پس زمینه گزارش شده است.

این داده ها برای کلیه پیام ها با بارگذاری اعلان و کلیه پیام های داده برچسب در دسترس است. برای کسب اطلاعات بیشتر در مورد برچسب ها ، به اضافه کردن برچسب های Analytics به پیام ها مراجعه کنید.

هنگام مشاهده گزارش های پیام ، می توانید یک محدوده تاریخ را برای داده های نمایش داده شده با گزینه صادرات به CSV تنظیم کنید. همچنین می توانید با این معیارها فیلتر کنید:

  • پلتفرم (iOS یا Android)
  • برنامه
  • برچسب های تحلیلی سفارشی

اضافه کردن برچسب های تحلیلی به پیام ها

پیام های برچسب زدن برای تجزیه و تحلیل سفارشی بسیار مفید است و به شما امکان می دهد آمار تحویل را توسط برچسب ها یا مجموعه برچسب ها فیلتر کنید. می توانید با تنظیم قسمت fcmOptions.analyticsLabel در شیء پیام ، یا در قسمتهای AndroidFcmOptions یا ApnsFcmOptions ، یک برچسب به هر پیام ارسال شده از طریق HTTP V1 API اضافه کنید.

برچسب های تحلیلی رشته های متنی در قالب ^[a-zA-Z0-9-_.~%]{1,50}$ هستند. برچسب ها می توانند شامل حروف پایین و بالا ، شماره ها ، اعداد و نمادهای زیر باشند:

  • -
  • ~
  • %

طول حداکثر 50 نویسه است. می توانید حداکثر 100 برچسب منحصر به فرد در روز مشخص کنید. پیام هایی با برچسب های اضافه شده فراتر از آن حد گزارش نشده است.

در برگه گزارش های پیام رسانی کنسول Firebase ، می توانید لیستی از تمام برچسب های موجود را جستجو کرده و آنها را به صورت مجزا یا به صورت ترکیبی برای فیلتر کردن آمار نمایش داده شده استفاده کنید.

داده های تحویل جمع شده از طریق API داده FCM

API داده پیام رسانی Cloud Firebase به شما امکان می دهد تا اطلاعاتی را که می تواند به شما در درک نتایج درخواست های پیام مورد نظر برای برنامه های Android کمک کند ، بازیابی کنید. API داده های جمع شده را در کلیه دستگاه های Android با قابلیت جمع آوری داده ها در یک پروژه ارائه می دهد. این شامل جزئیات مربوط به درصد پیام های تحویل داده شده بدون تأخیر و همچنین تعداد پیام ها به تأخیر افتاده یا در لایه حمل و نقل اندرویدی کاهش یافته است. ارزیابی این داده ها می تواند روندهای گسترده ای در تحویل پیام را نشان دهد و به شما در یافتن راه های مؤثر برای بهبود عملکرد درخواست های ارسال خود کمک کند. برای اطلاعات در مورد در دسترس بودن محدوده تاریخ در گزارش ها ، به جدول زمانی داده های کل مراجعه کنید.

API تمام داده های موجود را برای یک برنامه خاص ارائه می دهد. به مستندات مرجع API مراجعه کنید.

چگونه داده ها خراب می شوند؟

داده های تحویل توسط برچسب برنامه ، تاریخ و تجزیه و تحلیل تقسیم می شوند. تماس با 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 می تواند نشان دهد که نمونه های برنامه در حال دریافت حجم پیام های غیر قابل جمع شدن بیش از حد 100 پیام در انتظار FCM هستند. برای کاهش این موضوع ، اطمینان حاصل کنید که برنامه شما تماس هایی را به onDeletedMessages انجام می دهد و ارسال پیام های قابل جمع شدن را در نظر بگیرید. به طور مشابه ، درصد بالایی برای droppedDeviceInactive می تواند سیگنالی برای به روزرسانی نشانه های ثبت نام در سرور شما ، از بین بردن نشانه های قدیمی و اشتراک مشترک آنها از موضوعات باشد. برای بهترین شیوه های این زمینه ، مدیریت نشانه های ثبت نام FCM را ببینید.

درصد عملکرد تحویل

زمینه های موجود در شیء DeliveryPerformancePercents اطلاعاتی در مورد پیامهایی که با موفقیت تحویل داده می شوند ، ارائه می دهند. این می تواند به سؤالاتی مانند "پیام های من به تأخیر افتاد؟" و "چرا پیام ها به تأخیر می افتند؟" به عنوان مثال ، مقدار بالایی برای delayedMessageThrottled به وضوح نشان می دهد که شما بیش از حد حداکثر در هر دستگاه هستید و باید نرخ ارسال پیام را تنظیم کنید.

پیام بینش پیام

This object provides additional information about all message sends. The priorityLowered field expresses the percentage of accepted messages that had priority lowered from HIGH to NORMAL . If this value is high, try sending fewer high priority messages or ensure that you always display a notification when a high priority message is sent. See our documentation on message priority for more info

How does this data differ from data exported to BigQuery?

The BigQuery export provides individual message logs about message acceptance by the FCM backend and message delivery in the SDK on the device (Steps 2 and 4 of the FCM Architecture ). This data is useful for ensuring individual messages were accepted and delivered. Read more about BigQuery data export in the next section.

By contrast, the Firebase Cloud Messaging Data API provides aggregated details about what happens specifically in the Android Transport Layer (or Step 3 of the FCM Architecture ). This data specifically provides insight into the delivery of messages from FCM backends to the Android SDK. It's particularly useful for showing trends as to why messages were delayed or dropped during this transport.

In some cases, it is possible that the two data sets might not match precisely due to the following:

  • The aggregated metrics only sample a portion of all messages
  • The aggregated metrics are rounded
  • We don't present metrics below a privacy threshold
  • A portion of message outcomes are missing due to optimizations in how we manage the large volume of traffic.

Limitations of the API

Aggregate Data Timelines

The API will return 7 days of historical data; however, data returned by this API will be delayed by up to 5 days. For example, on January 20th, the data for January 9th - January 15th would be available, but not for January 16th or later. Additionally, the data is provided at best effort. In the event of a data outage, FCM will work to fix forward and will not backfill the data after the issue is fixed. In larger outages, the data could be unavailable for a week or more.

پوشش داده ها

The metrics provided by the Firebase Cloud Messaging Data API are meant to provide insight into broad trends of message delivery. However, they do not provide 100% coverage of all message scenarios. The following scenarios are known outcomes not reflected in the metrics.

Expired messages

If the Time To Live (TTL) expires after the end of the given log date, the message won't be counted as droppedTtlExpired on this date.

Messages to inactive devices

Messages sent to inactive devices may or may not show up in the dataset depending on which data path they take. This can lead to some miscounting in the droppedDeviceInactive and pending fields.

Messages to devices with certain user preferences

Users who have disabled the collection of usage and diagnostic information on their devices will not have their messages included in our counting, in keeping with their preferences.

Rounding and Minimums

FCM deliberately rounds and excludes counts where the volumes are not large enough.

BigQuery data export

You can export your message data into BigQuery for further analysis. BigQuery allows you to analyze the data using BigQuery SQL, export it to another cloud provider, or use the data for your custom ML models. An export to BigQuery includes all available data for messages, regardless of message type or whether the message is sent via the API or the Notifications composer.

For messages sent to devices with the following FCM SDK minimum versions, you have the additional option to enable the export of message delivery data for your app:

  • Android 20.1.0 or higher.
  • iOS 8.6.0 or higher
  • Firebase Web SDK 9.0.0 or higher

See below for details on enabling data export for Android and iOS .

To get started, link your project to BigQuery:

  1. یکی از گزینه های زیر را انتخاب کنید:

    • Open the Notifications composer , then click Access BigQuery at the bottom of the page.

    • From the Integrations page in the Firebase console, click Link in the BigQuery card.

      This page displays FCM export options for all FCM -enabled apps in the project.

  2. Follow the on-screen instructions to enable BigQuery.

Refer to Link Firebase to BigQuery for more information.

When you enable BigQuery export for Cloud Messaging :

  • Firebase exports your data to BigQuery . Note that the initial propagation of data for export may take up to 48 hours to complete.

  • After the dataset is created, the location can't be changed, but you can copy the dataset to a different location or manually move (recreate) the dataset in a different location. To learn more, see Change dataset location .

  • Firebase sets up regular syncs of your data from your Firebase project to BigQuery . These daily export operations begin at 4:00 AM Pacific Time and usually finish in 24 hours.

  • By default, all apps in your project are linked to BigQuery and any apps that you later add to the project are automatically linked to BigQuery . You can manage which apps send data .

To deactivate BigQuery export, unlink your project in the Firebase console.

Enable message delivery data export

Android devices with the FCM SDK 20.1.0 or higher can enable their app's message delivery data export. Data export is disabled by default at the app level . Programmatically enabling it at the app instance level allows you to ask end users for permission to analyze their message delivery data (recommended). Where both are set, the app instance level value overrides the app level value.

Before enabling these options, you must first create the FCM -BiqQuery link for your project as described in BigQuery data export .

Enable delivery data export for app instances

For most cases, we recommend that you enable message delivery data export only at the app instance level and leave it disabled at the app level.

 FirebaseMessaging.getInstance().setDeliveryMetricsExportToBigQuery(true)

Enable delivery data export for an app

If you prefer to enable export at the app level, make sure to not call the setDeliveryMetricsExportToBigQuery method, and add the following property to the application object in your app manifest:

<application>
  <meta-data android:name="delivery_metrics_exported_to_big_query_enabled"
      android:value="true" />
</application>

What data is exported to BigQuery?

Note that targeting stale tokens or inactive registrations may inflate some of these statistics.

The schema of the exported table is:

_PARTITIONTIME TIMESTAMP This pseudo column contains a timestamp for the start of the day (in UTC) in which the data was loaded. For the YYYYMMDD partition, this pseudo column contains the value TIMESTAMP('YYYY-MM-DD').
event_timestamp TIMESTAMP Event timestamp as recorded by the server
project_number عدد صحیح The project number identifies the project that sent the message
message_id STRING The message ID identifies a message. Generated from the App ID and timestamp, the message ID might, in some cases, not be globally unique.
instance_id STRING The unique id of the app the message is sent to (when available). It can be an instance ID or an Firebase installation ID.
message_type STRING The type of the message. Can be Notification message or Data message. Topic is used to identify the original message for a topic or campaign send; the subsequent messages is either a notification or data message.
sdk_platform STRING The platform of the recipient app
نام_برنامه STRING The package name for Android apps or the bundle id for iOS apps
collapse_key STRING The collapse key identifies a group of messages that can be collapsed. When a device is not connected, only the last message with a given collapse key is queued for eventual delivery
اولویت عدد صحیح The priority of the message. Valid values are "normal" and "high." On iOS, these correspond to APNs priorities 5 and 10
ttl عدد صحیح This parameter specifies how long (in seconds) the message should be kept in FCM storage if the device is offline
موضوع STRING The name of the topic to which a message was sent (when applicable)
bulk_id عدد صحیح The bulk ID identifies a group of related messages, such as a particular send to a topic
رویداد STRING The type of the event. مقادیر ممکن عبارتند از:
  • MESSAGE_ACCEPTED: the message was received by the FCM server and the request is valid;
  • MESSAGE_DELIVERED: the message has been delivered to the app's FCM SDK on the device. By default, this field is not propagated. To enable, follow the instructions provided in setDeliveryMetricsExportToBigQuery(boolean) .
  • MISSING_REGISTRATIONS: the request was rejected due to a missing registration;
  • UNAUTHORIZED_REGISTRATION: the message was rejected because the sender is not authorized to send to the registration;
  • MESSAGE_RECEIVED_INTERNAL_ERROR: there was an unspecified error when processing the message request;
  • MISMATCH_SENDER_ID: the request to send a message was rejected due to a mismatch between the sender id sending the message, and the one declared for the end-point;
  • QUOTA_EXCEEDED: the request to send a message was rejected due to insufficient quota;
  • INVALID_REGISTRATION: the request to send a message was rejected due to an invalid registration;
  • INVALID_PACKAGE_NAME: the request to send a message was rejected due to an invalid package name;
  • INVALID_APNS_CREDENTIAL: the request to send a message was rejected due to an invalid APNS certificate;
  • INVALID_PARAMETERS: the request to send a message was rejected due to invalid parameters;
  • PAYLOAD_TOO_LARGE: the request to send a message was rejected due to a payload larger than the limit;
  • AUTHENTICATION_ERROR: the request to send a message was rejected due to an authentication error (check the API Key used to send the message);
  • INVALID_TTL: the request to send a message was rejected due to an invalid TTL.
analytics_label STRING With the HTTP v1 API , the analytics label can be set when sending the message, in order to mark the message for analytics purposes

What can you do with the exported data?

The following sections offer examples of queries that you can run in BigQuery against your exported FCM data.

Count sent messages by app

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;

Count unique app instances targeted by messages

SELECT COUNT(DISTINCT instance_id)
FROM `project ID.firebase_messaging.data`
WHERE
  _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
  AND event = 'MESSAGE_ACCEPTED';

Count notification messages sent

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';

Count data messages sent

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';

Count messages sent to a topic or campaign

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 != '';

To track events for a message sent to particular topic, modify this query to replace AND message_id != '' with AND message_id = <your message id>; .

Compute fanout duration for a given topic or campaign

The fanout start time is when the original request is received, and the end time is the time the last individual message targeting a single instance is created.

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;

Count percentage of delivered messages

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;

Track all events for a given message id and instance id

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;

Compute latency for a given message id and instance id

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;