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 云消息 - 未注册的主要内容,如果未能解决你的问题,请参考以下文章
FCM(Firebase 云消息传递):Firebase 推送通知在 Firefox 中显示,但在 Chrome 中不显示