我正在尝试使用FCM发送网络通知。
页面加载时,它会询问权限并将Web通知发送给用户。此外,最新数据将附加到前端而不刷新。当用户在浏览器中授予接收Web通知的权限时,下面的代码可以正常工作。
但是,当页面加载时,如果用户不接受Web通知,则onMessage
功能不起作用,并且最新数据不会附加到前端。它在用户手动点击刷新时有效。
要求是,如果有任何新数据添加到数据库,那么它应该附加到前端而不刷新。我想用onMessage
函数附加最新数据。这是正确的方法还是任何其他解决方案?请帮忙..
的JavaScript
// Initialize Firebase
var config = {
apiKey: "***"
, authDomain: "***"
, databaseURL: "***"
, projectId: "***"
, storageBucket: "***"
, messagingSenderId: "***"
};
firebase.initializeApp(config);
// Retrieve Firebase Messaging object.
const messaging = firebase.messaging();
messaging.requestPermission()
.then(function() {
console.log('Notification permission granted.');
if(isTokenSentToServer()){
console.log('Token already saved');
} else {
getRegToken();
}
}).catch(function(err) {
console.log('Unable to get permission to notify.', err);
});
function getRegToken(argument){
messaging.getToken()
.then(function(currentToken) {
if (currentToken) {
saveToken(currentToken);
console.log(currentToken);
setTokenSentToServer(true);
} else {
console.log('No Instance ID token available. Request permission to generate one.');
setTokenSentToServer(false);
}
}).catch(function(err) {
console.log('An error occurred while retrieving token. ', err);
showToken('Error retrieving Instance ID token. ', err);
setTokenSentToServer(false);
});
}
function setTokenSentToServer(sent) {
window.localStorage.setItem('sentToServer', sent ? 1 : 0);
}
function isTokenSentToServer() {
return window.localStorage.getItem('sentToServer') == 1;
}
function saveToken(currentToken){
$.ajax({
url: 'action.php',
method: 'post',
data: 'token=' + currentToken
}).done(function(result){
console.log(result);
})
}
messaging.onMessage(function(payload){
console.log('Message recevied', payload);
notificationTitle = payload.data.title,
notificationOptions = {
body: payload.data.body,
icon: payload.data.icon
};
var notification = new Notification(notificationTitle,notificationOptions);
$(".target").append("<p>"+notificationTitle+"<br>"+payload.data.body+"</p>");
});
HTML
<div class="target"></div>
答案 0 :(得分:0)
当页面加载时,如果用户不接受Web通知,那么onMessage函数不起作用
这是预期的行为。如果用户未授予您的网站接收消息的权限,则不会向服务器发送令牌,也无法让FCM发送(或传递)消息。