मैसेज डिलीवर न होने की समस्या को हल करने के लिए, एफ़सीएम से जुड़ी समस्या हल करने वाले टूल का इस्तेमाल करें. साथ ही, यह ब्लॉग पोस्ट पढ़ें. इससे आपको मैसेज न दिखने की अलग-अलग वजहों के बारे में पता चलेगा. FCM की सेवा में कोई रुकावट तो नहीं है, यह जानने के लिए FCM स्टेटस डैशबोर्ड पर जाएं.
FCM, तीन तरह के टूल भी उपलब्ध कराता है. इनकी मदद से, मैसेजिंग की सफलता और रणनीति का आकलन किया जा सकता है:
- Firebase कंसोल मैसेज की डिलीवरी की रिपोर्ट
- Firebase Cloud Messaging Data API से Android SDK टूल की डिलीवरी से जुड़ी एग्रीगेट की गई मेट्रिक
- Google BigQuery में पूरा डेटा एक्सपोर्ट करना
BigQuery में डेटा एक्सपोर्ट करने और Firebase कंसोल में रिपोर्ट टैब, दोनों के लिए Google Analytics की ज़रूरत होती है. Google Analytics को Firebase कंसोल के
ध्यान रखें कि इस पेज पर मौजूद कई आंकड़ों की रिपोर्टिंग में, 24 घंटे तक की देरी हो सकती है. ऐसा Analytics डेटा की बैचिंग की वजह से होता है.
मैसेज डिलीवरी की रिपोर्ट
Firebase कंसोल में, DevOps और जुड़ाव > मैसेजिंग > रिपोर्ट टैब पर जाएं. यहां आपको Android या Apple प्लैटफ़ॉर्म के FCM SDK टूल को भेजे गए मैसेज का यह डेटा दिखेगा. इसमें Notifications composer और FCM API का इस्तेमाल करके भेजे गए मैसेज भी शामिल हैं:
- भेजे गए — डेटा मैसेज या सूचना वाले मैसेज को डिलीवरी के लिए सूची में रखा गया है या डिलीवरी के लिए, APNs जैसी किसी तीसरे पक्ष की सेवा को भेज दिया गया है. ध्यान दें कि भेजे गए ईमेल के आंकड़ों को अपडेट होने में कुछ घंटे लग सकते हैं. ज़्यादा जानकारी के लिए, मैसेज की समयसीमा देखें.
- Received (यह सिर्फ़ Android डिवाइसों पर उपलब्ध है) — ऐप्लिकेशन को डेटा मैसेज या सूचना वाला मैसेज मिल गया है. यह डेटा तब उपलब्ध होता है, जब डेटा पाने वाले Android डिवाइस में FCM SDK टूल का 18.0.1 या इसके बाद का वर्शन इंस्टॉल हो.
- इंप्रेशन (सिर्फ़ Android डिवाइसों पर सूचना वाले मैसेज के लिए उपलब्ध है) — जब ऐप्लिकेशन बैकग्राउंड में चल रहा हो, तब डिवाइस पर डिसप्ले सूचना दिखाई गई हो.
- खोला गया — उपयोगकर्ता ने सूचना वाला मैसेज खोला. यह सिर्फ़ उन सूचनाओं के लिए रिपोर्ट किया जाता है जो ऐप्लिकेशन के बैकग्राउंड में होने पर मिलती हैं.
यह डेटा, सूचना पेलोड वाले सभी मैसेज और लेबल किए गए सभी डेटा मैसेज के लिए उपलब्ध है. लेबल के बारे में ज़्यादा जानने के लिए, मैसेज में आंकड़ों के लेबल जोड़ना लेख पढ़ें.
मैसेज की रिपोर्ट देखते समय, दिखाए गए डेटा के लिए तारीख की सीमा सेट की जा सकती है. साथ ही, इसे CSV फ़ाइल में एक्सपोर्ट किया जा सकता है. इन शर्तों के हिसाब से भी फ़िल्टर किया जा सकता है:
- प्लैटफ़ॉर्म (iOS या Android)
- ऐप्लिकेशन
- कस्टम Analytics लेबल
मैसेज में आंकड़ों के लेबल जोड़ना
मैसेज को लेबल करने की सुविधा, कस्टम विश्लेषण के लिए बहुत काम की है. इससे आपको लेबल या लेबल के सेट के हिसाब से डिलीवरी के आंकड़ों को फ़िल्टर करने की सुविधा मिलती है. एचटीटीपी v1 एपीआई का इस्तेमाल करके भेजे गए किसी भी मैसेज में लेबल जोड़ा जा सकता है. इसके लिए, message ऑब्जेक्ट में 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% नहीं होगा.
स्वीकार किए गए मैसेज की संख्या
डेटासेट में सिर्फ़ उन मैसेज की संख्या शामिल होती है जिन्हें FCM ने Android डिवाइसों पर डिलीवर करने के लिए स्वीकार किया था. सभी प्रतिशत, इस वैल्यू को हर के तौर पर इस्तेमाल करते हैं. ध्यान रखें कि इस संख्या में उन उपयोगकर्ताओं को भेजे गए मैसेज शामिल नहीं होंगे जिन्होंने अपने डिवाइसों पर, इस्तेमाल और गड़बड़ी की जानकारी इकट्ठा करने की सुविधा बंद कर दी है.
मैसेज के आउटकम का प्रतिशत
MessageOutcomePercents ऑब्जेक्ट में शामिल फ़ील्ड से, मैसेज के अनुरोधों के नतीजों के बारे में जानकारी मिलती है. सभी कैटगरी एक-दूसरे से अलग होती हैं. इससे, "क्या मेरे मैसेज डिलीवर हो रहे हैं?" और "मैसेज डिलीवर न होने की क्या वजह है?" जैसे सवालों के जवाब मिल सकते हैं.
उदाहरण के लिए, droppedTooManyPendingMessages फ़ील्ड की ज़्यादा वैल्यू से यह पता चल सकता है कि ऐप्लिकेशन इंस्टेंस को छोटे न किए जा सकने वाले मैसेज की ज़्यादा संख्या मिल रही है. यह संख्या, FCM के 100 मैसेज की सीमा से ज़्यादा है.
इस समस्या को कम करने के लिए, पक्का करें कि आपका ऐप्लिकेशन onDeletedMessages पर कॉल हैंडल करता हो. साथ ही, छोटे किए जा सकने वाले मैसेज भेजने पर विचार करें. इसी तरह, droppedDeviceInactive के लिए ज़्यादा प्रतिशत, आपके सर्वर पर रजिस्ट्रेशन टोकन अपडेट करने का सिग्नल हो सकता है. इससे पुराने टोकन हटाए जा सकते हैं और उन्हें विषयों से अनसब्सक्राइब किया जा सकता है. इस बारे में सबसे सही तरीके जानने के लिए, FCM रजिस्ट्रेशन टोकन मैनेज करें लेख पढ़ें.
डिलीवरी की परफ़ॉर्मेंस के प्रतिशत
DeliveryPerformancePercents ऑब्जेक्ट के फ़ील्ड से, डिलीवर किए गए मैसेज की जानकारी मिलती है. इससे, "क्या मेरे मैसेज देर से डिलीवर हुए?" और "मैसेज देर से डिलीवर क्यों हुए?" जैसे सवालों के जवाब मिल सकते हैं. उदाहरण के लिए, delayedMessageThrottled की ज़्यादा वैल्यू से साफ़ तौर पर पता चलेगा कि आपने हर डिवाइस के लिए तय की गई ज़्यादा से ज़्यादा सीमा को पार कर लिया है. साथ ही, आपको मैसेज भेजने की दर में बदलाव करना चाहिए.
मैसेज की अहम जानकारी का प्रतिशत
यह ऑब्जेक्ट, भेजे गए सभी मैसेज के बारे में ज़्यादा जानकारी देता है. priorityLowered फ़ील्ड, स्वीकार किए गए उन मैसेज का प्रतिशत दिखाता है जिनकी प्राथमिकता को HIGH से घटाकर NORMAL कर दिया गया था. अगर यह वैल्यू ज़्यादा है, तो ज़्यादा प्राथमिकता वाले कम मैसेज भेजें या पक्का करें कि ज़्यादा प्राथमिकता वाला मैसेज भेजे जाने पर, हमेशा सूचना दिखाई जाए. ज़्यादा जानकारी के लिए, मैसेज की प्राथमिकता के बारे में हमारा दस्तावेज़ देखें
यह डेटा, BigQuery में एक्सपोर्ट किए गए डेटा से कैसे अलग है?
BigQuery एक्सपोर्ट की मदद से, हर मैसेज के लॉग की जानकारी मिलती है. इसमें यह जानकारी शामिल होती है कि FCM बैकएंड ने मैसेज को स्वीकार किया है या नहीं और डिवाइस पर एसडीके में मैसेज डिलीवर हुआ है या नहीं. यह FCM आर्किटेक्चर का दूसरा और चौथा चरण है. यह डेटा यह पक्का करने के लिए काम का है कि अलग-अलग मैसेज स्वीकार किए गए और डिलीवर किए गए. अगले सेक्शन में, BigQuery में डेटा एक्सपोर्ट करने के बारे में ज़्यादा जानें.
इसके उलट, Firebase क्लाउड से मैसेज Data API, Android ट्रांसपोर्ट लेयर (या FCM आर्किटेक्चर के तीसरे चरण) में होने वाली गतिविधियों के बारे में एग्रीगेट की गई जानकारी देता है. इस डेटा से खास तौर पर, FCM बैकएंड से Android SDK को मैसेज डिलीवर करने के बारे में अहम जानकारी मिलती है. यह खास तौर पर यह दिखाने के लिए काम आता है कि इस ट्रांसपोर्ट के दौरान, मैसेज क्यों देर से डिलीवर हुए या क्यों डिलीवर नहीं हुए.
कुछ मामलों में, ऐसा हो सकता है कि ये दोनों डेटा सेट पूरी तरह से मेल न खाएं. इसकी वजहें ये हो सकती हैं:
- कुल मेट्रिक, सभी मैसेज के सिर्फ़ एक हिस्से का सैंपल लेती हैं
- एग्रीगेट की गई मेट्रिक को राउंड किया जाता है
- हम निजता थ्रेशोल्ड से कम मेट्रिक नहीं दिखाते
- ज़्यादा ट्रैफ़िक को मैनेज करने के तरीके में किए गए ऑप्टिमाइज़ेशन की वजह से, मैसेज के नतीजों का कुछ हिस्सा मौजूद नहीं है.
एपीआई की सीमाएं
एग्रीगेट किए गए डेटा की टाइमलाइन
एपीआई, सात दिनों का पुराना डेटा दिखाएगा. हालांकि, इस एपीआई से मिलने वाले डेटा में पांच दिनों तक की देरी हो सकती है. उदाहरण के लिए, 20 जनवरी को 9 जनवरी से 15 जनवरी तक का डेटा उपलब्ध होगा. हालांकि, 16 जनवरी या उसके बाद का डेटा उपलब्ध नहीं होगा. इसके अलावा, डेटा को बेहतर तरीके से उपलब्ध कराया जाता है. डेटा आउटेज की स्थिति में, FCM डेटा को आगे भेजने की सुविधा को ठीक करने के लिए काम करेगा. समस्या ठीक होने के बाद, वह डेटा को फिर से नहीं भरेगा. अगर आउटेज ज़्यादा समय तक रहता है, तो हो सकता है कि डेटा एक हफ़्ते या उससे ज़्यादा समय तक उपलब्ध न हो.
डेटा कवरेज
Firebase Cloud Messaging Data API से मिली मेट्रिक का मकसद, मैसेज डिलीवरी के बड़े रुझानों के बारे में अहम जानकारी देना है. हालांकि, ये सभी मैसेज के लिए 100% कवरेज नहीं देते. यहां कुछ ऐसी स्थितियों के बारे में बताया गया है जो मेट्रिक में नहीं दिखतीं.
समयसीमा खत्म होने के बाद मैसेज
अगर लॉग की तारीख खत्म होने के बाद टाइम टू लिव (टीटीएल) खत्म होता है, तो इस तारीख को मैसेज को droppedTtlExpired के तौर पर नहीं गिना जाएगा.
इनऐक्टिव डिवाइसों को भेजे गए मैसेज
इनऐक्टिव डिवाइसों पर भेजे गए मैसेज, डेटासेट में दिख भी सकते हैं और नहीं भी. यह इस बात पर निर्भर करता है कि वे किस डेटा पाथ का इस्तेमाल करते हैं. इस वजह से, droppedDeviceInactive और pending फ़ील्ड में कुछ गलतियां हो सकती हैं.
उपयोगकर्ता की कुछ खास प्राथमिकताओं के हिसाब से डिवाइसों को भेजे जाने वाले मैसेज
जिन उपयोगकर्ताओं ने अपने डिवाइसों पर, इस्तेमाल और गड़बड़ी की जानकारी इकट्ठा करने की सुविधा बंद की है उनके मैसेज को हम नहीं गिनेंगे. ऐसा उनकी प्राथमिकताओं के मुताबिक किया जाएगा.
दशमलव वाली संख्या को पूर्णांक में बदलना और कम से कम वैल्यू
FCM, जान-बूझकर उन मामलों में गिनती को राउंड करता है और उन्हें शामिल नहीं करता जहां वॉल्यूम काफ़ी ज़्यादा नहीं होते.
BigQuery में डेटा एक्सपोर्ट करना
ज़्यादा विश्लेषण के लिए, मैसेज के डेटा को BigQuery में एक्सपोर्ट किया जा सकता है. BigQuery की मदद से, BigQuery SQL का इस्तेमाल करके डेटा का विश्लेषण किया जा सकता है. साथ ही, डेटा को क्लाउड की सेवा देने वाली किसी दूसरी कंपनी के प्लैटफ़ॉर्म पर एक्सपोर्ट किया जा सकता है या अपने कस्टम एमएल मॉडल के लिए इस्तेमाल किया जा सकता है. BigQuery में एक्सपोर्ट किए गए डेटा में, मैसेज के लिए उपलब्ध सारा डेटा शामिल होता है. इससे कोई फ़र्क़ नहीं पड़ता कि मैसेज किस तरह का है या उसे एपीआई या सूचना बनाने की सुविधा का इस्तेमाल करके भेजा गया है.
FCM SDK टूल के इन कम से कम वर्शन वाले डिवाइसों पर भेजे गए मैसेज के लिए, आपके पास अपने ऐप्लिकेशन के लिए मैसेज डिलीवरी डेटा को एक्सपोर्ट करने की सुविधा चालू करने का अतिरिक्त विकल्प होता है:
- Android 20.1.0 या इसके बाद का वर्शन.
- iOS 8.6.0 या इसके बाद का वर्शन
- Firebase Web SDK 12.14.0 या इसके बाद का वर्शन
शुरू करने के लिए, Firebase कंसोल का इस्तेमाल करके अपने प्रोजेक्ट को BigQuery से लिंक करें:
नीचे से कोई एक विकल्प चुनें:
DevOps और यूज़र ऐक्टिविटी > मैसेजिंग > सूचना बनाने की सुविधा पर जाएं. इसके बाद, पेज पर सबसे नीचे मौजूद BigQuery ऐक्सेस करें पर क्लिक करें.
सेटिंग > इंटिग्रेशन टैब पर जाएं. इसके बाद, BigQuery में जाकर, लिंक करें पर क्लिक करें.इस पेज पर, प्रोजेक्ट में FCM की सुविधा वाले सभी ऐप्लिकेशन के लिए, FCM एक्सपोर्ट करने के विकल्प दिखते हैं.
BigQuery को चालू करने के लिए, स्क्रीन पर दिए गए निर्देशों का पालन करें.
ज़्यादा जानकारी के लिए, Firebase को BigQuery से लिंक करना लेख पढ़ें.
Cloud Messaging के लिए BigQuery एक्सपोर्ट करने की सुविधा चालू करने पर:
Firebase, BigQuery में आपका डेटा एक्सपोर्ट करता है. ध्यान दें कि एक्सपोर्ट के लिए डेटा को पहली बार प्रोसेस होने में 48 घंटे लग सकते हैं.
- पिछले 30 दिनों तक के लिए, डेटा बैकफ़िल को मैन्युअल तरीके से शेड्यूल किया जा सकता है.
डेटासेट बनाने के बाद, उसकी जगह को बदला नहीं जा सकता. हालांकि, डेटासेट को किसी दूसरी जगह पर कॉपी किया जा सकता है. इसके अलावा, मैन्युअल तरीके से डेटासेट को किसी दूसरी जगह पर ले जाया जा सकता है, यानी कि इसे फिर से बनाया जा सकता है. ज़्यादा जानने के लिए, डेटासेट की जगह की जानकारी बदलना लेख पढ़ें.
Firebase, आपके Firebase प्रोजेक्ट से BigQuery में डेटा को नियमित तौर पर सिंक करता है. डेटा एक्सपोर्ट करने की ये प्रोसेस, हर दिन सुबह 4:00 बजे पैसिफ़िक समय के मुताबिक शुरू होती हैं. आम तौर पर, इन्हें पूरा होने में 24 घंटे लगते हैं.
आपके प्रोजेक्ट के सभी ऐप्लिकेशन डिफ़ॉल्ट रूप से, BigQuery से लिंक होते हैं. साथ ही, बाद में प्रोजेक्ट में जोड़े जाने वाले ऐप्लिकेशन भी अपने-आप BigQuery से लिंक कर दिए जाते हैं. आपके पास BigQuery में डेटा भेजने वाले ऐप्लिकेशन चुनने का विकल्प होता है.
BigQuery एक्सपोर्ट की सुविधा बंद करने के लिए, Firebase कंसोल में जाकर अपने प्रोजेक्ट को अनलिंक करें.
मैसेज डिलीवरी का डेटा एक्सपोर्ट करने की सुविधा चालू करना
iOS+
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.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
FCM SDK टूल के 20.1.0 या इसके बाद के वर्शन वाले Android डिवाइसों पर, ऐप्लिकेशन के मैसेज डिलीवरी डेटा को एक्सपोर्ट करने की सुविधा चालू की जा सकती है. डिफ़ॉल्ट रूप से, ऐप्लिकेशन लेवल पर डेटा एक्सपोर्ट करने की सुविधा बंद होती है. इसे प्रोग्राम के हिसाब से ऐप्लिकेशन इंस्टेंस लेवल पर चालू करने से, असली उपयोगकर्ताओं से उनके मैसेज डिलीवरी डेटा का विश्लेषण करने की अनुमति मांगी जा सकती है (सुझाया गया). दोनों वैल्यू सेट होने पर, ऐप्लिकेशन इंस्टेंस लेवल की वैल्यू, ऐप्लिकेशन लेवल की वैल्यू को बदल देती है.
इन विकल्पों को चालू करने से पहले, आपको अपने प्रोजेक्ट के लिए FCM-BigQuery लिंक बनाना होगा. इसके बारे में BigQuery में डेटा एक्सपोर्ट करना लेख में बताया गया है.
ऐप्लिकेशन इंस्टेंस के लिए, डिलीवरी डेटा एक्सपोर्ट करने की सुविधा चालू करना
ज़्यादातर मामलों में, हमारा सुझाव है कि मैसेज डिलीवरी का डेटा एक्सपोर्ट करने की सुविधा को सिर्फ़ ऐप्लिकेशन इंस्टेंस लेवल पर चालू करें. साथ ही, इसे ऐप्लिकेशन लेवल पर बंद रखें.
FirebaseMessaging.getInstance().setDeliveryMetricsExportToBigQuery(true);
किसी ऐप्लिकेशन के लिए, डिलीवरी डेटा एक्सपोर्ट करने की सुविधा चालू करना
अगर आपको ऐप्लिकेशन के लेवल पर एक्सपोर्ट करने की सुविधा चालू करनी है, तो पक्का करें कि आपने setDeliveryMetricsExportToBigQuery तरीके को न बुलाया हो. साथ ही, अपने ऐप्लिकेशन के ऐप्लिकेशन मेनिफ़ेस्ट में मौजूद ऐप्लिकेशन ऑब्जेक्ट में यह प्रॉपर्टी जोड़ें:
<application> <meta-data android:name="delivery_metrics_exported_to_big_query_enabled" android:value="true" /> </application>
वेब
FCM SDK for Web 12.14.0 या इसके बाद के वर्शन की मदद से, डिलीवरी का डेटा एक्सपोर्ट किया जा सकता है. डेटा एक्सपोर्ट करने की सुविधा, ऐप्लिकेशन लेवल पर डिफ़ॉल्ट रूप से बंद होती है. इसे प्रोग्राम के हिसाब से ऐप्लिकेशन इंस्टेंस लेवल पर चालू करने से, आपको असली उपयोगकर्ताओं से उनके मैसेज डिलीवरी डेटा का विश्लेषण करने की अनुमति मांगने का विकल्प मिलता है. हमारा सुझाव है कि आप ऐसा करें. दोनों वैल्यू सेट होने पर, ऐप्लिकेशन इंस्टेंस लेवल की वैल्यू, ऐप्लिकेशन लेवल की वैल्यू को बदल देती है. जब कोई असली उपयोगकर्ता, डेटा कलेक्शन के लिए सहमति देता है या उसे अस्वीकार करता है, तो ऐप्लिकेशन को हर ऐप्लिकेशन इंस्टेंस के लिए, एक्सपेरिमेंट के तौर पर चालू या बंद करने का फ़्लैग सेट करना चाहिए. इसके बारे में यहां बताया गया है:
// userConsent holds the decision of the user to give big query export consent. const userConsent = ...; const messaging = getMessagingInSw(app); experimentalSetDeliveryMetricsExportedToBigQueryEnabled(messaging, userConsent);
BigQuery में किस तरह का डेटा एक्सपोर्ट किया जाता है?
ध्यान दें कि पुराने टोकन या ऐसे रजिस्ट्रेशन को टारगेट करने से, इन आंकड़ों में से कुछ बढ़ सकते हैं जो अब चालू नहीं हैं.
एक्सपोर्ट की गई टेबल का स्कीमा यह है:
| _PARTITIONTIME | टाइमस्टैंप | इस सूडो कॉलम में, दिन की शुरुआत का टाइमस्टैंप (यूटीसी में) होता है. इसमें डेटा लोड किया गया था. YYYYMMDD पार्टीशन के लिए, इस स्यूडो कॉलम में TIMESTAMP('YYYY-MM-DD') वैल्यू होती है. |
| event_timestamp | टाइमस्टैंप | सर्वर से रिकॉर्ड किया गया इवेंट का टाइमस्टैंप |
| project_number | पूर्णांक | प्रोजेक्ट नंबर से उस प्रोजेक्ट की पहचान होती है जिसने मैसेज भेजा है |
| message_id | स्ट्रिंग | मैसेज आईडी से किसी मैसेज की पहचान की जाती है. ऐप्लिकेशन आईडी और टाइमस्टैंप से जनरेट किया गया मैसेज आईडी, कुछ मामलों में दुनिया भर में यूनीक नहीं हो सकता. |
| instance_id | स्ट्रिंग | उस ऐप्लिकेशन का यूनीक आईडी जिसमें मैसेज भेजा गया है (उपलब्ध होने पर). यह कोई इंस्टेंस आईडी या Firebase इंस्टॉलेशन आईडी हो सकता है. |
| message_type | स्ट्रिंग | मैसेज किस तरह का है. यह सूचना वाला मैसेज या डेटा मैसेज हो सकता है. विषय का इस्तेमाल, किसी विषय या कैंपेन के लिए भेजे गए ओरिजनल मैसेज की पहचान करने के लिए किया जाता है; इसके बाद के मैसेज, सूचना या डेटा मैसेज होते हैं. |
| sdk_platform | स्ट्रिंग | मैसेज पाने वाले ऐप्लिकेशन का प्लैटफ़ॉर्म |
| app_name | स्ट्रिंग | Android ऐप्लिकेशन के लिए पैकेज का नाम या iOS ऐप्लिकेशन के लिए बंडल आईडी |
| collapse_key | स्ट्रिंग | कोलैप्स बटन, मैसेज के ऐसे ग्रुप की पहचान करता है जिसे छोटा किया जा सकता है. जब कोई डिवाइस कनेक्ट नहीं होता है, तो सिर्फ़ उस मैसेज को सूची में रखा जाता है जिसमें छोटा करने वाली कुंजी दी गई हो. इससे, डिवाइस के कनेक्ट होने पर मैसेज डिलीवर हो जाता है |
| प्राथमिकता | पूर्णांक | मैसेज की प्राथमिकता. 5 का मतलब "सामान्य" प्राथमिकता और 10 का मतलब "ज़्यादा" प्राथमिकता है. |
| ttl | पूर्णांक | इस पैरामीटर से यह तय होता है कि डिवाइस के ऑफ़लाइन होने पर, मैसेज को FCM स्टोरेज में कितने समय (सेकंड में) तक रखा जाना चाहिए |
| topic | स्ट्रिंग | वह विषय जिस पर मैसेज भेजा गया था (अगर लागू हो) |
| bulk_id | पूर्णांक | बल्क आईडी, मिलते-जुलते मैसेज के ग्रुप की पहचान करता है. जैसे, किसी विषय पर भेजे गए मैसेज |
| इवेंट | स्ट्रिंग | इवेंट का टाइप.
इन वैल्यू का इस्तेमाल किया जा सकता है:
|
| analytics_label | स्ट्रिंग | एचटीटीपी v1 एपीआई की मदद से, मैसेज भेजते समय आंकड़ों का लेबल सेट किया जा सकता है. इससे मैसेज को आंकड़ों के मकसद से मार्क किया जा सकता है |
एक्सपोर्ट किए गए डेटा का इस्तेमाल कैसे किया जा सकता है?
यहां दिए गए सेक्शन में, उन क्वेरी के उदाहरण दिए गए हैं जिन्हें 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;