Firebase - getToken() 抛出不受支持的 MIME 类型

Posted

技术标签:

【中文标题】Firebase - getToken() 抛出不受支持的 MIME 类型【英文标题】:Firebase - getToken() throws Unsupported MIME type 【发布时间】:2021-12-23 05:58:13 【问题描述】:

我有一个 react-create-app 应用程序,其中我使用 firebase 进行推送通知。最近我将 firebase 从 8.* 升级到了 9.*。在获取推送令牌时,它会抛出以下错误:

FirebaseError: Messaging: We are unable to register the default service worker. Failed to register a ServiceWorker for scope ('https://9fd5-49-204-137-92.ngrok.io/firebase-cloud-messaging-push-scope') with script ('https://9fd5-49-204-137-92.ngrok.io/firebase-messaging-sw.js'): The script has an unsupported MIME type ('text/html'). (messaging/failed-service-worker-registration).

在 firebase.js 中,我有以下代码集,会引发上述错误

    import  initializeApp  from "firebase/app"
import  getToken, getMessaging, onMessage  from "firebase/messaging";

const message_key = "key"

var firebaseConfig = 
  apiKey: "apikey",
  authDomain: "authdomain",
  projectId: "project-app",
  storageBucket: "******.com",
  messagingSenderId: "id",
  appId: "appid",
  measurementId: "mid"
;

const firebaseApp = initializeApp(firebaseConfig);

 let messaging = getMessaging(firebaseApp);

    if ("serviceWorker" in navigator) 
        navigator.serviceWorker.register(process.env.PUBLIC_URL + "/firebase-messaging-sw.js")
        .then(function(registration) 
          console.log("Registration successful, scope is:", registration);
    
          getToken(messaging, vapidKey: message_key)
          .then((currentToken) => 
            if (currentToken) 
              console.log('current token for client: ', currentToken);
             else 
              console.log('No registration token available. Request permission to generate one.');
            
          ).catch((err) => 
            console.log('An error occurred while retrieving token. ', err);
          );
        )
        .catch(function(err) 
          console.log("Service worker registration failed, error:", err);
        );
        

我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

将 firebase-messaging-sw.js 文件移动到公共目录解决了上述问题。

【讨论】:

以上是关于Firebase - getToken() 抛出不受支持的 MIME 类型的主要内容,如果未能解决你的问题,请参考以下文章

使用firebase推送通知中的onTokenRefresh与getToken有啥区别?

Firebase 云消息传递的 getToken() 仅在我省略 usePublicVapidKey 方法时才有效,为啥?

如果我在 requestPermission 之后立即调用 Firebase 的 getToken,我会在控制台中收到错误,为啥?

MissingPluginException(在通道 plugins.flutter.io/firebase_messaging 上找不到方法 getToken 的实现)

未处理的异常:MissingPluginException(在通道 plugins.flutter.io/firebase_messaging 上找不到方法 getToken 的实现)

TypeError:messaging.getToken 不是函数