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

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

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

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

صادر کردن داده‌ها به BigQuery و برگه گزارش‌ها در کنسول Firebase هر دو برای عملکرد به Google Analytics نیاز دارند. می‌توانید Google Analytics را در تنظیمات > برگه ادغام‌ها کنسول Firebase فعال کنید. داده‌های انبوهشی تحویل برای عملکرد به Google Analytics نیاز ندارد.

به‌خاطر داشته باشید که گزارش بسیاری از آمار در این صفحه، به‌دلیل دسته‌بندی داده‌های Analytics، ممکن است تا ۲۴ ساعت تأخیر داشته باشد.

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

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

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

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

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

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

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

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

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

  • -
  • ~
  • %

حداکثر طول ۵۰ نویسه است. می‌توانید حداکثر ۱۰۰ برچسب یکتا در روز مشخص کنید؛ پیام‌هایی که برچسب‌های اضافه‌شده به آن‌ها فراتر از این حد باشد گزارش نمی‌شوند.

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

داده‌های تجمیعی ارسال بااستفاده از FCM Data API

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

میانای برنامه‌سازی کاربردی همه داده‌های دردسترس برای برنامه موردنظر را ارائه می‌دهد. اسناد مرجع میانای برنامه‌سازی کاربردی را ببینید.

داده‌ها چگونه تفکیک می‌شود؟

داده‌های تحویل براساس برنامه، تاریخ، و برچسب Analytics تفکیک می‌شود. فراخوانی میانای برنامه‌سازی کاربردی، داده‌های مربوط به هر ترکیبی از تاریخ، برنامه، و برچسب تجزیه‌وتحلیل را برمی‌گرداند. برای مثال، یک شیء 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
    }
  }

نحوه تفسیر سنجه‌ها

داده‌های تحویل درصد پیام‌هایی را که با هریک از سنجه‌های زیر مطابقت دارند نشان می‌دهد. ممکن است یک پیام با چند سنجه مطابقت داشته باشد. به‌دلیل محدودیت‌هایی که در نحوه جمع‌آوری داده‌ها و سطح جزئیاتی که سنجه‌ها را تجمیع کرده‌ایم وجود دارد، برخی‌از نتایج پیام اصلاً در سنجه‌ها نشان داده نمی‌شود، بنابراین مجموع درصدهای زیر ۱۰۰٪ نخواهد بود.

تعداد پیام‌های پذیرفته‌شده

تنها شمارش موجود در مجموعه داده، شمارش پیام‌هایی است که FCM برای ارسال به دستگاه‌های Android پذیرفته است. همه درصدها از این مقدار به‌عنوان مخرج استفاده می‌کنند. به‌خاطر داشته باشید که این تعداد شامل پیام‌هایی که کاربران هدف آن‌ها هستند و جمع‌آوری اطلاعات استفاده و عیب‌یابی را در دستگاه‌هایشان غیرفعال کرده‌اند نمی‌شود.

درصد نتیجه پیام

فیلدهای موجود در شیء MessageOutcomePercents اطلاعاتی درباره نتایج درخواست‌های پیام ارائه می‌دهند. دسته‌ها همگی مانعه‌الجمع هستند. این ابزار می‌تواند به سؤالاتی مانند «آیا پیام‌های من تحویل داده می‌شوند؟» و «چه چیزی باعث می‌شود پیام‌ها حذف شوند؟» پاسخ دهد.

برای مثال، مقدار بالا برای فیلد droppedTooManyPendingMessages می‌تواند نشان دهد که نمونه‌های برنامه حجم زیادی از پیام‌های غیرقابل‌جمع‌شدن دریافت می‌کنند که از حد مجاز FCM برای ۱۰۰ پیام معلق فراتر می‌رود. برای کاهش این مشکل، مطمئن شوید برنامه‌تان تماس‌ها را به onDeletedMessages مدیریت می‌کند و ارسال پیام‌های جمع‌شدنی را درنظر بگیرید. به‌همین‌ترتیب، درصد بالای droppedDeviceInactive می‌تواند نشانه‌ای برای به‌روزرسانی کردن کدهای ثبت در سرور، برداشتن کدهای قدیمی، و لغو اشتراک آن‌ها از موضوعات باشد. برای روال‌های مطلوب در این زمینه، مدیریت کردن FCM نشان‌های ثبت را ببینید.

درصدهای عملکرد ارسال

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

درصدهای اطلاعات آماری پیام

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

این داده‌ها چه تفاوتی با داده‌های صادرشده به BigQuery دارد؟

برون‌برد BigQuery گزارش‌های پیام تکی درباره پذیرش پیام توسط بخش پشتی FCM و تحویل پیام در SDK در دستگاه ارائه می‌دهد (مراحل ۲ و ۴ معماری FCM). این داده‌ها برای اطمینان از پذیرفته شدن و تحویل پیام‌های فردی مفید است. در بخش بعدی، درباره صادر کردن داده‌های BigQuery بیشتر بخوانید.

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

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

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

محدودیت‌های میانای برنامه‌سازی کاربردی

خطوط زمان داده‌های تجمیعی

‫API داده‌های قدیمی ۷ روز را برمی‌گرداند؛ بااین‌حال، داده‌های برگردانده‌شده توسط این API با حداکثر ۵ روز تأخیر ارائه می‌شود. برای مثال، در ۲۰ ژانویه، داده‌های ۹ تا ۱۵ ژانویه دردسترس خواهد بود، اما داده‌های ۱۶ ژانویه یا بعداز آن دردسترس نخواهد بود. علاوه‌براین، داده‌ها با حداکثر تلاش ممکن ارائه می‌شود. درصورت قطعی داده، FCM برای رفع مشکل تلاش خواهد کرد و پس‌از رفع مشکل، داده‌ها را تکمیل نخواهد کرد. در قطعی‌های بزرگ‌تر، ممکن است داده‌ها برای یک هفته یا بیشتر دردسترس نباشد.

پوشش داده‌ها

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

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

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

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

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

پیام‌های ارسال‌شده به دستگاه‌هایی با اولویت‌های کاربری خاص

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

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

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

صادر کردن داده‌های BigQuery

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

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

  • Android نسخه ۲۰.۱.۰ یا بالاتر.
  • iOS نسخه ۸.۶.۰ یا بالاتر
  • کیت توسعه نرم‌افزار Firebase Web نسخه ۱۲.۱۴.۰ یا بالاتر

برای شروع، پروژه‌تان را بااستفاده از کنسول Firebase به BigQuery پیوند دهید:

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

    • به DevOps & Engagement > Messaging > the Notifications composer بروید، سپس روی Access BigQuery در پایین صفحه کلیک کنید.

    • به تنظیمات > زبانه ادغام‌ها بروید. سپس در BigQuery، روی پیوند کلیک کنید.

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

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

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

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

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

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

  • Firebase همگام‌سازی‌های منظم داده‌هایتان را از پروژه Firebase شما به BigQuery راه‌اندازی می‌کند. این عملیات صادر کردن روزانه ساعت ۴:۰۰ صبح به‌وقت اقیانوس آرام شروع می‌شود و معمولاً ظرف ۲۴ ساعت به‌پایان می‌رسد.

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

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

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

iOS+‎

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

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

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

چون فقط اعلان‌های هشدار می‌توانند افزونه‌های برنامه سرویس اعلان را راه‌اندازی کنند، باید افزونه سرویس اعلان را به برنامه‌تان اضافه کنید و این میانای برنامه‌سازی کاربردی را در افزونه سرویس فراخوانی کنید تا ردیابی پیام نمایشی فعال شود. به اسناد 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.serviceExtension().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` را در شیء بار داده مشخص کنید.

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

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

Swift

// For background notifications, call the API inside the
// UIApplicationDelegate or NSApplicationDelegate method:
func application(_ application: UIApplication,
didReceiveRemoteNotification userInfo: [AnyHashable : Any]) {
  Messaging.serviceExtension().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

Android

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

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

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

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

FirebaseMessaging.getInstance().setDeliveryMetricsExportToBigQuery(true);

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

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

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

وب

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

// userConsent holds the decision of the user to give big query export consent.
const userConsent = ...;

const messaging = getMessagingInSw(app);

experimentalSetDeliveryMetricsExportedToBigQueryEnabled(messaging, userConsent);

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

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

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

_PARTITIONTIME مُهر زمان این ستون کاذب حاوی مُهر زمان برای شروع روز (در UTC) است که داده‌ها در آن بار شده است. برای بخش YYYYMMDD، این ستون کاذب حاوی مقدار TIMESTAMP('YYYY-MM-DD') است.
event_timestamp مُهر زمان مُهر زمان رویداد که توسط سرور ضبط شده است
project_number عدد صحیح شماره پروژه، پروژه‌ای را که پیام را ارسال کرده است شناسایی می‌کند
message_id رشته شناسه پیام، پیام را شناسایی می‌کند. شناسه پیام که از شناسه برنامه و مُهر زمان تولید می‌شود، ممکن است در برخی موارد در سطح جهانی یکتا نباشد.
instance_id رشته شناسه یکتای برنامه‌ای که پیام به آن ارسال می‌شود (درصورت دردسترس بودن). این شناسه می‌تواند شناسه نمونه یا شناسه نصب Firebase باشد.
message_type رشته نوع پیام. می‌تواند پیام اعلان یا پیام داده باشد. موضوع برای شناسایی پیام اصلی برای ارسال موضوع یا پویش استفاده می‌شود؛ پیام‌های بعدی یا اعلان هستند یا پیام داده.
sdk_platform رشته پلاتفرم برنامه گیرنده
app_name رشته نام بسته برای برنامه‌های Android یا شناسه بسته برای برنامه‌های iOS
collapse_key رشته کلید جمع کردن گروهی از پیام‌ها را که می‌توانند جمع شوند شناسایی می‌کند. وقتی دستگاهی متصل نیست، فقط آخرین پیام با کلید جمع‌کردن داده‌شده برای تحویل نهایی در صف قرار می‌گیرد
اولویت‌دار عدد صحیح اولویت پیام. ‫۵ اولویت «معمولی» و ۱۰ اولویت «بالا» است.
ttl عدد صحیح این پارامتر مشخص می‌کند که اگر دستگاه آفلاین باشد، پیام چه مدت (به ثانیه) باید در فضای ذخیره‌سازی FCM نگهداری شود
موضوع رشته نام موضوعی که پیام به آن ارسال شده است (درصورت وجود)
bulk_id عدد صحیح شناسه انبوه گروهی از پیام‌های مرتبط را شناسایی می‌کند، مثلاً ارسال خاصی به یک موضوع
رویداد رشته نوع رویداد. مقادیر ممکن عبارت‌اند از:
  • MESSAGE_ACCEPTED: پیام توسط سرور FCM دریافت شده است و درخواست معتبر است؛
  • MESSAGE_DELIVERED: پیام به کیت توسعه نرم‌افزار FCM برنامه در دستگاه تحویل داده شده است. به‌طور پیش‌فرض، این فیلد منتشر نمی‌شود. برای فعال کردن، دستورالعمل‌های ارائه‌شده در 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: درخواست ارسال پیام به‌دلیل خطای اصالت‌سنجی رد شد (کلید میانای برنامه‌سازی کاربردی استفاده‌شده برای ارسال پیام را بررسی کنید)؛
  • INVALID_TTL: درخواست ارسال پیام به‌دلیل TTL نامعتبر رد شد.
analytics_label رشته با HTTP v1 API، می‌توان برچسب تجزیه‌وتحلیل را هنگام ارسال پیام تنظیم کرد تا پیام برای اهداف تجزیه‌وتحلیل علامت‌گذاری شود

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

بخش‌های زیر نمونه‌هایی از پُرسمان‌هایی را ارائه می‌دهند که می‌توانید در BigQuery دربرابر داده‌های صادرشده FCM اجرا کنید.

تعداد پیام‌های ارسال‌شده براساس برنامه

SELECT app_name, COUNT(1)
FROM `project ID.firebase_messaging.data`
WHERE
  _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
  AND event = 'MESSAGE_ACCEPTED'
  AND message_id != ''
GROUP BY 1;

شمارش نمونه‌های منحصربه‌فرد برنامه که هدف پیام‌ها قرار گرفته‌اند

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

تعداد پیام‌های اعلان ارسال‌شده

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

تعداد پیام‌های داده ارسال‌شده

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

شمارش پیام‌های ارسال‌شده به موضوع یا کمپین

SELECT COUNT(1)
FROM `project ID.firebase_messaging.data`
WHERE
  _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
  AND event = 'MESSAGE_ACCEPTED'
  AND bulk_id = your bulk id AND message_id != '';

برای ردیابی رویدادهای پیامی که به موضوع خاصی ارسال شده است، این پُرسمان را تغییر دهید تا AND message_id != '' با AND message_id = <your message id>; جایگزین شود.

محاسبه مدت‌زمان توزیع برای موضوع یا پویشی خاص

زمان شروع توزیع زمانی است که درخواست اصلی دریافت می‌شود و زمان پایان زمانی است که آخرین پیام تکی که یک نمونه را هدف قرار می‌دهد ایجاد می‌شود.

SELECT
  TIMESTAMP_DIFF(
    end_timestamp, start_timestamp, MILLISECOND
  ) AS fanout_duration_ms,
  end_timestamp,
  start_timestamp
FROM (
    SELECT MAX(event_timestamp) AS end_timestamp
    FROM `project ID.firebase_messaging.data`
    WHERE
      _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
      AND event = 'MESSAGE_ACCEPTED'
      AND bulk_id = your bulk id
  ) sent
  CROSS JOIN (
    SELECT event_timestamp AS start_timestamp
    FROM `project ID.firebase_messaging.data`
    WHERE
      _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
      AND event = 'MESSAGE_ACCEPTED'
      AND bulk_id = your bulk id
      AND message_type = 'TOPIC'
  ) initial_message;

درصد تعداد پیام‌های تحویل‌شده

SELECT
  messages_sent,
  messages_delivered,
  messages_delivered / messages_sent * 100 AS percent_delivered
FROM (
    SELECT COUNT(DISTINCT CONCAT(message_id, instance_id)) AS messages_sent
    FROM `project ID.firebase_messaging.data`
    WHERE
      _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
      AND event = 'MESSAGE_ACCEPTED'
  ) sent
  CROSS JOIN (
    SELECT COUNT(DISTINCT CONCAT(message_id, instance_id)) AS messages_delivered
    FROM `project ID.firebase_messaging.data`
    WHERE
      _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
      AND (event = 'MESSAGE_DELIVERED'
      AND message_id
      IN (
        SELECT message_id FROM `project ID.firebase_messaging.data`
        WHERE
          _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
          AND event = 'MESSAGE_ACCEPTED'
        GROUP BY 1
      )
  ) delivered;

ردیابی همه رویدادها برای شناسه پیام و شناسه نمونه مشخص

SELECT *
FROM `project ID.firebase_messaging.data`
WHERE
    _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
    AND message_id = 'your message id'
    AND instance_id = 'your instance id'
ORDER BY event_timestamp;

محاسبه تأخیر برای شناسه پیام و شناسه نمونه داده‌شده

SELECT
  TIMESTAMP_DIFF(
    MAX(delivered_time), MIN(accepted_time), MILLISECOND
  ) AS latency_ms
FROM (
    SELECT event_timestamp AS accepted_time
    FROM `project ID.firebase_messaging.data`
    WHERE
      _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
      AND message_id = 'your message id'
      AND instance_id = 'your instance id'
      AND event = 'MESSAGE_ACCEPTED'
  ) sent
  CROSS JOIN (
    SELECT event_timestamp AS delivered_time
    FROM `project ID.firebase_messaging.data`
    WHERE
      _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD') AND
      message_id = 'your message id' AND instance_id = 'your instance id'
      AND (event = 'MESSAGE_DELIVERED'
  ) delivered;