मैसेज डिलीवर न होने की समस्या को हल करने के लिए, एफ़सीएम से जुड़ी समस्या हल करने वाले टूल का इस्तेमाल करें. साथ ही, यह ब्लॉग पोस्ट पढ़ें. इससे आपको मैसेज न दिखने की अलग-अलग वजहों के बारे में पता चलेगा. FCM स्टेटस डैशबोर्ड पर जाकर भी यह पता लगाया जा सकता है कि क्या सेवा में कोई ऐसी रुकावट आ रही है जिससे FCM पर असर पड़ रहा है.
FCM, टूल के तीन सेट भी उपलब्ध कराता है. इनकी मदद से, मैसेज सेवा की सफलता और रणनीति का बड़े पैमाने पर आकलन करने के बारे में अहम जानकारी मिलती है:
- Firebase कंसोल मैसेज की डिलीवरी रिपोर्ट
- Firebase Cloud Messaging Data API से Android SDK टूल की डिलीवरी से जुड़ी एग्रीगेट की गई मेट्रिक
- Google BigQuery में पूरा डेटा एक्सपोर्ट करने की सुविधा
BigQuery में डेटा एक्सपोर्ट करने और Firebase कंसोल में रिपोर्ट टैब का इस्तेमाल करने के लिए, Google Analytics की ज़रूरत होती है. Google Analytics को Firebase कंसोल के
ध्यान रखें कि इस पेज पर मौजूद कई आंकड़ों की रिपोर्टिंग में, 24 घंटे तक की देरी हो सकती है. ऐसा, आंकड़ों के डेटा को बैच में प्रोसेस करने की वजह से होता है.
मैसेज डिलीवरी की रिपोर्ट
Firebase कंसोल में, DevOps और यूज़र ऐक्टिविटी > मैसेजिंग > रिपोर्ट टैब पर जाएं. यहां आपको Android या Apple प्लैटफ़ॉर्म के FCM SDK टूल को भेजे गए मैसेज का डेटा दिखेगा. इसमें, सूचना बनाने की सुविधा और FCM एपीआई का इस्तेमाल करके भेजे गए मैसेज भी शामिल हैं:
- भेजे गए — डेटा मैसेज या सूचना वाले मैसेज को डिलीवरी के लिए सूची में रखा गया है या डिलीवरी के लिए, 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 क्लाउड से मैसेज के डेटा एपीआई की मदद से, ऐसी जानकारी हासिल की जा सकती है जिससे 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 क्लाउड से मैसेज का डेटा एपीआई, एग्रीगेट की गई जानकारी उपलब्ध कराता है. यह जानकारी, खास तौर पर Android ट्रांसपोर्ट लेयर (या FCM आर्किटेक्चर के तीसरे चरण) में होने वाली गतिविधियों के बारे में होती है. इस डेटा से खास तौर पर, एफ़सीएम बैकएंड से Android SDK टूल को मैसेज डिलीवर करने के बारे में अहम जानकारी मिलती है. यह खास तौर पर, इस तरह के रुझान दिखाने के लिए मददगार है कि इस ट्रांसपोर्ट के दौरान मैसेज में देरी क्यों हुई या उन्हें क्यों छोड़ा गया.
कुछ मामलों में, ऐसा हो सकता है कि दोनों डेटा सेट पूरी तरह से मेल न खाएं. इसकी वजहें यहां दी गई हैं:
- एग्रीगेट की गई मेट्रिक में, सभी मैसेज का सिर्फ़ एक हिस्सा शामिल होता है
- एग्रीगेट की गई मेट्रिक को राउंड किया जाता है
- हम निजता थ्रेशोल्ड से कम मेट्रिक नहीं दिखाते
- ज़्यादा ट्रैफ़िक को मैनेज करने के तरीके में किए गए ऑप्टिमाइज़ेशन की वजह से, मैसेज के नतीजों का कुछ हिस्सा मौजूद नहीं है.
एपीआई की सीमाएं
कुल डेटा की टाइमलाइन
एपीआई, सात दिनों का पुराना डेटा दिखाएगा. हालांकि, इस एपीआई से मिलने वाले डेटा में पांच दिनों तक की देरी हो सकती है. उदाहरण के लिए, 20 जनवरी को 9 जनवरी से 15 जनवरी तक का डेटा उपलब्ध होगा. हालांकि, 16 जनवरी या उसके बाद का डेटा उपलब्ध नहीं होगा. इसके अलावा, डेटा को बेहतर तरीके से उपलब्ध कराया जाता है. डेटा आउटेज होने पर, FCM समस्या को ठीक करने के लिए काम करेगा. हालांकि, समस्या ठीक होने के बाद, डेटा को बैकफ़िल नहीं करेगा. अगर आउटेज ज़्यादा समय तक रहता है, तो हो सकता है कि डेटा एक हफ़्ते या उससे ज़्यादा समय तक उपलब्ध न हो.
डेटा कवरेज
Firebase क्लाउड से मैसेज 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-BiqQuery लिंक बनाना होगा. इसके बारे में 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-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 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 | TIMESTAMP | इस सूडो कॉलम में, दिन की शुरुआत का टाइमस्टैंप (यूटीसी में) होता है. इसमें डेटा लोड किया गया था. YYYYMMDD पार्टीशन के लिए, इस सूडो कॉलम में TIMESTAMP('YYYY-MM-DD') वैल्यू होती है. |
| event_timestamp | टाइमस्टैंप | सर्वर से रिकॉर्ड किया गया इवेंट का टाइमस्टैंप |
| project_number | पूर्णांक | प्रोजेक्ट नंबर से उस प्रोजेक्ट की पहचान होती है जिससे मैसेज भेजा गया है |
| message_id | स्ट्रिंग | मैसेज आईडी से किसी मैसेज की पहचान की जाती है. ऐप्लिकेशन आईडी और टाइमस्टैंप से जनरेट किया गया मैसेज आईडी, कुछ मामलों में दुनिया भर में यूनीक नहीं हो सकता. |
| instance_id | स्ट्रिंग | उस ऐप्लिकेशन का यूनीक आईडी जिसमें मैसेज भेजा गया है (उपलब्ध होने पर). यह कोई इंस्टेंस आईडी या Firebase इंस्टॉलेशन आईडी हो सकता है. |
| message_type | स्ट्रिंग | मैसेज किस तरह का है. यह सूचना वाला मैसेज या डेटा मैसेज हो सकता है. Topic का इस्तेमाल, किसी विषय या कैंपेन के लिए भेजे गए ओरिजनल मैसेज की पहचान करने के लिए किया जाता है. इसके बाद भेजे जाने वाले मैसेज, सूचना या डेटा मैसेज होते हैं. |
| 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;