我在我的角应用中使用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')
?>
答案 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做出贡献的人。 有关更多参考,请转到
希望它对你们有帮助。如果你对实施有任何疑问,请给我评论。