मैसेज डिलीवरी को समझना

FCM, मैसेज डिलीवरी के बारे में अहम जानकारी पाने के लिए, तीन तरह के टूल उपलब्ध कराता है:

  • Firebase कंसोल मैसेज की डिलीवरी रिपोर्ट
  • Firebase Cloud Messaging Data API से मिली, Android SDK टूल की डिलीवरी की एग्रीगेट की गई मेट्रिक
  • Google BigQuery में पूरा डेटा एक्सपोर्ट करना

इस पेज पर बताए गए शिकायत करने के लिए इस्तेमाल होने वाले सभी टूल के काम करने के लिए, Google Analytics की ज़रूरत होती है. अगर आपके प्रोजेक्ट के लिए Google Analytics चालू नहीं है, तो इसे Firebase प्रोजेक्ट की सेटिंग के इंटिग्रेशन टैब में सेट अप किया जा सकता है.

ध्यान रखें कि इस पेज पर मौजूद कई आंकड़ों की रिपोर्टिंग, आंकड़ों के डेटा को एक साथ इकट्ठा करने की वजह से, 24 घंटे तक देर से दिख सकती है.

मैसेज की डिलीवरी की रिपोर्ट

Firebase कंसोल में रिपोर्ट टैब में, Android या Apple प्लैटफ़ॉर्म के FCM SDKs पर भेजे गए मैसेज का यह डेटा देखा जा सकता है. इसमें, सूचनाएं बनाने वाले टूल और FCM API के ज़रिए ��ेजे गए मैसेज भी शामिल हैं:

  • भेजा गया — डेटा मैसेज या सूचना मैसेज को डिलीवरी के लिए सूची में डाल दिया गया है या डिलीवरी के लिए, एपीएन जैसी तीसरे पक्ष की सेवा को भेज दिया गया है. ज़्यादा जानकारी के लिए, मैसेज के सेव रहने की अवधि देखें.
  • मिला (सिर्फ़ Android डिवाइसों पर उपलब्ध है) — ऐप्लिकेशन को डेटा मैसेज या सूचना मैसेज मिल गया है. यह डेटा तब उपलब्ध होता है, जब मैसेज पाने वाले Android डिवाइस में FCM SDK टूल 18.0.1 या इसके बाद का वर्शन इंस्टॉल हो.
  • इंप्रेशन (सिर्फ़ Android डिवाइसों पर सूचना मैसेज के लिए उपलब्ध है) — ऐप्लिकेशन के बैकग्राउंड में चलने के दौरान, डिसप्ले सूचना डिवाइस पर दिखाई गई है.
  • खुलता है — उपयोगकर्ता ने सूचना का मैसेज खोला. सिर्फ़ उन सूचनाओं के लिए रिपोर्ट किया जाता है जो ऐप्लिकेशन के बैकग्राउंड में होने पर मिलती हैं.

यह डेटा, सूचना वाले पेलोड वाले सभी मैसेज और लेबल किए गए सभी डेटा मैसेज के लिए उपलब्ध है. लेबल के बारे में ज़्यादा जानने के लिए, मैसेज में आंकड़े वाले लेबल जोड़ना लेख पढ़ें.

मैसेज की रिपोर्ट देखते समय, दिखाए गए डेटा के लिए तारीख की सीमा सेट की जा सकती है. साथ ही, CSV में डेटा एक्सपोर्ट करने का विकल्प भी चुना जा सकता है. इन शर्तों के हिसाब से भी फ़िल्टर किया जा सकता है:

  • प्लैटफ़ॉर्म (iOS या Android)
  • ऐप्लिकेशन
  • कस्टम आंकड़े लेबल

मैसेज में आंकड़ों के लेबल जोड़ना

मैसेज पर लेबल लगाना, कस्टम विश्लेषण के लिए काफ़ी मददगार होता है. इससे, डिलीवरी के आंकड़ों को लेबल या लेबल के सेट के हिसाब से फ़िल्टर किया जा सकता है. एचटीटीपी v1 एपीआई के ज़रिए भेजे गए किसी भी मैसेज में लेबल जोड़ा जा सकता है. इसके लिए, मैसेज ऑब्जेक्ट में fcmOptions.analyticsLabel फ़ील्ड य�� प्लैटफ़ॉर्म के हिसाब से AndroidFcmOptions या ApnsFcmOptions फ़ील्ड सेट करें.

Analytics लेबल, ^[a-zA-Z0-9-_.~%]{1,50}$ फ़ॉर्मैट में टेक्स्ट स्ट्रिंग होते हैं. लेबल में अंग्रेज़ी के छोटे और बड़े अक्षर, संख्याएं, और ये चिह्न शामिल हो सकते हैं:

  • -
  • ~
  • %

इसमें 50 से ज़्यादा वर्ण नहीं होने चाहिए. हर दिन 100 यूनीक लेबल जोड़े जा सकते हैं. इस सीमा से ज़्यादा लेबल जोड़े जाने पर, उन मैसेज की रिपोर्ट नहीं की जाती.

Firebaseकंसोल मैसेजिंग रिपोर्ट टैब में, सभी मौजूदा लेबल की सूची खोजी जा सकती है. साथ ही, दिखाए गए आंकड़ों को फ़िल्टर करने के लिए, उन्हें एक-एक करके या एक साथ लागू किया जा सकता है.

FCM Data API की मदद से एग्रीगेट किया गया डिलीवरी डेटा

Firebase Cloud Messaging Data API की मदद से, ऐसी जानकारी हासिल की जा सकती है जिससे आपको Android ऐप्लिकेशन के लिए टारगेट किए गए मैसेज के अनुरोधों के नतीजों को समझने में मदद मिल सकती है. एपीआई, किसी प्रोजेक्ट में डेटा इकट्ठा करने की सुविधा वाले सभी Android डिवाइसों का एग्रीगेट किया गया डेटा उपलब्ध कराता है. इसमें, बिना किसी देरी के डिलीवर किए गए मैसेज के प्रतिशत की जानकारी के साथ-साथ, Android ट्रांसपोर्ट लेयर में कितने मैसेज देर से डिलीवर हुए या कितने मैसेज डिलीवर नहीं हो पाए, इसकी जानकारी भी शामिल होती है. इस डेटा का आकलन करने से, मैसेज डिलीवरी के बड़े रुझान का पता चल सकता है. साथ ही, आपको मैसेज भेजने के अनुरोधों की परफ़ॉर्मेंस को बेहतर बनाने के असरदार तरीके खोजने में मदद मिल सकती है. रिपोर्ट में तारीख की सीमा की उपलब्धता के बारे में जानकारी के लिए, एग्रीगेट डेटा टाइमलाइन देखें.

एपीआई, किसी ऐप्लिकेशन के लिए उपलब्ध सारा डेटा उपलब्ध कराता है. एपीआई का र��फ़रंस दस्तावेज़ देखें.

डेटा को किस तरह बांटा गया है?

डिलीवरी डेटा को ऐप्लिकेशन, तारीख, और Analytics लेबल के हिसाब से बांटा जाता है. एपीआई को कॉल करने पर, तारीख, ऐप्लिकेशन, और आंकड़ों के लेबल के हर कॉम्बिनेशन के लिए डेटा दिखेगा. उदाहरण के लिए, एक 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% नहीं होगा.

स्वीकार किए गए मैसेज की संख्या

डेटासेट में सिर्फ़ उन मैसेज की संख्या शामिल होती है जिन्हें Android डिवाइसों पर डिलीवर करने के लिए, FCM ने स्वीकार किया था. सभी प्रतिशत, इस वैल्यू का इस्तेमाल, हर numerator के तौर पर करते हैं. ध्यान रखें कि इस गिनती में, उन उपयोगकर्ताओं को टारगेट किए गए मैसेज शामिल नहीं होंगे जिन्होंने अपने डिवाइसों पर, ऐप्लिकेशन के इस्तेमाल और गड़बड़ी की जानकारी इकट्ठा करने की सुविधा बंद की है.

मैसेज के नतीजे का प्रतिशत

MessageOutcomePercents ऑब्जेक्ट में शामिल फ़ील्ड, मैसेज के अनुरोधों के नतीजों के बारे में जानकारी देते हैं. सभी कैटगरी एक-दूसरे से अलग होती हैं. इससे, "क्या मेरे मैसेज डिलीवर हो रहे हैं?" और "मैसेज डिलीवर न होने की वजह क्या है?" जैसे सवालों के जवाब मिल सकते हैं.

उदाहरण के लिए, droppedTooManyPendingMessages फ़ील्ड की ज़्यादा वैल्यू से यह पता चल सकता है कि ऐप्लिकेशन इंस्टेंस को ऐसे मैसेज काफ़ी संख्या में मिल रहे हैं जिन्हें छोटा नहीं किया जा सकता. इन मैसेज की संख्या, FCM की 100 मैसेज की सीमा से ज़्यादा है. इस समस्या को कम करने के लिए, पक्का करें कि आपका ऐप्लिकेशन onDeletedMessages पर आने वाले कॉल को मैनेज करता हो. साथ ही, छोटा किया जा सकने वाले मैसेज भेजने पर विचार करें. इसी तरह, droppedDeviceInactive के लिए ज़्यादा प्रतिशत का मतलब यह हो सकता है कि आपको अपने सर्वर पर रजिस्ट्रेशन टोकन अपडेट करने होंगे. साथ ही, पुराने टोकन हटाने होंगे और उन्हें विषयों से सदस्यता हटानी होगी. इस बारे में सबसे सही तरीके जानने के लिए, FCM रजिस्ट्रेशन टोकन मैनेज करें लेख पढ़ें.

डिलीवरी की परफ़ॉर्मेंस का प्रतिशत

DeliveryPerformancePercents ऑब्जेक्ट के फ़ील्ड से, डिलीवर किए गए मैसेज के बारे में जानकारी मिलती है. इससे, "क्या मेरे मैसेज देर से डिलीवर हुए?" और "मैसेज देर से डिलीवर क्यों हो रहे हैं?" जैसे सवालों के जवाब मिल सकते हैं. उदाहरण के लिए, delayedMessageThrottled की ज़्यादा वैल्यू से साफ़ तौर पर पता चलता है कि आपने हर डिवाइस के लिए तय की गई ज़्यादा से ज़्यादा सीमा को पार कर लिया है. साथ ही, आपको मैसेज भेजने की दर में बदलाव करना चाहिए.

मैसेज की अहम जानकारी के प्रतिशत

यह ऑब्जेक्ट, भेजे गए सभी मैसेज के बारे में ज़्यादा जानकारी देता है. priorityLowered फ़ील्ड से, स्वीकार किए गए उन मैसेज का प्रतिशत पता चलता है जिनकी प्राथमिकता HIGH से NORMAL पर घटाई गई थी. अगर यह वैल्यू ज़्यादा है, तो ज़्यादा प्राथमिकता वाले कम मैसेज भेजें या पक्का करें कि ज़्यादा प्राथमिकता वाला मैसेज भेजने पर, आपको हमेशा सूचना दिखे. मैसेज की प्राथमिकता के बारे में ज़्यादा जानकारी के लिए, हमारा दस्तावेज़ देखें

यह डेटा, BigQuery में एक्सपोर्ट किए गए डेटा से कैसे अलग है?

BigQuery एक्सपोर्ट, FCM बैकएंड के ज़रिए मैसेज स्वीकार किए जाने और डिवाइस पर SDK में मैसेज डिलीवरी के बारे में अलग-अलग मैसेज लॉग उपलब्ध कराता है. ये लॉग, FCM आर्किटेक्चर के दूसरे और चौथे चरण के होते हैं. इस डेटा से यह पक्का करने मे�� मदद मिलती है कि मैसेज को स्वीकार किया गया है और डिलीवर किया गया है. अगले सेक्शन में, BigQuery डेटा एक्सपोर्ट के बारे में ज़्यादा पढ़ें.

इसके उलट, Firebase Cloud Messaging Data API, Android ट्रांसपोर्ट लेयर (या FCM आर्किटेक्चर के तीसरे चरण) में होने वाली गतिविधियों के बारे में इकट्ठा की गई जानकारी देता है. इस डेटा से, FCM बैकएंड से Android SDK टूल पर मैसेज डिलीवर करने के बारे में अहम जानकारी मिलती है. यह खास तौर पर उन रुझानों को दिखाने के लिए मददगार है जिनकी वजह से इस ट्रांसपोर्ट के दौरान मैसेज भेजने में देरी हुई या वे डिलीवर नहीं हो पाए.

कुछ मामलों में, ऐसा हो सकता है कि दोनों डेटा सेट पूरी तरह से मेल न खाएं. ऐसा इन वजहों से हो सकता है:

  • एग्रीगेट की गई मेट्रिक, सभी मैसेज का सिर्फ़ एक हिस्सा सैंपल करती हैं
  • एग्रीगेट की गई मेट्रिक को राउंड किया जाता है
  • हम निजता थ्रेशोल्ड से नीचे की मेट्रिक नहीं दिखाते
  • ज़्यादा ट्रैफ़िक को मैनेज करने के तरीके को ऑप्टिमाइज़ करने की वजह से, मैसेज के नतीजों का कुछ हिस्सा मौजूद नहीं है.

एपीआई की सीमाएं

एग्रीगेट किए गए डेटा की टाइमलाइन

एपीआई, सात दिन का पुराना डेटा दिखाएगा. हालांकि, इस एपीआई से मिलने वाले डेटा में पांच दिन तक की देरी हो सकती है. उदाहरण के लिए, 20 जनवरी को 9 जनवरी से 15 जनवरी तक का डेटा उपलब्ध होगा, लेकिन 16 जनवरी या उसके बाद का डेटा उपलब्ध नहीं होगा. इसके अलावा, डेटा को सबसे सही तरीके से उपलब्ध कराया जाता है. डेटा के उपलब्ध न होने की स्थिति में, FCM आगे की समस्या को ठीक करने के लिए काम करेगा. समस्या ठीक होने के बाद, वह डेटा को बैकफ़िल नहीं करेगा. लंबे समय तक रुकावट ��ोने पर, डेटा एक हफ़्ते या उससे ज़्यादा समय तक उपलब्ध नहीं हो सकता.

डेटा कवरेज

Firebase Cloud Messaging Data API की दी गई मेट्रिक का मकसद, मैसेज डिलीवरी के बड़े रुझानों के बारे में अहम जानकारी देना है. हालांकि, ये सभी मैसेज के मामलों में 100% कवरेज नहीं देते. यहां दी गई स्थितियां, मेट्रिक में दिखने वाले नतीजे नहीं हैं.

समयसीमा खत्म हो चुके मैसेज

अगर लाइव रहने का समय (TTL), लॉग की गई तारीख के बाद खत्म हो जाता है, तो इस तारीख को मैसेज को droppedTtlExpired के तौर पर नहीं गिना जाएगा.

बंद डिवाइसों पर मैसेज भेजना

बंद डिवाइसों पर भेजे गए मैसेज, डेटासेट में दिख सकते हैं या नहीं. यह इस बात पर निर्भर करता है कि वे किस डेटा पाथ का इस्तेमाल करते हैं. इससे droppedDeviceInactive और pending फ़ील्ड में गिनती गलत हो सकती है.

उपयोगकर्ता की कुछ खास प्राथमिकताओं वाले डिवाइसों पर मैसेज भेजना

जिन उपयोगकर्ताओं ने अपने डिवाइसों पर, इस्तेमाल और गड़बड़ी की जानकारी इकट्ठा करने की सेटिंग बंद की है उनकी प्राथमिकताओं के मुताबिक, उनके मैसेज की गिनती में शामिल नहीं किया जाएगा.

राउंड ऑफ़ और कम से कम वैल्यू

FCM, जहां डेटा की संख्या काफ़ी नहीं होती वहां डेटा को राउंड ऑफ़ कर देता है और उसे गिनती में शामिल नहीं करता.

BigQuery डेटा एक्सपोर्ट

ज़्यादा विश्लेषण के लिए, अपने मैसेज का डेटा BigQuery में एक्सपोर्ट किया जा सकता है. BigQuery की मदद से, BigQuery SQL का इस्तेमाल करके डेटा का विश्लेषण किया जा सकता है. साथ ही, डेटा को किसी दूसरे क्लाउड सेवा देने वाली कंपनी के पास एक्सपोर्ट किया जा सकता है या अपने कस्टम एमएल मॉडल के लिए डेटा का इस्तेमाल किया जा सकता है. BigQuery में एक्सपोर्ट किए गए डेटा में, मैसेज का सारा उपलब्ध डेटा शामिल होता है. भले ही, मैसेज का टाइप कुछ भी हो या मैसेज को एपीआई या सूचनाएं कंपोज़र के ज़रिए भेजा गया हो.

FCM SDK टूल के इन कम से कम वर्शन वाले डिवाइसों पर भेजे गए मैसेज के लिए, आपके पास अपने ऐप्लिकेशन के लिए मैसेज डिलीवरी डेटा को एक्सपोर्ट करने की सुविधा चालू करने का ��िकल्प होता है:

  • Android 20.1.0 या इसके बाद का वर्शन.
  • iOS 8.6.0 या इसके बाद का वर्शन
  • Firebase Web SDK टूल 9.0.0 या इसके बाद का वर्शन

Android और iOS के लिए डेटा एक्सपोर्ट करने की सुविधा चालू करने के बारे में जानकारी यहां देखें.

शुरू करने के लिए, अपने प्रोजेक्ट को BigQuery से लिंक करें:

  1. नीचे से कोई एक विकल्प चुनें:

    • सूचनाएं कंपोज़र खोलें. इसके बाद, पेज पर सबसे नीचे मौजूद BigQuery ऐक्सेस करें पर क्लिक करें.

    • Firebase कंसोल में, इंटिग्रेशन पेज पर जाकर, BigQuery कार्ड में लिंक करें पर क्लिक करें.

      इस पेज पर, प्रोजेक्ट में मौजूद उन सभी ऐप्लिकेशन के लिए FCM एक्सपोर्ट करने के विकल्प दिखते हैं जिनमें FCM की सुविधा चालू है.

  2. BigQuery को चालू करने के लिए, स्क्रीन पर दिए गए निर्देशों का पालन करें.

ज़्यादा जानकारी के लिए, Firebase को BigQuery से लिंक करना लेख पढ़ें.

Cloud Messaging के लिए BigQuery एक्सपोर्ट करने की सुविधा चालू करने पर:

  • Firebase, BigQuery में आपका डेटा एक्सपोर्ट करता है. ध्यान दें कि एक्सपोर्ट के लिए डेटा का शुरुआती प्रॉपेगेशन पूरा होने में 48 घंटे लग सकते हैं.

  • डेटासेट बनाने के बाद, उसकी जगह को बदला नहीं जा सकता. हालांकि, डेटासेट को किसी दूसरी जगह पर कॉपी किया जा सकता है या मैन्युअल तरीके से किसी दूसरी जगह पर ले जाया जा सकता है, यानी कि इसे फिर से बनाया जा सकता है. ज़्यादा जानने के लिए, डेटासेट की जगह बदलना लेख पढ़ें.

  • Firebase, आपके Firebase प्रोजेक्ट से BigQuery पर डेटा के ��ियमित सिंक को सेट अप करता है. हर दिन होने वा��े ��े ��क������ोर्ट ऑपरेशन, पैसिफ़िक टाइम के मुताबिक सुबह 4 बजे शुरू होते हैं और आम तौर पर 24 घंटे में पूरे हो जाते हैं.

  • आपके प्रोजेक्ट के सभी ऐप्लिकेशन डिफ़ॉल्ट रूप से, BigQuery से लिंक होते हैं. साथ ही, बाद में प्रोजेक्ट में जोड़े जाने वाले ऐप्लिकेशन भी अपने-आप BigQuery से लिंक कर दिए जाते हैं. आपके पास BigQuery में डेटा भेजने वाले ऐप्लिकेशन चुनने का विकल्प होता है.

BigQuery एक्सपोर्ट की सुविधा बंद करने के लिए, Firebase कंसोल में जाकर, अपने प्रोजेक्ट को अनलिंक करें.

मैसेज डिलीवरी का डेटा एक्सपोर्ट करने की सुविधा चालू करना

FCM SDK 8.6.0 या इसके बाद के वर्शन वाले iOS डिवाइसों पर, ऐप्लिकेशन के मैसेज डिलीवरी डेटा को एक्सपोर्ट करने की सुविधा चालू की जा सकती है. FCM सूचना और बैकग्राउंड सूचना, दोनों के लिए डेटा एक्सपोर्ट करने की सुविधा देता है. इन विकल्पों को चालू करने से पहले, आपको अपने प्रोजेक्ट के लिए FCM-BigQuery लिंक बनाना होगा. इसके बारे में BigQuery डेटा एक्सपोर्ट में बताया गया है.

सूचनाओं के लिए डिलीवरी डेटा एक्सपोर्ट करने की सुविधा चालू करना

सिर्फ़ सूचनाएं, सूचना सेवा ऐप्लिकेशन के एक्सटेंशन को ट्रिगर कर सकती हैं. इसलिए, आपको अपने ऐप्लिकेशन में सूचना सेवा एक्सटेंशन जोड़ना होगा. साथ ही, डिसप्ले मैसेज ट्रैकिंग की सुविधा चालू करने के लिए, सेवा एक्सटेंशन में इस एपीआई को कॉल करना होगा. डिलीवर की गई नई सूचनाओं में कॉन्टेंट में बदलाव करने के बारे में Apple का दस्तावेज़ देखें.

मिलने वाली हर सूचना के लिए, यह कॉल करना ज़रूरी है:

Swift

// For alert notifications, call the API inside the service extension:
class NotificationService: UNNotificationServiceExtension {
  override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
  Messaging.extensionHelper()
      .exportDeliveryMetricsToBigQuery(withMessageInfo:request.content.userInfo)
  }
}

Objective-C

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

अगर एचटीटीपी 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.extensionHelper().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

BigQuery में कौनसा डेटा एक्सपोर्ट किया जाता है?

ध्यान दें कि पुराने टोकन या इनऐक्टिव रजिस्ट्रेशन को टारगेट करने से, इनमें से कुछ आंकड़ों में बढ़ोतरी हो सकती है.

एक्सपोर्ट की गई टेबल का स्कीमा यह है:

_PARTITIONTIME TIMESTAMP इस क��लम में, उस दिन के शुरू होने का टाइमस्टैंप (यूटीसी में) होता है जिसमें डेटा लोड किया गया था. YYYYMMDD पार्टीशन के लिए, इस स्यूडो कॉलम में TIMESTAMP('YYYY-MM-DD') वैल्यू होती है.
event_timestamp TIMESTAMP सर्वर से रिकॉर्ड किया गया इवेंट टाइमस्टैंप
project_number पूर्णांक प्रोजेक्ट नंबर से उस प्रोजेक्ट की पहचान होती है जिसने मैसेज भेजा है
message_id स्ट्रिंग मैसेज आईडी से किसी मैसेज की पहचान की जाती है. ऐप्लिकेशन आईडी और टाइमस्टैंप से जनरेट किया गया मैसेज आईडी, कुछ मामलों में दुनिया भर में यूनीक नहीं हो सकता.
instance_id स्ट्रिंग उस ऐप्लिकेशन का यूनीक आईडी जिसमें मैसेज भेजा गया है (अगर उपलब्ध हो). यह इंस्टेंस आईडी या Firebase इंस्टॉलेशन आईडी हो सकता है.
message_type स्ट्रिंग मैसेज का टाइप. यह सूचना मैसेज या डेटा मैसेज हो सकता है. Topic का इस्तेमाल, किसी विषय या कैंपेन के लिए भेजे गए मूल मैसेज की पहचान करने के लिए किया जाता है. इसके बाद भेजे जाने वाले मैसेज, सूचना या डेटा मैसेज होते हैं.
sdk_platform स्ट्रिंग ईमेल पाने वाले ऐप्लिकेशन का प्लैटफ़ॉर्म
app_name स्ट्रिंग Android ऐप्लिकेशन के लिए पैकेज का नाम या iOS ऐप्लिकेशन के लिए बंडल आईडी
collapse_key स्ट्रिंग छोटा करने की सुविधा वाले बटन से, मैसेज के उस ग्रुप की पहचान होती है जिसे छोटा किया जा सकता है. जब कोई डिवाइस कनेक्ट नहीं होता है, तो डिलीवरी के लिए सिर्फ़ आखिरी मैसेज को कतार में रखा जाता है. इसमें, मैसेज को छोटा करने के लिए इस्तेमाल की गई कुंजी शामिल होती है
प्राथमिकता पूर्णांक मैसेज की प्राथमिकता. मान्य वैल्यू "सामान्य" और "ज़्यादा" हैं. iOS पर, ये APNs की प्राथमिकताओं 5 और 10 से मेल खाते हैं
ttl पूर्णांक इस पैरामीटर से पता चलता है कि डिवाइस के ऑफ़लाइन होने पर, संदेश को FCM स्टोरेज में कितने समय (सेकंड में) तक रखा जाना चाहिए
topic स्ट्रिंग उस विषय का नाम जिस पर मैसेज भेजा गया था (लागू होने पर)
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: पु���्टि करने से जुड़ी गड़बड़ी की वजह से, मैसेज भेजने का अनुरोध अस्वीकार कर दिया गया. मैसेज भेजने के लिए इस्तेमाल किए गए एपीआई पासकोड की जांच करें;
  • INVALID_TTL: अमान्य टाइम टू लिव (TTL) की वजह से, मैसेज भेजने का अनुरोध अस्वीकार कर दिया गया.
analytics_label स्ट्रिंग एचटीटीपी v1 एपीआई की मदद से, मैसेज भेजते समय आंकड़ों का लेबल सेट किया जा सकता है, ताकि मैसेज को आंकड़ों के लिए मार्क किया जा सके

एक्सपोर्ट किए गए डेटा का क्या किया जा सकता है?

यहां दिए गए सेक्शन में, ऐसी क्वेरी के उदाहरण दिए गए हैं जिन्हें एक्सपोर्ट किए गए FCM डेटा के लिए, BigQuery में चलाया जा सकता है.

ऐप्लिकेशन के हिसाब से भेजे गए मैसेज की संख्या

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;