浏览器未收到Firebase消息

时间:2017-06-26 20:54:53

标签: django firebase firebase-cloud-messaging

我有一个Django项目,我使用Firebase云消息来启动推送通知。这是我的代码:

的index.html

<script>
   var config = {
    // ...
    };
    firebase.initializeApp(config);

    const messaging = firebase.messaging();
    navigator.serviceWorker.register('/static/firebase-messaging-sw.js').then((registration) => {
        messaging.useServiceWorker(registration);
        messaging.requestPermission().then(function() {
           console.log('Notification permission granted.');
           return messaging.getToken();
        }).then(function(token){
            $.post('/a_send_fcm_token/', {'fcm_token_web': token}); 
        }).catch(function(err){
            console.log('Error ocurred');
        });
    });

    messaging.onMessage(function(payload) {
        console.log('Hoorah'); // does not work :(
    });

</script>

由于Django项目布局有一定的特殊性,我在上面的代码中使用navigator.serviceWorker.register()函数来更改firebase-messaging-sw.js文件的默认位置,否则该位置将位于项目的根目录中。

我的firebase-messaging-sw.js看起来像这样:

importScripts('https://www.gstatic.com/firebasejs/4.1.2/firebase-app.js');
importScripts('https://www.gstatic.com/firebasejs/4.1.2/firebase-messaging.js');
var config = {
               // ...
            };
firebase.initializeApp(config);
const messaging = firebase.messaging();

最后,我的Django视图向FCM发布了消息:

 headers = {'Authorization': "key=AAAA7oE3MjY:APA91bE_M....",
            'Content-type': 'application/json'}
 token = ...
 payload = json.dumps({"notification": {}, "token": token})
 r = requests.post("https://fcm.googleapis.com/fcm/send", data=payload, headers=headers)
 return True

似乎我已经正确实现了大部分内容,因为我成功从FCM获取令牌。但我无法抓住messaging.onMessage()中的消息。它不会触发。

问题是:

为什么我的messaging.onMessage()无效?

0 个答案:

没有答案