Я использовал Vue-cli 3 для создания приложения Vue и пытался включить в него FCM.Тем не менее, я работал над этим в течение двух дней, и я до сих пор не могу заставить его работать.
Во-первых, вот мой
importScripts('https://www.gstatic.com/firebasejs/4.8.1/firebase- app.js');
importScripts('https://www.gstatic.com/firebasejs/4.8.1/firebase-messaging.js');
var config = {
messagingSenderId: "69625964474"
};
firebase.initializeApp(config);
const messaging = firebase.messaging();
messaging.setBackgroundMessageHandler(function (payload) {
console.log('[firebase-messaging-sw.js] Received background message ', payload)
// Customize notification here
const notificationTitle = 'Background Message Title';
const notificationOptions = {
body: 'Background Message body.',
icon: '/firebase-logo.png'
}
return self.registration.showNotification(notificationTitle, notificationOptions)
});
`` `
Одним из решений, которое работает как-то, является то, что я переместил этот файл в папку public
и зарегистрировал его в App.vue
используя
const registration = await navigator.serviceWorker.register(`${process.env.BASE_URL}firebase-messaging-sw.js`)
messaging.useServiceWorker(registration)
Тем не менее, тогда у меня будет два сервисных работника (один из самого Vue).
Я попытался изменить vue.config.js
, вместо этого пытаясь работать с Workboxдобавив следующую конфигурацию:
module.exports = {
pwa: {
name: 'My App',
themeColor: '#4DBA87',
msTileColor: '#000000',
appleMobileWebAppCapable: 'yes',
appleMobileWebAppStatusBarStyle: 'black',
// configure the workbox plugin
workboxPluginMode: 'InjectManifest',
workboxOptions: {
// swSrc is required in InjectManifest mode.
swSrc: 'public/firebase-messaging-sw.js'
// ...other Workbox options...
}
}
}
и затем зарегистрируйте ее снова в App.vue
:
const registration = await navigator.serviceWorker.register(`${process.env.BASE_URL}service-worker.js`)
messaging.useServiceWorker(registration)
Затем я получил следующую ошибку:
![enter image description here](https://i.stack.imgur.com/VpIfQ.png)
Если вас смущают упомянутые мной файлы или то, как выглядит каталог моего проекта, я просто создал PWA с помощью vue-cli 3. И я оставил большинствоструктуры нетронутой.
И я установил FireBase в main.js
:
import firebase from '@firebase/app'
Vue.config.productionTip = false
const config = {
apiKey: process.env.VUE_APP_FIREBASE_API_KEY,
authDomain: process.env.VUE_APP_AUTH_DOMAIN,
databaseURL: process.env.VUE_APP_DATABASE_URL,
projectId: process.env.VUE_APP_PROJECT_ID,
storageBucket: process.env.VUE_APP_STORAGE_BUCKET,
messagingSenderId: process.env.VUE_APP_MESSAGING_SENDER_ID
}
firebase.initializeApp(config)
Затем в App.vue
:
import firebase from '@firebase/app'
import '@firebase/messaging'
const messaging = firebase.messaging()
messaging.usePublicVapidKey('PUBLIC_KEY')