messages.setBackgroundMessageHandler未在网络中接收消息

时间:2018-12-21 10:29:44

标签: javascript firebase

我正在Web应用程序中实现Firebase通知。网页处于非活动状态时,我无法接收后台通知。

到目前为止,我所做的是:

  1. 在根目录中使用以下代码创建了manifest.json{ "gcm_sender_id": "103953800507" }
  2. 使用以下代码在根目录中创建文件firebase-messaging-sw.js

importScripts('https://www.gstatic.com/firebasejs/4.8.1/firebase-app.js');
    importScripts('https://www.gstatic.com/firebasejs/4.8.1/firebase-messaging.js');
    
    firebase.initializeApp({
        'messagingSenderId': '11111'
    });
    
    const messaging = firebase.messaging();
    
    messaging.setBackgroundMessageHandler(function (payload) {
        //sometime receive notification in this
        debugger;
        //some code here to receive notification..
        return self.registration.showNotification(title,
            notificationOptions);
    });

  1. Home/Index页中,放置以下代码以获取权限和令牌

firebase.initializeApp({
            'messagingSenderId': '11111'
        });
        
        const messaging = firebase.messaging();
        
        messaging.requestPermission().then(function() {
            console.log('Notification permission granted.');

            messaging.getToken().then(function(currentToken) {

                if (currentToken) {
                    console.log(currentToken);
                    sendTokenToServer(currentToken); //save in database
                }
            }).catch(function(err) {
                console.log('An error occurred while retrieving token. ', err);
            });
        }).catch(function(err) {
            console.log('Unable to get permission to notify.', err);
        });
        
        messaging.onTokenRefresh(function() {
            messaging.getToken().then(function(refreshedToken) {
                sendTokenToServer(refreshedToken);
            }).catch(function(err) {
            });
        });
        
                messaging.onMessage(function (payload) {
            //receive notification here when this page is active. working fine

        });

  1. 从邮递员发送通知 enter image description here
  

如何在中接收通知   messages.setBackgroundMessageHandler?

1 个答案:

答案 0 :(得分:0)

上面提到的代码是可以的。 app focus有问题。 可以说我有p1,p2和p3页。

p1具有获取通知权限,获取令牌和接收前台通知的代码。 我原本希望在p2和p3页上有后台通知。

但是,只有这两个页面不在浏览器的当前焦点标签中,它们才会在messaging.setBackgroundMessageHandler中收到通知。