5

मैं वेब पुश एपीआई here के क्रोम के कार्यान्वयन के लिए दस्तावेज़ों के माध्यम से पढ़ रहा हूं, और मैंने देखा कि एपीआई कहता है, "जब भी आपको पुश प्राप्त होता है तो आप अधिसूचना दिखाने का वादा करते हैं" और इसके तहत बताए गए सीमाओं के तहत "आपको पुश संदेश प्राप्त होने पर अधिसूचना दिखाने के लिए में है"।Google क्रोम साइलेंट पुश नोटिफिकेशन

मेरे लोकहोस्ट पर उदाहरण लागू करने के बाद, मैंने पुल अधिसूचना सफलतापूर्वक भेजने के लिए curl का उपयोग किया। मैं उत्सुक था, इसलिए मैंने उन पंक्तियों पर टिप्पणी की जो वास्तव में शो नोटिफिकेशन फ़ंक्शन को कॉल करते हैं, और इसके बजाय एक console.log में डालते हैं और पाते हैं कि मैं वास्तव में, पुश अधिसूचना भेज सकता हूं, प्राप्त कर सकता हूं और पूरी तरह से अनदेखा कर सकता हूं। मैंने यह भी नियंत्रित करने के लिए एक if-statement का उपयोग करने का प्रयास किया कि वैश्विक बूलियन के आधार पर उन्हें दिखाने के लिए या नहीं, जिसे मैंने अपने मुख्य पृष्ठ से नियंत्रित किया था, और यह काम किया। तो मैं सोच रहा था कि क्या किसी को पता था कि उन्हें एक अधिसूचना दिखाने की ज़रूरत है, और यह कि चुप पुश सूचनाएं उपलब्ध नहीं थीं?

यह सिर्फ इसके लिए नहीं था, मुझे वैध रूप से यह नियंत्रित करने की आवश्यकता हो सकती है कि इन सूचनाओं को मेरे वेब ऐप में दिखाना है या नहीं, इसलिए यह वास्तव में संभव होगा यदि यह वास्तव में संभव हो। यदि आप उत्सुक हैं तो नीचे दिए गए कोड।

self.addEventListener('push', function(event) { 
    var title = 'New Message'; 
    var body = 'You have received a new message!'; 
    var icon = '/img/favicon.png'; 
    var tag = 'well-notification'; 
    console.log("DID RECEIVE NOTIFICATION") 

    if(settingsShowNotification) { 
    event.waitUntil(
     self.registration.showNotification(title, { 
     body: body, 
     icon: icon, 
     tag: tag 
     }) 
    ); 
    } 
}); 

संपादित करें: क्रोम 47 पर, यदि यह प्रासंगिक है।

अद्यतन: आगे प्रयोग करने के बाद, मुझे स्पष्ट मुद्दा मिला कि उपयोगकर्ता मूल वैश्विक चर अद्यतन नहीं कर सकता है जब उपयोगकर्ता नेविगेट हो जाता है और फिर उसी पृष्ठ पर फिर से नेविगेट करता है। हालांकि, मैं सेवा कार्यकर्ता पर एक चर का उपयोग करके इसे रोकने में सक्षम था और शो नोटिफिकेशन बूलियन टॉगल करने के लिए here वर्णित एपीआई का उपयोग कर सेवा कार्यकर्ता को एक संदेश भेज रहा था।

उत्तर

7

आपको एक अधिसूचना दिखाना है, और यदि आप अधिसूचना नहीं दिखाते हैं तो आपको ब्राउजर से एक जबरन अधिसूचना मिलती है कि "यह साइट पृष्ठभूमि में अपडेट की गई है"। लेकिन डरावनी संदेश दिखाने वाली आवश्यकताओं को थोड़ा आराम दिया गया है:

जनवरी 16 के अनुसार, ऐसा लगता है कि प्रत्येक 10 अधिसूचनाओं की जांच की जाती है कि प्रत्येक ने अधिसूचना दिखायी है या नहीं। यदि पिछले दस अधिसूचनाओं में एक अधिसूचना अधिसूचना नहीं दिखाती है, तो यह एक दुर्घटना माना जाता है और ब्राउज़र डरावनी नहीं दिखाएगा "यह साइट पृष्ठभूमि में अपडेट की गई है"। आपको डरावनी संदेश दिखाई देने के लिए पिछले दस में दो नोटिफिकेशन याद करना होगा।

नोट: सक्रिय ब्राउज़र टैब के एड्रेस बार में URL आपके पेज की उत्पत्ति से मेल खाता है, और ब्राउज़र नहीं कम से कम है, तो आप कर रहे हैं नहीं एक अधिसूचना दिखाने के लिए आवश्यक। यह संभवतः आपके परीक्षणों को सफल करते समय, यदि आप पृष्ठ पर थे तो आपके परीक्षण सफल हुए।

क्रोमियम बग कार्यान्वयन पटरियों कि: स्रोत कोड के https://code.google.com/p/chromium/issues/detail?id=437277

प्रासंगिक लाइनों: https://code.google.com/p/chromium/codesearch#chromium/src/chrome/browser/push_messaging/push_messaging_notification_manager.cc&l=249

+0

वाह! इस उत्तर के लिए धन्यवाद। महान खोज! –

+3

अधिसूचना प्राप्त करने के बाद हमारे मामले में हम सर्वर पर राज्य की जांच करते हैं और केवल एक शर्त मिलने पर अधिसूचना दिखाते हैं। एक जबरन अधिसूचना को रोकने के लिए हम कभी भी पूरा नहीं करेंगे जैसे 'event.waitUntil (नया वादा (कार्य() {}))। –

+0

टिप्पणियों का जोड़ा। यदि आप यह जानना चाहते हैं कि आपको कोई सूचना दिखाने की आवश्यकता है, तो वर्तमान में विंडो विंडो को खोलें और देखें कि उनमें से कोई भी दृश्यता === 'दृश्यमान' है। बजट एपीआई नामक एक नया नमूना है जो डेवलपर्स को यह जांचने की अनुमति देगा कि क्या वे अधिसूचना नहीं दिखा सकते हैं (यानी मौन धक्का देने की अनुमति है) लेकिन यह एक निश्चित राशि तक ही सीमित होगा। –

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