我有以下代码,基于Google's Documentation:
var config = {
apiKey: "XX",
authDomain: "XX",
databaseURL: "XX",
storageBucket: "XX",
messagingSenderId: "XX"
};
firebase.initializeApp(config);
const messaging = firebase.messaging();
messaging.requestPermission()
.then(function() {
console.log('Notification permission granted.');
messaging.getToken()
.then(function(currentToken) {
if (currentToken) {
console.log(currentToken);
} else {
console.log('No Instance ID token available. Request permission to generate one.');
}
})
.catch(function(err) {
console.log('An error occurred while retrieving token. ', err);
});
})
.catch(function(err) {
console.log('Unable to get permission to notify. ', err);
});
奇怪的是,then
的{{1}}函数从未被调用过。控制台确实显示messaging.getToken()
,但在此之后,它会保持安静(即我也没有收到任何错误)。
我做错了吗?
编辑:请注意,我尝试在Chrome扩展程序中实现此功能。
答案 0 :(得分:8)
我遇到同样的问题,我花了6个多小时来解决这个问题。您需要在主目录中创建虚拟" firebase-messaging-sw.js"(空文件)文件。
我的html页面位置为" http://localhost:56050/Notification/index.html "
我的 firebase-messaging-sw.js 是" http://localhost:56050/firebase-messaging-sw.js "
答案 1 :(得分:0)
每个人都有一个重要的注意事项。
您必须在本地服务器上运行它,如nginx或apache,并将firebase-messaging-sw.js
文件放在我面前。
所以我在根文件夹中有 index.html 和firebase-messaging-sw.js
文件。
答案 2 :(得分:0)
如果您不想在项目的根目录中配置firebase-messaging-sw.js
,则可以使用useServiceworker
方法。例如:
messaging.useServiceWorker('pathToYourSW');
答案 3 :(得分:0)
对我来说,提示是使用自生成的本地SSL证书在HTTPS上运行客户端和api。然后,我的getToken()
开始解决。
甚至在文档中:
FCM SDK仅在通过HTTPS服务的页面中受支持。这个到期了 其使用服务工作者的方式,仅在HTTPS上可用 网站。
如果getToken()
在这种情况下拒绝而不是永远吊死,将会很有帮助。
答案 4 :(得分:0)