Chrome Firebase云消息 - 未注册

时间:2018-03-20 19:55:06

标签: javascript firebase push-notification firebase-cloud-messaging

我正在使用子域和https并使用firebase js版本4.10.1测试服务器中的FCM。

第一次允许访问时,推送通知正常工作。我可以使用谷歌(https://fcm.googleapis.com/fcm/send)成功发送通知。

然后我手动禁用通知以拒绝然后重新加载页面。 现在我尝试使用谷歌api发送通知,我收到错误NotRegistered这是正确的。

之后我手动启用通知以允许然后重新加载页面。 现在我尝试使用谷歌api发送通知,我再次收到错误NotRegistered。

那么我有什么问题?

https://www.gstatic.com/firebasejs/4.10.1/firebase.js
var config = {
    apiKey: "XXX",
    authDomain: "XXX",
    databaseURL: "XXX",
    projectId: "XXX",
    storageBucket: "XXX",
    messagingSenderId: "XXX"
}
firebase.initializeApp(config);

 var messaging = firebase.messaging();

    messaging.onMessage(function(data) {
        console.log("Message received. ", data);
        var notificationObj = {
            body: data.notification.body,
        };

        if (data.data && data.data['gcm.notification.image']) {
            notificationObj.image = data.data['gcm.notification.image'];
        }

        if (data.notification.icon) {
            notificationObj.icon = data.notification.icon;
        }

        var instance = new Notification(data.notification.title, notificationObj);
        instance.onclick = function(){
            console.log('clicked');
            instance.close();
            window.location.href = data.notification.click_action;
         }
        instance.onshow = function(){
            console.log('showed');
        }
        instance.onclose = function(){
            console.log('closed');
        }
    });

    messaging.requestPermission()
    .then(function() {
         console.log('Notification permission granted.');
        messaging.getToken()
        .then(function(currentToken) {
            if (currentToken) {
                console.log(currentToken);
            } else {
                // Show permission request.
                console.log('No Instance ID token available. Request permission to generate one.');
                // Show permission UI.
            }
        })
        .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) {
          console.log('Token refreshed.',refreshedToken);
        })
        .catch(function(err) {
          console.log('Unable to retrieve refreshed token ', err);
        });
    });

1 个答案:

答案 0 :(得分:0)

我发了一封电子邮件给谷歌支持,我收到了回复

  

来自Google支持:我能够使用FCM JS快速入门示例在我的最终复制此内容,并发现它仅影响SDK版本4.10.0+。我已经把这个bug引起了我们工程师的注意,我们正在努力解决这个问题。我无法分享关于它何时将在生产中发布的具体时间表,但与此同时,我建议使用较低版本的SDK(例如4.9.0)作为解决方法。

     

请留意发行说明,或随时查看   关于修复的任何进一步更新。

所以他们在firebase 4.10.0+

上面有这个问题