我正在实施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
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 消息.js脚本。找到关键字 firebase-messaging-sw.js 和 ,然后将路径添加为前缀。就我而言,它是 http://localhost:5000/sw/firebase-messaging-sw.js 和 http://localhost:5000/sw/firebase-cloud-messaging-push-scope。
非常感谢火力基地
您可以通过使用 service worker.
假设您有 2 个文件:index.html
和firebase-message-sw.js
来firebase-messaging-sw.js
解决此问题。它们位于同一位置.
1.Inindex.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);
});
做!