【问题标题】:Firebase issues with ReactJSReactJS 的 Firebase 问题
【发布时间】:2020-11-10 08:02:50
【问题描述】:

我正在尝试将我的 ReactJs 应用程序连接到 firebase 以实现推送通知。每次我尝试控制台记录我从 firebase 获得的令牌时,总是会出现这个错误,我不知道如何解决它。这是错误的屏幕截图:

我在我的公共文件中的 firebase-messaging-sw.js 中添加了以下几行:

importScripts('https://www.gstatic.com/firebasejs/7.16.1/firebase-app.js');
importScripts('https://www.gstatic.com/firebasejs/7.16.1/firebase-analytics.js');
importScripts('https://www.gstatic.com/firebasejs/7.16.1/firebase-messaging.js');

firebase.initializeApp({
    messagingSenderId: "msg_id",
})

const initMessaging = firebase.messaging()

还有文件 firebase.js 及其内容,我从已经注册的 firebase 项目中获取配置对象内的数据:

import firebase from "firebase";

if ('serviceWorker' in navigator) {
    navigator.serviceWorker.register('./public/firebase-messaging-sw.js')
        .then(function (registration) {
            console.log('Registration successful, scope is:', registration.scope);
        }).catch(function (err) {
            console.log('Service worker registration failed, error:', err);
        });
}

const firebaseConfig = {
    apiKey: "AIzaSyAQO5KFxbUnjmoggCRdAkk7wcKXjewRDnU",
    authDomain: "saas-a6939.firebaseapp.com",
    databaseURL: "https://saas-a6939.firebaseio.com",
    projectId: "saas-a6939",
    storageBucket: "saas-a6939.appspot.com",
    messagingSenderId: "1061462994754",
    appId: "1:1061462994754:web:3ef0dcc11942e042cda2db",
    measurementId: "G-6T9DCBJNME"
};

firebase.initializeApp(firebaseConfig);

export default firebase;

这是我尝试打印令牌的 useEffect :

   useEffect(() => {
        const messaging = firebase.messaging();
        messaging.requestPermission().then(() => {
            return messaging.getToken()
        }).then(token => {
            console.log("TOKEN :", token)
        })
    }, [])

这也是我的 index.js 文件:

import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import * as serviceWorker from './serviceWorker';
import 'bootstrap/dist/css/bootstrap.min.css';
import { Provider } from 'react-redux';
import { store } from './Components/loginPage/Helpers';

const baseUrl = document.getElementsByTagName('base')[0].getAttribute('href');

ReactDOM.render(

  <Provider store={store}>
    <App />
  </Provider>,

  document.getElementById('root')
);

// If you want your app to work offline and load faster, you can change
// unregister() to register() below. Note this comes with some pitfalls.
serviceWorker.unregister();

我尝试了许多修复,但没有任何效果,但我仍然遇到同样的错误。我希望任何人都可以帮助我。提前致谢。

【问题讨论】:

  • 请不要张贴文字内容的截图,例如错误信息。而是发布实际文本,并使用 Stack Overflow 的格式化工具对其进行标记。这也将使您有机会搜索错误消息,因为这个问题以前曾出现过 - 并且几乎总是有相同的解决方案:找出为什么 /sw....js URL 提供错误的内容(它在你的情况),并解决这个问题。
  • @FrankvanPuffelen 感谢您的反馈。我将在接下来的帖子中尝试这样做。我怎么知道为什么我的 firebase-messaging-sw.js url 提供了错误的内容以及如何修复它!请给我一个提示。

标签: reactjs firebase firebase-cloud-messaging


【解决方案1】:

您需要从 public 的 firebase-messaging-sw.js 中删除并将 firebase.js 放入一个函数中并在 service-worker.js 中注册

if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('../firebase-messaging-sw.js')
    .then(function (registration) {
        console.log('Registration successful, scope is:', registration.scope);
    }).catch(function (err) {
        console.log('Service worker registration failed, error:', err);
    });}

使用推送通知

【讨论】:

猜你喜欢
  • 2019-08-19
  • 2021-05-20
  • 1970-01-01
  • 2014-09-22
  • 1970-01-01
  • 2019-08-09
  • 2017-02-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多