在JavaScript中使用firebase时,如何将数据传递到AngbackgroundMessageHandler(



我在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

希望这对你们有帮助。

相关内容

  • 没有找到相关文章

最新更新