برای عیبیابی مشکلات مداوم در تحویل پیام، از عیبیاب FCM استفاده کنید و این پست وبلاگ را ببینید تا دلایل مختلفی را که ممکن است پیامتان را نبینید متوجه شوید. همچنین میتوانید به داشبورد وضعیت FCM مراجعه کنید تا ببینید آیا اختلالات سرویس جاری بر FCM تأثیر میگذارد یا نه.
FCM همچنین سه مجموعه ابزار برای کمک به شما در کسب بینش درباره ارزیابی گسترده موفقیت و استراتژی پیامرسانی ارائه میدهد:
- Firebase گزارش تحویل پیام کنسول
- سنجههای تجمیعی ارائه کیت توسعه نرمافزار Android از Firebase Cloud Messaging Data API
- صادر کردن جامع دادهها به Google BigQuery
صادر کردن دادهها به BigQuery و
برگه گزارشها در کنسول Firebase هر دو
برای عملکرد به Google Analytics نیاز دارند. میتوانید
Google Analytics را در
بهخاطر داشته باشید که گزارش بسیاری از آمار در این صفحه، بهدلیل دستهبندی دادههای Analytics، ممکن است تا ۲۴ ساعت تأخیر داشته باشد.
گزارشهای تحویل پیام
در کنسول Firebase، به برگه DevOps و تعامل > پیامرسانی > گزارشها بروید تا دادههای زیر را برای پیامهای ارسالشده به کیتهای توسعه نرمافزار FCM پلاتفرم Android یا Apple، ازجمله پیامهای ارسالشده بااستفاده از سازنده اعلانها و FCM API مشاهده کنید:
- ارسالها — پیام داده یا پیام اعلان برای تحویل در صف قرار گرفته است یا با موفقیت به سرویس شخص ثالثی مانند APN برای تحویل منتقل شده است. توجه داشته باشید که آمار «ارسالها» ممکن است چند ساعت تأخیر داشته باشد. برای اطلاعات بیشتر، طول عمر پیام را ببینید.
- دریافتشده (فقط در دستگاههای Android دردسترس است) — پیام داده یا پیام اعلان توسط برنامه دریافت شده است. این دادهها زمانی دردسترس است که دستگاه Android دریافتکننده دارای FCM SDK 18.0.1 یا بالاتر باشد.
- بازدیدها (فقط برای پیامهای اعلان در دستگاههای Android دردسترس است) — اعلان نمایش در دستگاه نمایش داده شده است درحالیکه برنامه در پسزمینه است.
- باز کردن — کاربر پیام اعلان را باز کرده است. فقط برای اعلانهایی گزارش میشود که وقتی برنامه در پسزمینه است دریافت شدهاند.
این دادهها برای همه پیامهای دارای محموله اعلان و همه پیامهای داده برچسبگذاریشده دردسترس است. برای کسب اطلاعات بیشتر درباره برچسبها، به افزودن برچسبهای Analytics به پیامها مراجعه کنید.
هنگام مشاهده گزارشهای پیام، میتوانید محدوده تاریخی برای دادههای نمایشدادهشده تنظیم کنید، با گزینه صادر کردن به CSV. همچنین میتوانید براساس این معیارها فیلتر کنید:
- پلاتفرم (iOS یا Android)
- برنامه
- برچسبهای سفارشی Analytics
درحال افزودن برچسبهای تجزیهوتحلیل به پیامها
برچسبگذاری پیامها برای تجزیهوتحلیل سفارشی بسیار مفید است و به شما امکان میدهد
آمار تحویل را براساس برچسبها یا مجموعهای از برچسبها فیلتر کنید. میتوانید با تنظیم فیلد fcmOptions.analyticsLabel در شیء پیام یا در فیلدهای AndroidFcmOptions یا ApnsFcmOptions مختص پلاتفرم، به هر پیامی که بااستفاده از HTTP v1 API ارسال میشود برچسب اضافه کنید.
برچسبهای Analytics رشتههای نوشتاری در قالب ^[a-zA-Z0-9-_.~%]{1,50}$ هستند.
برچسبها میتوانند شامل حروف کوچک و بزرگ،
اعداد، و نمادهای زیر باشند:
-~%
حداکثر طول ۵۰ نویسه است. میتوانید حداکثر ۱۰۰ برچسب یکتا در روز مشخص کنید؛ پیامهایی که برچسبهای اضافهشده به آنها فراتر از این حد باشد گزارش نمیشوند.
در برگه گزارشها پیامرسانی کنسول Firebase، میتوانید فهرستی از همه برچسبهای موجود را جستجو کنید و آنها را بهصورت تکی یا ترکیبی برای فیلتر کردن آمار نمایشدادهشده اعمال کنید.
دادههای تجمیعی ارسال بااستفاده از FCM Data API
Firebase Cloud Messaging Data API به شما امکان میدهد اطلاعاتی را بازیابی کنید که میتواند به شما کمک کند نتایج درخواستهای پیام هدفیابیشده برای برنامههای Android را درک کنید. این میانای برنامهسازی کاربردی دادههای تجمیعی را در همه دستگاههای Android فعالشده برای جمعآوری داده در پروژه ارائه میدهد. این شامل جزئیاتی درباره درصد پیامهای تحویلشده بدون تأخیر و همچنین تعداد پیامهای تأخیریافته یا حذفشده در لایه انتقال Android است. ارزیابی این دادهها میتواند روندهای کلی در تحویل پیام را آشکار کند و به شما کمک کند راههای مؤثری برای بهبود عملکرد درخواستهای ارسال خود پیدا کنید. برای اطلاعات درباره دردسترس بودن محدوده تاریخ در گزارشها، خطوط زمان دادههای تجمیعی را ببینید.
این میانای برنامهسازی کاربردی همه دادههای دردسترس برای برنامه موردنظر را ارائه میدهد. اسناد مرجع میانای برنامهسازی کاربردی را ببینید.
دادهها چگونه تفکیک میشود؟
دادههای تحویل براساس برنامه، تاریخ، و برچسب Analytics تفکیک میشود.
فراخوانی میانای برنامهسازی کاربردی، دادههای مربوط به هر ترکیبی از تاریخ، برنامه، و برچسب تجزیهوتحلیل را برمیگرداند. برای
مثال، یک شیء JSON androidDeliveryData واحد شبیه این است:
{
"appId": "1:23456789:android:a93a5mb1234efe56",
"date": {
"year": 2021,
"month": 1,
"day": 1
},
"analyticsLabel": "foo",
"data": {
"countMessagesAccepted": "314159",
"messageOutcomePercents": {
"delivered": 71,
"pending": 15
},
"deliveryPerformancePercents": {
"deliveredNoDelay": 45,
"delayedDeviceOffline": 11
}
}
نحوه تفسیر سنجهها
دادههای تحویل درصد پیامهایی را که با هریک از سنجههای زیر مطابقت دارند نشان میدهد. ممکن است یک پیام با چند سنجه مطابقت داشته باشد. بهدلیل محدودیتهایی که در نحوه جمعآوری دادهها و سطح جزئیاتی که سنجهها را تجمیع کردهایم وجود دارد، برخیاز نتایج پیام اصلاً در سنجهها نشان داده نمیشود، بنابراین مجموع درصدهای زیر ۱۰۰٪ نخواهد بود.
تعداد پیامهای پذیرفتهشده
تنها شمارش موجود در مجموعه داده، شمارش پیامهایی است که FCM برای ارسال به دستگاههای Android پذیرفته است. همه درصدها از این مقدار بهعنوان مخرج استفاده میکنند. بهخاطر داشته باشید که این تعداد شامل پیامهایی که کاربرانی را هدف قرار دادهاند که جمعآوری اطلاعات استفاده و عیبیابی را در دستگاههایشان غیرفعال کردهاند نمیشود.
درصدهای نتیجه پیام
فیلدهای موجود در شیء
MessageOutcomePercents
اطلاعاتی درباره نتایج درخواستهای پیام ارائه میدهند. دستهها همگی مانعهالجمع هستند. این ابزار میتواند به سؤالاتی مانند «آیا پیامهای من تحویل داده میشوند؟» و «چه چیزی باعث میشود پیامها حذف شوند؟» پاسخ دهد.
برای مثال، مقدار بالا برای فیلد droppedTooManyPendingMessages میتواند
نشان دهد که نمونههای برنامه حجم زیادی از
پیامهای غیرقابلجمعکردن
دریافت میکنند که از حد مجاز FCM برای ۱۰۰ پیام معلقه فراتر میرود.
برای کاهش این مشکل، مطمئن شوید برنامهتان تماسها را به
onDeletedMessages
مدیریت میکند و ارسال پیامهای جمعشدنی را درنظر بگیرید. بههمینترتیب، درصد بالای
droppedDeviceInactive میتواند نشانهای برای بهروزرسانی کردن توکنهای ثبت در
سرور، برداشتن توکنهای قدیمی، و لغو اشتراک آنها از موضوعات باشد. برای روالهای مطلوب در این زمینه،
مدیریت کردن نشانهای ثبت FCM
را ببینید.
درصدهای عملکرد تحویل
فیلدهای موجود در شیء DeliveryPerformancePercents
اطلاعاتی درباره پیامهایی که با موفقیت تحویل داده شدهاند ارائه میدهند. این ابزار میتواند به سؤالاتی مانند «آیا پیامهای من تأخیر داشتند؟» و «چرا پیامها تأخیر دارند؟» پاسخ دهد. برای مثال، مقدار بالا برای
delayedMessageThrottled بهوضوح نشان میدهد که از
حداکثر محدودیتهای هر دستگاه فراتر رفتهاید،
و باید نرخ ارسال پیامها را تنظیم کنید.
درصدهای اطلاعات آماری پیام
این شیء اطلاعات بیشتری درباره همه پیامهای ارسالی ارائه میدهد. فیلد
priorityLowered درصد پیامهای پذیرفتهشدهای را نشان میدهد که
اولویت آنها از HIGH به NORMAL کاهش یافته است. اگر این مقدار بالا است، سعی کنید پیامهای با اولویت بالا کمتری ارسال کنید یا مطمئن شوید که
همیشه وقتی پیام با اولویت بالا ارسال میشود، اعلانی نمایش میدهید. برای اطلاعات بیشتر، اسناد ما درباره اولویت پیام را ببینید
این دادهها چه تفاوتی با دادههای صادرشده به BigQuery دارد؟
صادر کردن BigQuery گزارشهای پیامهای تکی را درباره پذیرش پیام توسط بخش پشتی FCM و تحویل پیام در کیت توسعه نرمافزار (SDK) در دستگاه ارائه میدهد (مراحل ۲ و ۴ معماری FCM). این دادهها برای اطمینان از اینکه پیامهای فردی پذیرفته و تحویل داده شدهاند مفید است. در بخش بعدی، درباره صادر کردن دادههای BigQuery بیشتر بخوانید.
درمقابل، Firebase Cloud Messaging Data API جزئیات تجمیعشدهای درباره آنچه بهطور خاص در «لایه انتقال Android» (یا مرحله ۳ از معماری FCM) اتفاق میافتد ارائه میدهد. این دادهها بهطور خاص اطلاعاتی درباره تحویل پیامها از پسزمینههای FCM به کیت توسعه نرمافزار Android ارائه میدهد. این گزارش بهویژه برای نشان دادن روندهای مربوط به علت تأخیر یا حذف پیامها درطول این انتقال مفید است.
در برخی موارد، ممکن است دو مجموعه داده بهدلایل زیر دقیقاً باهم مطابقت نداشته باشند:
- سنجههای انبوهشی فقط بخشی از همه پیامها را نمونهبرداری میکنند
- سنجههای تجمیعی گرد شدهاند
- سنجههای زیر آستانه حریم خصوصی را ارائه نمیدهیم
- بخشی از نتایج پیام بهدلیل بهینهسازیهایی که در نحوه مدیریت حجم بالای ترافیک انجام میدهیم وجود ندارد.
محدودیتهای میانای برنامهسازی کاربردی
خطوط زمان دادههای تجمیعی
این میانای برنامهسازی کاربردی دادههای قدیمی ۷ روز را برمیگرداند؛ بااینحال، دادههای برگرداندهشده توسط این میانای برنامهسازی کاربردی تا ۵ روز تأخیر خواهد داشت. برای مثال، در ۲۰ ژانویه، دادههای ۹ تا ۱۵ ژانویه دردسترس خواهد بود، اما دادههای ۱۶ ژانویه یا بعداز آن دردسترس نخواهد بود. علاوهبراین، دادهها با حداکثر تلاش ارائه میشود. درصورت قطعی داده، FCM برای رفع مشکل تلاش خواهد کرد و پساز رفع مشکل، دادهها را تکمیل نخواهد کرد. در قطعیهای بزرگتر، ممکن است دادهها برای یک هفته یا بیشتر دردسترس نباشد.
پوشش دادهها
سنجههای ارائهشده توسط Firebase Cloud Messaging Data API برای ارائه اطلاعات آماری درباره روندهای کلی ارسال پیام درنظر گرفته شده است. بااینحال، این موارد همه سناریوهای پیام را بهطور کامل پوشش نمیدهند. سناریوهای زیر نتایج شناختهشدهای هستند که در سنجهها منعکس نمیشوند.
پیامهای منقضیشده
اگر زمان بقا
(TTL)
پساز پایان تاریخ گزارش دادهشده منقضی شود، پیام بهعنوان
droppedTtlExpired در این تاریخ محاسبه نخواهد شد.
پیام به دستگاههای غیرفعال
پیامهای ارسالشده به دستگاههای غیرفعال ممکن است در مجموعه داده نشان داده شود یا نشود،
بسته به اینکه از کدام مسیر داده عبور کنند. این امر میتواند منجر به اشتباه در شمارش در فیلدهای droppedDeviceInactive و pending شود.
پیامهای ارسالشده به دستگاههایی با اولویتهای کاربری خاص
کاربرانی که جمعآوری اطلاعات استفاده و عیبیابی را در دستگاههایشان غیرفعال کردهاند، پیامهایشان در شمارش ما لحاظ نخواهد شد تا اولویتهایشان رعایت شود.
گرد کردن و حداقلها
FCM عمداً تعداد را گرد میکند و مواردی را که حجم آنها بهاندازه کافی بزرگ نیست مستثنی میکند.
صادر کردن دادههای BigQuery
میتوانید دادههای پیامتان را برای تجزیهوتحلیل بیشتر به BigQuery صادر کنید. BigQuery به شما امکان میدهد دادهها را بااستفاده از BigQuery SQL تجزیهوتحلیل کنید، آنها را به ارائهدهنده ابری دیگری صادر کنید، یا از دادهها برای مدلهای یادگیری ماشین سفارشیتان استفاده کنید. صادر کردن به BigQuery شامل همه دادههای دردسترس برای پیامها است، صرفنظر از نوع پیام یا اینکه پیام بااستفاده از API یا «سازنده اعلانها» ارسال شده باشد.
برای پیامهای ارسالشده به دستگاههایی با حداقل نسخههای کیت توسعه نرمافزار FCM زیر، گزینه دیگری برای فعال کردن صادر کردن دادههای تحویل پیام برای برنامهتان دارید:
- Android نسخه ۲۰.۱.۰ یا بالاتر.
- iOS نسخه ۸.۶.۰ یا بالاتر
- کیت توسعه نرمافزار Firebase Web نسخه ۱۲.۱۴.۰ یا بالاتر
برای شروع، پروژهتان را بااستفاده از کنسول Firebase به BigQuery پیوند دهید:
یکی از گزینههای زیر را انتخاب کنید:
به DevOps & Engagement > Messaging > the Notifications composer بروید، سپس روی Access BigQuery در پایین صفحه کلیک کنید.
به
تنظیمات > زبانه ادغامها بروید. سپس در BigQuery، روی پیوند کلیک کنید.این صفحه گزینههای صادر کردن FCM را برای همه برنامههای فعالشده با FCM در پروژه نمایش میدهد.
برای فعال کردن BigQuery، دستورالعملهای روی صفحه را دنبال کنید.
برای اطلاعات بیشتر، به پیوند دادن Firebase به BigQuery مراجعه کنید.
وقتی برونبرد BigQuery را برای Cloud Messaging فعال میکنید:
Firebase دادههایتان را به BigQuery صادر میکند. توجه داشته باشید که انتشار اولیه دادهها برای صادر کردن ممکن است تا ۴۸ ساعت طول بکشد تا تکمیل شود.
- میتوانید دادههای تکمیلی را بهصورت دستی برای حداکثر ۳۰ روز گذشته زمانبندی کنید.
پساز ایجاد مجموعه داده، مکان قابلتغییر نیست، اما میتوانید مجموعه داده را در مکان دیگری کپی کنید یا مجموعه داده را بهصورت دستی در مکان دیگری منتقل (بازآفرینی) کنید. برای کسب اطلاعات بیشتر، به تغییر مکان مجموعه داده مراجعه کنید.
Firebase همگامسازیهای منظمی را برای دادههایتان از پروژه Firebase به BigQuery راهاندازی میکند. این عملیات صادر کردن روزانه در ساعت ۴:۰۰ صبح بهوقت اقیانوس آرام شروع میشود و معمولاً ظرف ۲۴ ساعت بهپایان میرسد.
بهطور پیشفرض، همه برنامههای موجود در پروژهتان به BigQuery پیوند داده میشوند و هر برنامهای که بعداً به پروژه اضافه کنید بهطور خودکار به BigQuery پیوند داده میشود. میتوانید مدیریت کنید کدام برنامهها داده ارسال کنند.
برای غیرفعال کردن صادر کردن BigQuery، پیوند پروژهتان را در کنسول Firebase لغو کنید.
فعال کردن صادر کردن دادههای تحویل پیام
iOS+
دستگاههای iOS با کیت توسعه نرمافزار FCM نسخه ۸.۶.۰ یا بالاتر میتوانند صادر کردن دادههای تحویل پیام برنامه خود را فعال کنند. 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 کیت توسعه نرمافزار نسخه ۲۰.۱.۰ یا بالاتر میتوانند برونبرد دادههای تحویل پیام برنامه را فعال کنند. صادر کردن داده بهطور پیشفرض در سطح برنامه غیرفعال است. فعال کردن آن بهصورت برنامهنویسیشده در سطح نمونه برنامه به شما امکان میدهد از کاربران نهایی برای تجزیهوتحلیل دادههای تحویل پیام آنها اجازه بگیرید (توصیه میشود). وقتی هر دو تنظیم شده باشند، مقدار سطح نمونه برنامه بر مقدار سطح برنامه اولویت دارد.
قبلاز فعال کردن این گزینهها، ابتدا باید FCMپیوند BiqQuery را برای پروژهتان ایجاد کنید، همانطور که در صادر کردن دادههای BigQuery توضیح داده شده است.
فعال کردن صادر کردن دادههای تحویل برای نمونههای برنامه
در اکثر موارد، توصیه میکنیم صادر کردن دادههای تحویل پیام را فقط در سطح نمونه برنامه فعال کنید و آن را در سطح برنامه غیرفعال بگذارید.
FirebaseMessaging.getInstance().setDeliveryMetricsExportToBigQuery(true);
فعال کردن صادر کردن دادههای تحویل برای برنامه
اگر ترجیح میدهید صادر کردن را در سطح برنامه فعال کنید، مطمئن شوید که روش setDeliveryMetricsExportToBigQuery را فراخوانی نکنید و ویژگی زیر را به شیء برنامه در مانیفست برنامهتان اضافه کنید:
<application> <meta-data android:name="delivery_metrics_exported_to_big_query_enabled" android:value="true" /> </application>
وب
FCM SDK برای وب نسخه ۱۲.۱۴.۰ یا بالاتر امکان صادر کردن دادههای تحویل را فراهم میکند. صادر کردن دادهها بهطور پیشفرض در سطح برنامه غیرفعال است. فعال کردن آن بهصورت برنامهنویسیشده در سطح نمونه برنامه به شما امکان میدهد از کاربران نهایی برای تجزیهوتحلیل دادههای تحویل پیام آنها اجازه بگیرید (توصیه میشود). وقتی هر دو تنظیم شده باشند، مقدار سطح نمونه برنامه بر مقدار سطح برنامه اولویت دارد. وقتی کاربر نهایی با جمعآوری داده موافقت میکند یا آن را رد میکند، برنامه باید پرچم آزمایشی فعال یا غیرفعال را برای هر نمونه برنامه بهصورت زیر تنظیم کند:
// userConsent holds the decision of the user to give big query export consent. const userConsent = ...; const messaging = getMessagingInSw(app); experimentalSetDeliveryMetricsExportedToBigQueryEnabled(messaging, userConsent);
چه دادههایی به BigQuery صادر میشود؟
توجه داشته باشید که هدفیابی نشانهای قدیمی یا ثبتنامهای غیرفعال ممکن است برخیاز این آمار را افزایش دهد.
طرح جدول صادرشده عبارت است از:
| _PARTITIONTIME | مُهر زمان | این ستون کاذب حاوی مُهر زمان برای شروع روز (به وقت UTC) است که دادهها در آن بار شده است. برای پارتیشن YYYYMMDD، این ستون کاذب حاوی مقدار TIMESTAMP('YYYY-MM-DD') است. |
| event_timestamp | مُهر زمان | مُهر زمان رویداد که توسط سرور ضبط شده است |
| project_number | عدد صحیح | شماره پروژه، پروژهای را که پیام را ارسال کرده است شناسایی میکند |
| message_id | رشته | شناسه پیام، پیام را شناسایی میکند. شناسه پیام که از شناسه برنامه و مُهر زمان تولید میشود، ممکن است در برخی موارد در سطح جهانی یکتا نباشد. |
| instance_id | رشته | شناسه یکتای برنامهای که پیام به آن ارسال میشود (درصورت دردسترس بودن). این شناسه میتواند شناسه نمونه یا شناسه نصب Firebase باشد. |
| message_type | رشته | نوع پیام. میتواند پیام اعلان یا پیام داده باشد. موضوع برای شناسایی پیام اصلی برای ارسال موضوع یا پویش استفاده میشود؛ پیامهای بعدی یا اعلان هستند یا پیام داده. |
| sdk_platform | رشته | پلاتفرم برنامه گیرنده |
| app_name | رشته | نام بسته برای برنامههای Android یا شناسه بسته نرمافزاری برای برنامههای iOS |
| collapse_key | رشته | کلید جمع کردن گروهی از پیامها را که میتوانند جمع شوند شناسایی میکند. وقتی دستگاهی متصل نیست، فقط آخرین پیام با کلید جمعکردن دادهشده برای تحویل نهایی در صف قرار میگیرد |
| اولویتدار | عدد صحیح | اولویت پیام. ۵ اولویت «معمولی» و ۱۰ اولویت «بالا» است. |
| ttl | عدد صحیح | این پارامتر مشخص میکند که اگر دستگاه آفلاین باشد، پیام چه مدت (به ثانیه) باید در فضای ذخیرهسازی FCM نگهداری شود |
| موضوع | رشته | نام موضوعی که پیام به آن ارسال شده است (درصورت وجود) |
| bulk_id | عدد صحیح | شناسه انبوه گروهی از پیامهای مرتبط را شناسایی میکند، مثلاً ارسال خاصی به یک موضوع |
| رویداد | رشته | نوع رویداد.
مقادیر ممکن عبارتاند از:
|
| 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;