Firebase Cloud Messaging 前台通知在 Vue 中不起作用
2020-05-15
5659
我一直在努力将 FCM 集成到我的 Vue PWA 应用中。到目前为止,我已经设法使后台通知正常运行,但当应用处于前台时,无法处理通知。这是我的代码。
src/App.vue
import firebase from './plugins/firebase'
export default {
// Other stuff here...
methods: {
prepareFcm () {
var messaging = firebase.messaging()
messaging.usePublicVapidKey(this.$store.state.fcm.vapidKey)
messaging.getToken().then(async fcmToken => {
this.$store.commit('fcm/setToken', fcmToken)
messaging.onMessage(payload => {
window.alert(payload)
})
}).catch(e => {
this.$store.commit('toast/setError', 'An error occured to push notification.')
})
}
},
mounted () {
this.prepareFcm()
}
}
public/firebase-messaging-sw.js
importScripts('https://www.gstatic.com/firebasejs/5.5.6/firebase-app.js')
importScripts('https://www.gstatic.com/firebasejs/5.5.6/firebase-messaging.js')
firebase.initializeApp({
messagingSenderId: '123456789'
})
const messaging = firebase.messaging()
messaging.setBackgroundMessageHandler(function (payload) {
return self.registration.showNotification(payload)
})
src/plugins/firebase.js
import firebase from '@firebase/app'
import '@firebase/messaging'
// import other firebase stuff...
const firebaseConfig = {
apiKey: '...',
authDomain: '...',
databaseURL: '...',
projectId: '...',
storageBucket: '...',
messagingSenderId: '123456789',
appId: '...'
}
firebase.initializeApp(firebaseConfig)
export default firebase
我做错了什么?
3个回答
我在 StackOverflow 的另一个 QA 中找到了解决方案(出于某种原因,我再也找不到了)。
事实证明,您必须使用 Firebase API v7.8.0,而不是文档当时所说的 5.5.6。因此,
public/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')
starleaf1
2020-08-28
我遇到了同样的问题。就我而言, “package.json” 中的 firebase 版本和 “firebase-messaging-sw.js” 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');
javed
2021-01-06
就我而言,
package.json
上的版本 (8.2.1) 与实际的 SDK_VERSION (8.0.1) 不同
在更改了相同版本的 service-worker 之后,它就可以正常工作了..
Yoannes Geissler
2020-12-20