我正在使用Firebase构建具有Web通知的应用程序,并使用https://github.com/kreait/firebase-php从服务器发送通知
我已经能够在浏览器中正确注册servicer worker并接收通知,但是我在firefox / chrome中遇到了异常行为。
这是浏览器收到的通知:
data: {
"gcm.notification.e": "1",
"google.c.a.e": "1",
"fcmOptions": {
"link": "/link-to-target.html"
}
"from": "XXXXXXXXXX",
"notification": {
"body": "A new post is ready for you to read",
"icon": "/images/ic_launcher.png",
"title": "New post"
},
"priority": "normal"
}
如果我在服务人员中什么也不做,chrome不会显示任何内容,但是firefox会正确显示通知,并带有文本,图标和单击后重定向到正确的目标。就像Firefox是自动“理解”“通知”,而chrome却不是。
这是服务人员的代码:
importScripts('https://www.gstatic.com/firebasejs/7.16.1/firebase-app.js');
importScripts('https://www.gstatic.com/firebasejs/7.16.1/firebase-messaging.js');
firebase.initializeApp({
apiKey: '****',
authDomain: '****',
databaseURL: '****,
projectId: '****',
storageBucket: '****',
messagingSenderId: '****',
appId: '******'
});
const messaging = firebase.messaging();
如果我将事件监听器添加到push事件中,以便能够在chrome中处理通知,则在chrome中显示通知(尽管该图标未显示),但是在Firefox中,通知显示为 两次,一次是像以前一样处理“自动”通知,另一次是在监听器上创建我的通知。
这是代码:
self.addEventListener('push', event => {
const data = event.data ? event.data.json() : {};
console.log('SW: Push received', data);
if (data.notification && data.notification.title) {
event.stopImmediatePropagation();
const options = {
body: data.notification.body,
icon: data.notification.icon ? data.notification.icon : '/images/ic_launcher.png',
data: data
};
event.waitUntil(self.registration.showNotification('****' + data.notification.title, options));
}
});
我在标题中添加了****,以便能够区分我触发的通知和firefox自动触发的通知。
更改服务器推送的通知不是可行的解决方案,因为它对于移动设备中的应用程序目前运行良好。
谢谢。