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

برای عیب‌یابی کردن خطاهای تحویل پیام جاری، از عیب‌یاب 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 و تعامل > پیام‌رسانی > برگه گزارش‌ها بروید تا داده‌های زیر را برای پیام‌های ارسال‌شده به پلاتفرم‌های Android یا Apple FCM SDK، ازجمله پیام‌های ارسال‌شده بااستفاده از آهنگ‌ساز «اعلان‌ها» و FCM API مشاهده کنید:

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

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

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

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

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

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

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

  • -
  • ~
  • %

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

پوشش داده‌ها

سنجه‌های ارائه‌شده توسط «میانای برنامه‌سازی کاربردی داده‌های پیام‌رسانی ابری Firebase» برای ارائه اطلاعات آماری درباره گرایش‌های کلی ارسال پیام درنظر گرفته شده است. بااین‌حال، این ویژگی‌ها همه سناریوهای پیام را ۱۰۰٪ پوشش نمی‌دهند. سناریوهای زیر نتایج شناخته‌شده‌ای هستند که در سنجه‌ها منعکس نمی‌شوند.

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

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

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

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

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

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

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

‫FCM به‌طور عمدی تعداد را گرد می‌کند و در مواردی که حجم کافی نباشد، تعداد را حذف می‌کند.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

‫iOS+‎

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

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

فعال کردن برون‌برد داده‌های ارسال برای اعلان‌های هشدار

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

تماس زیر باید برای هر اعلان دریافتی برقرار شود:

Swift

// For alert notifications, call the API inside the service extension:
class NotificationService: UNNotificationServiceExtension {
  override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
    Messaging.serviceExtension().exportDeliveryMetrics(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 SDK نسخه ۲۰.۱.۰ یا بالاتر می‌توانند برون‌برد داده‌های ارسال پیام برنامه خود را فعال کنند. صادر کردن داده‌ها به‌طور پیش‌فرض در سطح برنامه غیرفعال است. فعال کردن آن به‌صورت برنامه‌ریزی‌شده در سطح نمونه برنامه به شما امکان می‌دهد از کاربران نهایی برای تجزیه‌وتحلیل داده‌های ارسال پیامشان اجازه بخواهید (توصیه می‌شود). وقتی هر دو تنظیم شده باشند، مقدار سطح نمونه برنامه مقدار سطح برنامه را ملغی می‌کند.

قبل‌از فعال کردن این گزینه‌ها، ابتدا باید پیوند 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 برای وب» نسخه ۱۲.۱۴.۰ یا بالاتر امکان صادر کردن داده‌های ارائه را فراهم می‌کند. صادر کردن داده‌ها به‌طور پیش‌فرض در سطح برنامه غیرفعال است. فعال کردن آن به‌صورت برنامه‌ریزی‌شده در سطح نمونه برنامه به شما امکان می‌دهد از کاربران نهایی برای تجزیه‌وتحلیل داده‌های ارسال پیام آن‌ها اجازه بخواهید (توصیه می‌شود). وقتی هر دو تنظیم شده باشند، مقدار سطح نمونه برنامه مقدار سطح برنامه را ملغی می‌کند. وقتی کاربر نهایی با جمع‌آوری داده‌ها موافقت می‌کند یا آن را رد می‌کند، برنامه باید پرچم فعال یا غیرفعال کردن آزمایش را برای هر نمونه برنامه به‌صورت زیر تنظیم کند:

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

const messaging = getMessagingInSw(app);

experimentalSetDeliveryMetricsExportedToBigQueryEnabled(messaging, userConsent);

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

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

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

_PARTITIONTIME مُهر زمان این ستون کاذب حاوی مُهر زمان شروع روز (به زمان هماهنگ جهانی) است که داده‌ها در آن بار شده است. برای بخش YYYYMMDD، این ستون کاذب مقدار TIMESTAMP('YYYY-MM-DD') را دارد.
event_timestamp مُهر زمان مهر زمان رویداد همان‌گونه که سرور ضبط کرده است
project_number عدد صحیح شماره پروژه، پروژه‌ای را که پیام را ارسال کرده است شناسایی می‌کند
message_id رشته شناسه پیام، پیام را شناسایی می‌کند. شناسه پیام که از «شناسه برنامه» و مهر زمان تولید می‌شود ممکن است در برخی موارد در سطح جهانی یکتا نباشد.
instance_id رشته شناسه یکتای برنامه‌ای که پیام به آن ارسال می‌شود (درصورت دردسترس بودن). می‌تواند شناسه نمونه یا شناسه نصب Firebase باشد.
message_type رشته نوع پیام. می‌تواند پیام اعلان یا پیام داده باشد. «موضوع» برای شناسایی پیام اصلی برای ارسال موضوع یا پویش استفاده می‌شود؛ پیام‌های بعدی یا اعلان یا پیام داده است.
sdk_platform رشته پلاتفرم برنامه گیرنده
app_name رشته نام بسته برای برنامه‌های Android یا شناسه بسته نرم‌افزاری برای برنامه‌های iOS
کلید_جمع‌کردن رشته کلید جمع‌کردن گروهی از پیام‌ها را که می‌توانند جمع شوند شناسایی می‌کند. وقتی دستگاهی متصل نیست، فقط آخرین پیام با کلید جمع‌شونده داده‌شده در صف قرار می‌گیرد تا درنهایت تحویل داده شود
اولویت‌دار عدد صحیح اولویت پیام. ‫۵ اولویت «عادی» و ۱۰ اولویت «بالا» است.
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;