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

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 لغو کنید.

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

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

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

از آنجایی که فقط اعلان‌های هشدار می‌توانند برنامه‌های افزودنی سرویس اعلان را فعال کنند، باید یک برنامه افزودنی سرویس اعلان را به برنامه خود اضافه کنید و این 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.extensionHelper()
      .exportDeliveryMetricsToBigQuery(withMessageInfo:request.content.userInfo)
  }
}

هدف-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 در شی payload مشخص کنید.

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

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

سویفت

// For background notifications, call the API inside the UIApplicationDelegate or NSApplicationDelegate method:
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any]) {
  Messaging.extensionHelper().exportDeliveryMetricsToBigQuery(withMessageInfo:userInfo)
}

هدف-C

// For background notifications, call the API inside the UIApplicationDelegate or NSApplicationDelegate method:
@implementation AppDelegate
- (void)application:(UIApplication *)application
    didReceiveRemoteNotification:(NSDictionary *)userInfo
          fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
  [[FIRMessaging extensionHelper] exportDeliveryMetricsToBigQueryWithMessageInfo:userInfo];
}
@end

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

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

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

_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 سه مجموعه از ابزارها را برای کمک به شما در دریافت بینش در مورد تحویل پیام فراهم می کند:

  • گزارش های تحویل پیام کنسول 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 لغو کنید.

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

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

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

از آنجا که فقط اعلان های هشدار می توانند برنامه های خدمات اعلان را ایجاد کنند ، باید یک سرویس اعلان را به برنامه خود اضافه کنید و این 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.extensionHelper()
      .exportDeliveryMetricsToBigQuery(withMessageInfo:request.content.userInfo)
  }
}

هدف-C

// For alert notifications, call the API inside the service extension:
@implementation NotificationService
- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request
                   withContentHandler:(void (^)(UNNotificationContent *_Nonnull))contentHandler {
  [[FIRMessaging extensionHelper] exportDeliveryMetricsToBigQueryWithMessageInfo:request.content.userInfo];
}
@end

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

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

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

سویفت

// For background notifications, call the API inside the UIApplicationDelegate or NSApplicationDelegate method:
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any]) {
  Messaging.extensionHelper().exportDeliveryMetricsToBigQuery(withMessageInfo:userInfo)
}

هدف-C

// For background notifications, call the API inside the UIApplicationDelegate or NSApplicationDelegate method:
@implementation AppDelegate
- (void)application:(UIApplication *)application
    didReceiveRemoteNotification:(NSDictionary *)userInfo
          fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
  [[FIRMessaging extensionHelper] exportDeliveryMetricsToBigQueryWithMessageInfo:userInfo];
}
@end

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

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

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

_ بخش زمان TIMESTAMP این ستون شبه حاوی یک جدول زمانی برای شروع روز (در UTC) است که در آن داده ها بارگیری شده است. برای پارتیشن yyyymmdd ، این ستون شبه حاوی جدول زمانی ارزش ("yyyy-mm-dd") است.
Event_timestamp TIMESTAMP Timestamp رویداد همانطور که توسط سرور ثبت شده است
project_number عدد صحیح شماره پروژه پروژه ای را که پیام ارسال کرده است مشخص می کند
پیام_ ID STRING شناسه پیام یک پیام را مشخص می کند. تولید شده از شناسه برنامه و Timestamp ، شناسه پیام ممکن است در بعضی موارد در سطح جهانی بی نظیر نباشد.
نمونه_ id STRING شناسه منحصر به فرد برنامه ای که پیام به آن ارسال می شود (در صورت وجود). این می تواند یک شناسه نمونه یا شناسه نصب Firebase باشد.
پیام_ پیام STRING نوع پیام می تواند پیام اعلان یا پیام داده باشد. موضوع برای شناسایی پیام اصلی برای ارسال موضوع یا کمپین استفاده می شود. پیام های بعدی یا یک اعلان یا پیام داده است.
sdk_platform STRING بستر برنامه گیرنده
app_name 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;