我正在实施firebase消息,但我在chrome中的控制台上出现错误。
脚本资源位于重定向后面,不允许重定向。 /firebase-messaging-sw.js无法加载资源:net :: ERR_UNSAFE_REDIRECT
文件/ firebase-messaging-sw.js位于公共文件夹中,我正在使用这样的FCM安装https://github.com/firebase/quickstart-js/tree/master/messaging
但授权链接是https://09029e3f.ngrok.io/admin/pt/settings/notifications之类的链接。 但主要网站是在main.domain.com
答案 0 :(得分:2)
Firebase答案及其工作
默认情况下,服务工作者脚本(firebase-messaging-sw.js)应位于应用程序的绝对路径上。使用快速入门项目,位置将为http://localhost:5000/firebase-messaging-sw.js。
由于您使用不同的服务器进行静态文件存储,因此服务工作者脚本位置可能不相同或不同。有了这个,我们需要更新服务工作者注册代码实现并从不同的位置调用服务工作者脚本。
查找服务工作者脚本的静态位置。在我的例子中,它是http://localhost:5000/sw/firebase-messaging.sw.js,因为我将服务工作者脚本位置移动到sw文件夹中。要验证它是否可访问,请尝试在浏览器地址栏中输入URL,并显示服务工作者脚本代码。 从https://www.gstatic.com/firebasejs/ / firebase.js本地下载firebase.js脚本,并在需要显示通知的网页上将其命名为/firebase.js">。
更新firebase-messaging.js脚本。找到关键字firebase-messaging-sw.js,然后将路径添加为前缀。就我而言,它是http://localhost:5000/sw/firebase-messaging-sw.js和http://localhost:5000/sw/firebase-cloud-messaging-push-scope。
非常感谢firebase
答案 1 :(得分:2)
您可以通过使用服务工作人员手动加载firebase-messaging-sw.js
来解决此问题
假设您有2个文件:index.html
和firebase-message-sw.js
。他们在同一个地方。
1.在index.html
中,您加载firebase.js
并初始化您的firebase应用:
<script src="https://www.gstatic.com/firebasejs/4.3.1/firebase.js"></script>
<script>
var var config = {
apiKey: YOUR_API_KEY,
messagingSenderId: YOUR_SENDER_ID
};
firebase.initializeApp(config);
navigator.serviceWorker.register('/firebase-messaging-sw.js')
.then(function (registration) {
messaging = firebase.messaging();
//request permission for Push Message.
messaging.requestPermission().then(function () {
console.log('grant');
messaging.getToken().then(function (currentToken) {
console.log('current token', currentToken);
});
}).catch(function(error) {
console.log('Push Message is disallowed');
})
})
</script>
2。实施firebase-messaing-sw.js
importScripts('https://www.gstatic.com/firebasejs/4.3.1/firebase-app.js');
importScripts('https://www.gstatic.com/firebasejs/4.3.1/firebase-messaging.js');
var config = {
messagingSenderId: YOUR_SENDER_ID
};
firebase.initializeApp(config);
const messaging = firebase.messaging();
messaging.setBackgroundMessageHandler(function (payload) {
console.log('[firebase-messaging-sw.js] Received background message ', payload);
// Customize notification here
const notificationTitle = 'Background Message Title';
const notificationOptions = {
body: 'Background Message body.',
icon: '/firebase-logo.png'
};
return self.registration.showNotification(notificationTitle,
notificationOptions);
});
完成!