अगर पुश संदेश firebase.messaging().onMessage के साथ भेजा जाता है, तो मैं अग्रभूमि में कुछ ईवेंट को पुनः लोड या ट्रिगर करना चाहता हूं, लेकिन इसे निकाल दिया नहीं गया है। मैं पृष्ठभूमि अधिसूचना के साथ firebase.mesaging.sw.js का उपयोग कर रहा हूं और यह सही ढंग से काम करता है मेरे कोड में क्या गलत है?

Firebase.js

const config = {
  apiKey: "x",
  projectId: "x",
  storageBucket: "x",
  messagingSenderId: "x"
};

firebase.initializeApp(config);

const msg = firebase.messaging()
msg.requestPermission()
  .then(() => {
    return msg.getToken()
  })
  .then((token) => {
  })
  .catch((err) => {
  })

msg.onMessage(function(payload) {
  alert("Foreground message fired!")
  console.log(payload)
});

Firebase.messaging.sw.js

importScripts("https://www.gstatic.com/firebasejs/7.0.0/firebase-app.js");
importScripts("https://www.gstatic.com/firebasejs/7.0.0/firebase-messaging.js");

const config = {
  apiKey: "x",
  projectId: "x",
  storageBucket: 'x',
  messagingSenderId: "x"
};

firebase.initializeApp(config);
const msg = firebase.messaging()

msg.setBackgroundMessageHandler(function(payload) {
  let options = {
    body: payload.data.body,
    icon: payload.data.icon
  }

  return self.registration.showNotification(payload.data.title, options);

});

मुझे नहीं पता कि मेरे कोड में क्या गलत है

7
Kuro Neko 15 अक्टूबर 2019, 06:43

5 जवाब

सबसे बढ़िया उत्तर

इसका आसान समाधान है अपने Firebse को नवीनतम संस्करण में अपडेट करना।

उदा.

importScripts('https://www.gstatic.com/firebasejs/7.8.0/firebase-app.js');
importScripts('https://www.gstatic.com/firebasejs/7.8.0/firebase-messaging.js');

नोट: एक बार जब आप अपने फायरबेस लाइब्रेरी संस्करण अपडेट कर लेते हैं तो messagingSenderId आपकी firebase-messaging-sw.js फ़ाइल में काम नहीं करेगा। आपको अन्य सभी पैरा प्रदान करना होगा उदा। MessageSenderId के साथ apiKey, projectId, appId

  • अगर फिर भी काम नहीं किया। अपना ब्राउज़र कैश साफ़ करें और सेवा कार्यकर्ता को फिर से पंजीकृत करें।

अधिक जानकारी के लिए आप इस समाधान

8
Maheshvirus 20 फरवरी 2020, 09:12
क्षमा करें, लेकिन ऐसा लगता है कि दोनों कथन झूठे हैं। SW में सिर्फ मैसेजिंगसेंडरआईड के साथ बैकग्राउंड नोटिफिकेशन आते रहते हैं, और न ही फायरबेस एपीआई में अपग्रेड कुछ भी ठीक करता है। ऑनमैसेज इवेंट बस ट्रिगर नहीं होगा।
 – 
andreszs
18 फरवरी 2020, 17:26
1
Firebasejs/7.0.0 संस्करण के साथ एक ही समस्या का सामना करना पड़ रहा था। onMasage ईवेंट ट्रिगर नहीं कर रहा है। मैंने अपने फायरबेस संस्करण को नवीनतम में अपडेट किया है। तब मैं इस मुद्दे का सामना कर रहा था कि एसडब्ल्यू में प्रोजेक्ट आईडी गायब है। इसलिए मैंने अन्य सभी विवरण पास कर दिए हैं। फिर सब काम हो गया।
 – 
Maheshvirus
19 फरवरी 2020, 09:03
धन्यवाद, मैं स्वीकार करता हूं कि आपके द्वारा बताए गए SW में प्रारंभिक ऐप विधि में संपूर्ण firebaseConfig जोड़ने, साथ ही क्रोम डेटा और कैशे को साफ करने और सूचनाओं को फिर से पंजीकृत करने से अंततः समस्या ठीक हो गई। आप अपने उत्तर का विस्तार करने के लिए कैशे सफाई और पुन: पंजीकरण सुझाव जोड़ सकते हैं।
 – 
andreszs
19 फरवरी 2020, 19:58

आप बहुत सी चीजें खो रहे हैं और मैसेज केवल तभी काम करेगा जब फायरबेस को कॉल करने से पहले शुरू किया गया हो। कृपया इसका पालन करें। मैंने इसे इस तरह किया है और यह काम कर रहा है।

फायरबेस को इनिशियलाइज़ करें और टोकन प्राप्त करें

export class BrowserFcmProvider {
export const FIREBASE_CONFIG = {
 apiKey: "****",
 authDomain: "****",
 databaseURL: "****",
 projectId: "****",
 storageBucket: "****",
 messagingSenderId: "****",
 appId: "****"
}

firebase.initializeApp(FIREBASE_CONFIG);

async webGetToken() {
 try {
   const messaging = firebase.messaging();
   await messaging.requestPermission();
   const token = await messaging.getToken();
   let uuidTemp = new DeviceUUID().get();
   return this.saveTokenToFireStoreFromWeb(token, uuidTemp)

 } catch (e) {
   console.log(e);
 }
}

saveTokenToFireStoreFromWeb(token, uuid) {
  try {
     const docData = {
     token: token,
     device_type: 'web',
     uuid: uuid
     }
    const devicesRef = this.db.collection('devices')
    return devicesRef.doc(uuid).set(docData);
  } catch (e) {
    console.log(e, 'saveTokenError');
  }
}

showMessage() {
  try {
    const messaging = firebase.messaging();
    messaging.onMessage((payload) => {
    console.log(payload);
    })
  } catch (e) {
    console.log(e)
  }
}
}

और इस तरह से ऐप लोड होने पर विधि को कॉल करना

  async configureFirebaseForBrowser(res) {
      await this.bfcm.webGetToken();
      this.bfcm.showMessage();
  }

फायरबेस फ़ंक्शन और पेलोड प्रकार

    const payloadWeb = {
            title: title,
            body: body,
            data: {
                title: title,
                body: body
            },
            tokens: uniqueDevicesTokenArrayWeb,
        }

  const responseWeb = await admin.messaging().sendMulticast(payloadWeb);
  console.log(responseWeb.successCount + ' notifications has been sent to Web successfully');

मैंने async का उपयोग किया है और प्रतीक्षा करें क्योंकि हमें अतुल्यकालिक रूप से फायरबेस/फायरस्टोर संचालन को प्रबंधित करने की आवश्यकता है।

fcm गुप्त मोड और सफारी ब्राउज़र में काम नहीं करता

1
sibabrat swain 15 अक्टूबर 2019, 08:39
$scope.init = (स्टार्टडेट, एंडडेट, रोल, मॉडरेशन) => {webGetToken (); संदेश दिखाओ(); } मैंने आपके उदाहरण का उपयोग किया है और यह अभी भी काम नहीं कर रहा है, अनुरोध अनुमति दी गई है लेकिन मैसेज फ़ंक्शन को निकाल दिया नहीं गया है
 – 
Kuro Neko
15 अक्टूबर 2019, 11:18
क्या आपको कोई त्रुटि मिली? आप किस ढांचे में इसका उपयोग कर रहे हैं? क्या आप फ़ायरबेस को ठीक से प्रारंभ करने में सक्षम थे? कॉन्स्ट फायरबेस इन्टिअलाइज़ = फायरबेस.इनिशियलाइज़ऐप (FIREBASE_CONFIG); कंसोल.लॉग (फायरबेस इंटियलाइज); तुम्हें क्या मिला?
 – 
sibabrat swain
15 अक्टूबर 2019, 11:54
मैं नोड जेएस के साथ लार्वा का उपयोग करता हूं, मेरा फायरबेस प्रारंभ ठीक से काम कर रहा है, और अगर मैं इसे एक चर पर रखता हूं और इसे कंसोल करता हूं, तो आपको आंतरिक, फायरबेस, हटाए गए, विकल्प और कई अन्य के साथ एक ऑब्जेक्ट दिखाई देगा
 – 
Kuro Neko
15 अक्टूबर 2019, 13:47
लार्वा और नोडज दोनों सर्वर-साइड के लिए काम करते हैं। आप दो का उपयोग क्यों करते हैं? क्या आप इसे गिटहब पर डाल सकते हैं ताकि मैं इसे देख सकूं और इसे ठीक कर सकूं।
 – 
sibabrat swain
16 अक्टूबर 2019, 08:57
आपको सेवा कार्यकर्ता में SDK संस्करण को "7.1.0" importScripts('https://www.gstatic.com/firebasejs/7.1.0/firebase-app.js') importScripts('https://www.gstatic.com/firebasejs/7.1.0/firebase-messaging.js') में बदलने की आवश्यकता है
 – 
Albert Hidalgo
13 जिंदा 2020, 18:01

2020 में भी यही मुद्दा था। मेरे मामले में यह इस तरह था:

  • आपको पृष्ठभूमि संदेशों के लिए importScripts में और अग्रभूमि संदेशों के लिए अपने ऐप में समान संस्करण रखने होंगे
  • पृष्ठभूमि सेवा के लिए टोकन प्राप्त करने के बाद इसे कॉल करें
firebaseApp.messaging().getToken().then((currentToken) => {
  if (currentToken) {
    console.log(currentToken)
  } else {
    // Show permission request.
    console.log(
      'No Instance ID token available. Request permission to generate one.')
  }
  /** When app is active */
  firebase.messaging().onMessage((payload) => {
    console.log(payload)
  }, e => {
    console.log(e)
  })
})
2
JaK 16 अक्टूबर 2020, 17:43
मेरे लिए काम करने के बाद onMessage धन्यवाद चल रहा है getToken
 – 
Huiting
20 मार्च 2021, 17:25

वही मुद्दा जिसका मुझे सामना करना पड़ा था। मेरे मामले में "package.json" और "firebase-messaging-sw.js" में firebase संस्करण अलग था। importScripts संस्करण। "firebase-messaging-sw.js" importScripts में वही संस्करण सेट करने के बाद जो इसमें था "package.json", मेरी समस्या का समाधान हो गया है।

बदलाव से पहले

 **"package.json"**
 
 "firebase": "^8.2.1",
 
  **"firebase-messaging-sw.js"**

 importScripts('https://www.gstatic.com/firebasejs/7.8.0/firebase-app.js');
 importScripts('https://www.gstatic.com/firebasejs/7.8.0/firebase-messaging.js');

परिवर्तन के बाद

 **"package.json"**

 "firebase": "^8.2.1",

 **"firebase-messaging-sw.js"**

 importScripts('https://www.gstatic.com/firebasejs/8.2.1/firebase-app.js');
 importScripts('https://www.gstatic.com/firebasejs/8.2.1/firebase-messaging.js');
0
javed 6 जिंदा 2021, 15:39
मेरे पास ये संस्करण समान हैं, वर्तमान में 8.9.1 लेकिन मुझे कंसोल पर प्रिंट करने की सूचना नहीं मिल सकती है। ईव, मैं सीधे एफसीएम कंसोल से उस अधिसूचना को भेजने के बाद पुश नोटिफ़ के लिए डिफ़ॉल्ट पॉपअप का आह्वान करने में कामयाब रहा ... कोई सुझाव? मैं कहीं भी कोड साझा कर सकता हूं ...
 – 
MikeSomething
13 अगस्त 2021, 02:18

इस समस्या वाले किसी और के लिए, मैंने अंततः इसे हल किया:

  1. हेडर-शामिल जेएस फाइलों और एसडब्ल्यू जेएस फाइल दोनों में फायरबेस एसडीके संस्करण को नवीनतम में अपग्रेड करना (वर्तमान में, यह 7.8.1 होगा)।
  2. संपूर्ण firebaseConfig सरणी को SW firebase.initializeApp() में जोड़ना, जैसा कि पिछले उत्तर से पता चलता है।
  3. डेवलपर टूल में एप्लिकेशन > संग्रहण साफ़ करें अनुभाग से Chrome कैश साफ़ करना.
  4. मेरे डेटाबेस से पिछला पंजीकरण टोकन हटाना।
  5. एक नई टोकन पीढ़ी को बाध्य करने के लिए ब्राउज़र से सूचनाओं को अवरुद्ध और अनवरोधित करना।

मूल रूप से, अद्यतन Firebase SDK के साथ एक कुल नई शुरुआत इस तरह की समस्याओं को ठीक करती प्रतीत होती है।

3
andreszs 20 फरवरी 2020, 17:03