我在Angular App中使用firebase在Web中发送推送通知。我在App在App Appround在App中时实现了messaging.onMessage()
,用于接收通知,而messaging.setBackgroundMessageHandler()
当App在后台时。我接收通知问题,但是我需要根据通知的更新值。我可以在使用messaging.onMessage()
时进行更新,但是使用messaging.setBackgroundMessageHandler()
时,我们该怎么做。如果我可以在本地存储收到的值并将其获取在我的应用程序中。
我对此进行了很多研究,但找不到任何解决方案。有人可以帮我弄这个吗?谢谢!
importScripts('https://www.gstatic.com/firebasejs/3.5.2/firebase-app.js');
importScripts('https://www.gstatic.com/firebasejs/3.5.2/firebase-messaging.js');
var config = {
apiKey: "MY_API_KEY",
authDomain: "MY_AUTH_DOMAIN",
databaseURL: "MY_DB_URL",
storageBucket: "URL",
messagingSenderId: "VALID_ID"
};
firebase.initializeApp(config);
const messaging = firebase.messaging();
messaging.setBackgroundMessageHandler(function(payload) {
console.log('[firebase-messaging-sw.js] Received background message ', payload);
return self.registration.showNotification("Title", {body: 'New notification.',})
});
搜索几天后找到了一个包含解决方案的github页面。
您可以做的是获取窗口客户端的列表,该窗口客户端将返回您的原始标签列表,然后向每个窗口客户端发布消息。(此代码将在setBackgroundMessageHandler()
中(。
获取页面列表是:
const promiseChain = clients.matchAll({
type: 'window',
includeUncontrolled: true
})
.then((windowClients) => {
for (let i = 0; i < windowClients.length; i++) {
const windowClient = windowClients[i];
windowClient.postMessage(data);
}
})
.then(() => {
return registration.showNotification('my notification title');
});
return promiseChain;
然后在页面中接收消息,请添加一个类似的侦听器:
navigator.serviceWorker.addEventListener('message', function(event) {
console.log('Received a message from service worker: ', event.data);
});
感谢在Github贡献的很多人。有关更多参考,请转到
https://web-push-book.firebaseapp.com/chapter-05/04-common-notification-patterns/#message-page-page-from-a-push-push-push-event
希望这对你们有帮助。