9

मैं क्रोम पर पुश सूचनाओं को लागू करने के लिए फायरबेस के साथ सेवा कार्यकर्ता का उपयोग करने की कोशिश कर रहा हूं। मेरे पास मेरे वेब ऐप में एक मेनिफेस्ट फ़ाइल और एक sw.js फ़ाइल है। मैंने फायरबेस में एक प्रोजेक्ट बनाया है और मैंने पंजीकरण और अधिसूचनाएं भेजने का परीक्षण किया है। यह सब ठीक काम करता है सिवाय इसके कि नोटिफिकेशन प्राप्त करते समय डेटा शून्य है। मुझे समझ में नहीं आता क्यों और कोई सहायक संसाधन नहीं हैं (मेरे ज्ञान के लिए!)।पुश अधिसूचनाओं के लिए एफसीएम के साथ सेवा कार्यकर्ता का उपयोग कैसे करें

if ('serviceWorker' in navigator) { 
    navigator.serviceWorker.register('/sw.js').then(function(registration) { 
    // Registration was successful 
    console.log('ServiceWorker registration successful with scope: ', registration.scope); 
    registration.pushManager.subscribe({ 
     userVisibleOnly: true 
    }).then(function(sub) { 
     console.log('endpoint:', sub.endpoint); 
    }).catch(function(e) { 

    }); 
    }).catch(function(err) { 
    // registration failed :(
    console.log('ServiceWorker registration failed: ', err); 
    }); 
} 

manifest.json:

{ 
    "name": "APPNAME", 
    "gcm_sender_id": "SENDERID" 
} 

cURL अनुरोध:

curl --header "Authorization: key=APIKEY" -application/json" https://fcm.googleapis.com/fcm/send -d "{\"registration_ids\":[\"REGISTRATIONID\"],\"notification\":{\"title\":\"test\",\"body\":\"testing\"},\"data\":{\"title\":\"erse\"}}" 

self.addEventListener('push', function(event) { 
    console.log('Push message', event); 
    var title = 'Push message'; 
    event.waitUntil(
    self.registration.showNotification(title, { 
     body: 'The Message', 
     icon: 'images/logo.svg', 
     tag: 'my-tag' 
    })); 
}); 

यहाँ मेरी main.js फ़ाइल है: यहाँ मेरी सेवा कार्यकर्ता फ़ाइल है

पुश घटना fr का कंसोल लॉग ओम sw.js: enter image description here

मुझे अनुरोध में भेजे गए किसी भी डेटा को प्राप्त नहीं हो रहा है। क्या यह फायरबेस के साथ कुछ और तरीका है? अग्रिम धन्यवाद।

+0

[जीसीएम पुश अधिसूचना के साथ डेटा पोस्ट करना] का संभावित डुप्लिकेट (http://stackoverflow.com/questions/37966954/posting-data-with-gcm-push-notification) – Marco

+0

मुझे यह समस्या भी है – ihsansat

+0

वर्तमान में हैकिंग पर हैकिंग एक ही समस्या है। ऐसा नहीं लगता कि फायरबेस वर्तमान में वेबपश का समर्थन करता है जिसे हम सेवावर्कर्स के साथ प्राप्त करते हैं .. – pascalwhoop

उत्तर

5

this के अनुसार, आप क्रोम संस्करण 50 के बाद क्रोम अधिसूचना संस्करण के साथ डेटा भेज सकते हैं।

क्रोम 50 से पहले, पुश संदेशों में कोई पेलोड डेटा नहीं हो सका। जब आपके सेवा कार्यकर्ता में 'पुश' ईवेंट निकाल दिया गया था, तो आपको पता था कि सर्वर आपको कुछ बताने की कोशिश कर रहा था, लेकिन यह नहीं कि यह क्या हो सकता है। इसके बाद आपको सर्वर पर फॉलो अप अनुरोध करना था और दिखाने के लिए अधिसूचना का विवरण प्राप्त करना था, जो खराब नेटवर्क स्थितियों में विफल हो सकता है।

अब क्रोम 50 (और डेस्कटॉप पर फ़ायरफ़ॉक्स के वर्तमान संस्करण में) में आप पुश के साथ कुछ मनमाना डेटा भेज सकते हैं ताकि ग्राहक अतिरिक्त अनुरोध करने से बच सके। हालांकि, महान शक्ति के साथ बड़ी ज़िम्मेदारी आती है, इसलिए सभी पेलोड डेटा एन्क्रिप्ट किया जाना चाहिए।

अपने वर्तमान कार्यान्वयन के लिए आप कुछ इस तरह कर सकते हैं:

self.addEventListener('push', function(event) { 

var apiPath = '<apiPath>'; 
event.waitUntil(registration.pushManager.getSubscription().then(function (subscription){ 

    return fetch(apiPath).then(function(response){ 
     if(response.status !== 200){ 
      throw new Error(); 
     } 

     return response.json().then(function(data){ 
      var title = data.title; 
      var message = data.body; 
      var icon = data.icon; 
      var tag = data.tag; 
      var url = data.url; 
      return self.registration.showNotification(title,{ 
       body: message, 
       icon: icon, 
       tag: tag, 
       data: url 
      }); 
     }) 
    }).catch(function(err){ 

    }) 

})); 
return; 
}); 

किसी भी विशिष्ट अधिसूचना जो विशेष उपयोगकर्ता से संबंधित हो सकता के लिए, आप API URL में कार्यकर्ता की पंजीकरण आईडी के पैरामीटर पारित कर सकते हैं और उस विशेष आईडी के लिए अधिसूचना प्राप्त करें। उम्मीद है कि यह मदद करता है!

+0

मुझे सूचित करने के लिए बहुत बहुत धन्यवाद कि अब यह संभव है – TheSabby

+0

apiPath क्या है? –

+0

एपीआई पथ अनुरोध यूआरएल है जो आपको अधिसूचना डेटा प्रदान करता है। – doubt

0

this tutorial के अनुसार यदि आप वर्तमान में नहीं किसी भी डेटा GCM में भेज सकते हैं:

क्रोम में पुश API के वर्तमान कार्यान्वयन के लिए एक नकारात्मक पक्ष यह है कि आप एक धक्का संदेश के साथ किसी भी डेटा नहीं भेज सकते। नहीं, कुछ भी नहीं। इसका कारण यह है कि भविष्य में कार्यान्वयन में, पुश मैसेजिंग एंडपॉइंट पर भेजे जाने से पहले पेलोड डेटा को आपके सर्वर पर एन्क्रिप्ट किया जाना होगा। इस तरह एंडपॉइंट, जो भी पुश प्रदाता है, वह आसानी से पुश संदेश की सामग्री को देखने में सक्षम नहीं होगा। यह अन्य सर्वरों और पुश प्रदाता के बीच एचटीटीपीएस प्रमाण पत्रों के खराब सत्यापन और मैन-इन-द-बीच हमलों जैसी अन्य भेद्यताओं के खिलाफ भी सुरक्षा करता है। हालांकि, यह एन्क्रिप्शन अभी तक समर्थित नहीं है, इसलिए इस बीच आपको अधिसूचना को पॉप्युलेट करने के लिए आवश्यक जानकारी प्राप्त करने के लिए एक लाने की आवश्यकता होगी।

संबंधित मुद्दे