如何在Javascript中使用Firebase时从setBackgroundMessageHandler()传递数据到角度应用程序?

时间:2017-06-08 07:09:02

标签: javascript angularjs firebase firebase-cloud-messaging

我在我的角应用中使用firebase在web中发送推送通知。我实现了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.',}) }); 时我们怎么做呢? 如果我可以在本地存储收到的值并将其存储在我的应用程序中,即使它也可以。

我做过这方面的研究很多地方,但我找不到任何解决方案。 有人可以帮我弄这个吗? 谢谢!

<?php
    // Example use of getenv()
    $ip = getenv('REMOTE_ADDR');

    // Or simply use a Superglobal ($_SERVER or $_ENV)
    $ip = $_SERVER['REMOTE_ADDR'];

    // Safely get the value of an environment variable, ignoring whether 
    // or not it was set by a SAPI or has been changed with putenv
    $ip = getenv('REMOTE_ADDR', true) ?: getenv('REMOTE_ADDR')
?>

1 个答案:

答案 0 :(得分:0)

搜索了几天后,找到了一个包含解决方案的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-from-a-push-event

希望它对你们有帮助。如果你对实施有任何疑问,请给我评论。