我正在努力寻找一种在没有第三方公司且不使用react或node.js的情况下在Web应用程序上集成推送通知的方法。
尝试使用Firebase。一种简单的方式来请求许可,而不会在用户登陆网站时骚扰用户。我想通过单击链接来询问用户何时请求许可。
是的,它运行良好(在firebase中找不到设备令牌吗?),但是当我使用firebase控制台发送通知时。该消息已在网站控制台中成功接收,但是没有出现通知弹出窗口。但是,如果我立即触发询问用户的消息。它正在工作。
我只需要延迟提示,并使用邮递员或curl来向所有订阅者发送通知的简单方法就可以了。它适用于Firebase控制台中的所有用户,但我在查看谁会收到通知而未看到订阅令牌时遇到问题?
我在index.php上有这个
:if ('Notification' in window && 'serviceWorker' in navigator) {
var enableNotificationsButtons = document.querySelectorAll('#push-button-js');
for (var i = 0; i < enableNotificationsButtons.length; i++) {
enableNotificationsButtons[i].style.display = 'inline-block';
enableNotificationsButtons[i].style.visibility = 'visible';
enableNotificationsButtons[i].style.WebkitTransition = 'visibility 1s , opacity 1s';
enableNotificationsButtons[i].addEventListener('click', askForNotificationPermission);
}
function askForNotificationPermission() {
messaging.requestPermission()
.then(() => {
console.log("Notifications allowed");
return messaging.getToken();
})
.catch(err => {
console.log("No permission to send push", err);
});
}
var firebaseConfig = {
apiKey: "AIzaxxxgg",
authDomain: "pxxxx.firebaseapp.com",
databaseURL: "https://puxx.firebaseio.com",
projectId: "xxx",
storageBucket: "xxx.appspot.com",
messagingSenderId: "37xxx3",
appId: "1:371xxxxxxxxx0e",
measurementId: "G-XxxxxxxxW"
};
firebase.initializeApp(firebaseConfig);
console.log(firebaseConfig);
console.log(firebase);
const messaging = firebase.messaging();
messaging.usePublicVapidKey('BXXXXXXX');
messaging.onMessage(function(payload) {
console.log('onMessage: ', payload);
});
在firebase-messaging-sw.js上,相同的firebase.initializeApp({}) 常量消息传递= firebase.messaging();
messaging.setBackgroundMessageHandler(function(payload) {
console.log('[firebase-messaging-sw.js] Received background message ', payload);
const notificationTitle = 'Background Message Title';
const notificationOptions = {
body: 'Background Message body.',
icon: 'https://swphp.punchunique.com/android-chrome-192x192.png'
};
return self.registration.showNotification(notificationTitle,
notificationOptions);
});