Chrome Firebase 云消息 - 未注册

Posted

技术标签:

【中文标题】Chrome Firebase 云消息 - 未注册【英文标题】:Chrome Firebase Cloud Message - NotRegistered 【发布时间】:2018-03-20 19:55:06 【问题描述】:

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

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

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

之后我手动启用通知以允许然后重新加载页面。 现在我尝试使用 google 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);
        );
    );

【问题讨论】:

您确定您使用的是正确的令牌吗?还是您使用的令牌与您已经收到 NotRegistered 的令牌相同? 是的,我使用的是相同的令牌(在拒绝和允许过程中,firebase 不会生成新令牌)。 messing.getToken() - 只给旧的... 那么第二个NotRegistered错误就是WAI。 “messaging.getToken() - 只给旧的”——这应该是你问题的主要焦点,因为我认为这可能是一种意外的行为。 好的,一旦我在浏览器中拒绝并允许,我就想要向该令牌发送一些通知。真的可以吗? developers.google.com/cloud-messaging/registration - 取消注册和重新注册可能需要最多五分钟才能传播。在此期间,消息可能会由于未注册状态而被拒绝,并且消息可能会发送给错误的用户。 ---- 但即使经过几个小时也没有工作...... 【参考方案1】:

我向谷歌支持发送了一封电子邮件,我得到了回复

来自 google 支持:我能够使用 FCM JS 快速入门示例在我的末端复制此内容,并发现它仅影响 SDK 版本 4.10.0+。我已将这个错误提请我们的工程师注意,我们现在正在努力修复。我无法分享它何时在生产中发布的具体时间表,但与此同时,我建议使用较低版本的 SDK(例如 4.9.0)作为解决方法。

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

所以他们在上面的 firebase 4.10.0+ 中遇到了这个问题

【讨论】:

以上是关于Chrome Firebase 云消息 - 未注册的主要内容,如果未能解决你的问题,请参考以下文章

收到 Firebase 注册令牌但未显示通知

FCM(Firebase 云消息传递):Firebase 推送通知在 Firefox 中显示,但在 Chrome 中不显示

设备未收到 Firebase 云消息通知

Ionic 3 的 PWA 和 Firebase 云消息注册

Firebase 云消息传递 php 脚本返回无效注册

Firebase 云消息/通知未收到。 JS