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

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

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

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

ارسال داده‌ها به BigQuery و تب Reports در کنسول Firebase هر دو برای عملکرد به Google Analytics نیاز دارند. می‌توانید Google Analytics در > تب ادغام‌ها در کنسول Firebase . داده‌های تحویل تجمیعی برای عملکرد به Google Analytics نیاز ندارند.

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

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

در کنسول Firebase ، به تب DevOps & Engagement > Messaging > Reports بروید تا داده‌های زیر را برای پیام‌های ارسال شده به FCM SDKهای پلتفرم اندروید یا اپل، از جمله پیام‌های ارسال شده با استفاده از آهنگساز Notifications و APIهای FCM، مشاهده کنید:

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

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

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

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

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

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

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

  • -
  • ~
  • %

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

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

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

The Firebase Cloud Messaging Data API lets you retrieve information that can help you understand the outcomes of message requests targeted to Android applications. The API provides aggregated data across all data collection-enabled Android devices in a project. This includes details on the percentage of messages delivered without delay as well as how many messages were delayed or dropped within the Android Transport Layer . Evaluating this data can reveal broad trends in message delivery and help you find effective ways to improve the performance of your send requests. See Aggregate data timelines for information on date range availability in the reports.

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

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

داده‌های تحویل بر اساس کاربرد، تاریخ و برچسب تحلیلی تفکیک می‌شوند. فراخوانی API، داده‌ها را برای هر ترکیبی از تاریخ، کاربرد و برچسب تحلیلی برمی‌گرداند. برای مثال، یک شیء JSON androidDeliveryData به صورت زیر خواهد بود:

 {
  "appId": "1:23456789:android:a93a5mb1234efe56",
  "date": {
    "year": 2021,
    "month": 1,
    "day": 1
  },
  "analyticsLabel": "foo",
  "data": {
    "countMessagesAccepted": "314159",
    "messageOutcomePercents": {
      "delivered": 71,
      "pending": 15
    },
   "deliveryPerformancePercents": {
      "deliveredNoDelay": 45,
      "delayedDeviceOffline": 11
    }
  }

چگونه معیارها را تفسیر کنیم

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

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

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

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

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

For example, a high value for the droppedTooManyPendingMessages field could signal that app instances are receiving volumes of non-collapsible messages exceeding FCM 's limit of 100 pending messages. To mitigate this, make sure your app handles calls to onDeletedMessages , and consider sending collapsible messages. Similarly, high percentages for droppedDeviceInactive could be a signal to update registration tokens on your server, removing stale tokens and unsubscribing them from topics. See Manage FCM registration tokens for best practices in this area.

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

The fields in the DeliveryPerformancePercents object provide information about messages that were successfully delivered. It can answer questions such as "Were my messages delayed?" and "Why are messages delayed?" For example, a high value for delayedMessageThrottled would clearly indicate that you are exceeding per-device maximum limits , and should adjust the rate at which you are sending messages.

درصدهای بینش پیام

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

این داده‌ها چه تفاوتی با داده‌هایی که به BigQuery ارسال می‌شوند، دارند؟

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

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.

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

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

محدودیت‌های API

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

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 won't backfill the data after the issue is fixed. In larger outages, the data could be unavailable for a week or more.

پوشش داده

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

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

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

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

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

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

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

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

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

خروجی گرفتن از داده‌های BigQuery

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

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

  • اندروید ۲۰.۱.۰ یا بالاتر.
  • iOS 8.6.0 یا بالاتر
  • فایربیس وب SDK نسخه ۱۲.۱۴.۰ یا بالاتر

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

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

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

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

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

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

برای اطلاعات بیشتر به لینک کردن فایربیس به بیگ‌کوئری مراجعه کنید.

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

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

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

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

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

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

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

آی‌او‌اس+

iOS devices with the FCM SDK 8.6.0 or higher can enable their app's message delivery data export. FCM supports data export for both alert and background notifications. Data export is disabled by default at the app level . Programmatically enabling it at the app instance level lets you ask end users for permission to analyze their message delivery data (recommended). When both are set, the app instance level value overrides the app level value.

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

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

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

برای هر اعلان دریافتی، باید فراخوانی زیر انجام شود:

سویفت

// 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)
  }
}

هدف-سی

// 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

اگر در حال ساخت درخواست‌های ارسال با استفاده از API HTTP نسخه ۱ هستید، حتماً `mutable-content = 1` را در شیء payload مشخص کنید.

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

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

سویفت

// 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)
}

هدف-سی

// 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

اندروید

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

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

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

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

FirebaseMessaging.getInstance().setDeliveryMetricsExportToBigQuery(true);

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

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

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

وب

The FCM SDK for Web 12.14.0 or higher allows a delivery data export. Data export is disabled by default at the app level . Programmatically enabling it at the app instance level lets you ask end users for permission to analyze their message delivery data (recommended). When both are set, the app instance level value overrides the app level value. When an end user gives consent or rejects data collection, the app should set the experimental enable or disable flag for each app instance as shown:

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

const messaging = getMessagingInSw(app);

experimentalSetDeliveryMetricsExportedToBigQueryEnabled(messaging, userConsent);

چه داده‌هایی به BigQuery ارسال می‌شوند؟

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

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

زمان تقسیم مهر زمانی این شبه ستون شامل یک مهر زمانی برای شروع روزی (به UTC) است که داده‌ها در آن بارگذاری شده‌اند. برای پارتیشن YYYYMMDD، این شبه ستون شامل مقدار TIMESTAMP('YYYY-MM-DD') است.
event_timestamp مهر زمانی مهر زمانی رویداد که توسط سرور ثبت شده است
شماره_پروژه عدد صحیح شماره پروژه، پروژه‌ای را که پیام را ارسال کرده است، مشخص می‌کند.
شناسه پیام رشته شناسه پیام، یک پیام را شناسایی می‌کند. این شناسه که از شناسه برنامه و مهر زمانی تولید می‌شود، ممکن است در برخی موارد منحصر به فرد نباشد.
شناسه نمونه رشته شناسه منحصر به فرد برنامه‌ای که پیام به آن ارسال می‌شود (در صورت وجود). این شناسه می‌تواند یک شناسه نمونه یا یک شناسه نصب Firebase باشد.
نوع_پیام رشته نوع پیام. می‌تواند پیام اعلان یا پیام داده باشد. موضوع برای شناسایی پیام اصلی برای ارسال یک موضوع یا کمپین استفاده می‌شود؛ پیام‌های بعدی یا یک پیام اعلان یا داده هستند.
sdk_platform رشته پلتفرم اپلیکیشن گیرنده
نام برنامه رشته نام بسته برای برنامه‌های اندروید یا شناسه بسته برای برنامه‌های iOS
کلید فروپاشی رشته کلید فروپاشی، گروهی از پیام‌ها را که می‌توانند فروپاشی شوند، مشخص می‌کند. هنگامی که دستگاهی متصل نیست، فقط آخرین پیامی که کلید فروپاشی آن مشخص شده است، برای تحویل نهایی در صف قرار می‌گیرد.
اولویت عدد صحیح اولویت پیام. عدد ۵ اولویت «معمولی» و عدد ۱۰ اولویت «زیاد» است.
تی‌تی‌ال عدد صحیح این پارامتر مشخص می‌کند که اگر دستگاه آفلاین باشد، پیام باید چه مدت (بر حسب ثانیه) در حافظه FCM نگهداری شود.
موضوع رشته نام موضوعی که پیام به آن ارسال شده است (در صورت وجود)
bulk_id عدد صحیح شناسه انبوه، گروهی از پیام‌های مرتبط، مانند یک ارسال خاص به یک موضوع، را شناسایی می‌کند.
رویداد رشته نوع رویداد. مقادیر ممکن عبارتند از:
  • 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 نامعتبر رد شد.
برچسب_تحلیلی رشته با استفاده از 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 زمانی است که درخواست اصلی دریافت می‌شود و زمان پایان زمانی است که آخرین پیام منفرد که یک نمونه واحد را هدف قرار می‌دهد، ایجاد می‌شود.

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;