如果用户阻止权限,则firebase云消息传递onMessage功能不起作用

时间:2018-04-10 12:45:22

标签: javascript jquery firebase firebase-cloud-messaging

我正在尝试使用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>

1 个答案:

答案 0 :(得分:0)

  

当页面加载时,如果用户不接受Web通知,那么onMessage函数不起作用

这是预期的行为。如果用户未授予您的网站接收消息的权限,则不会向服务器发送令牌,也无法让FCM发送(或传递)消息。