You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter Web集成FCM本地正常,部署Firebase Hosting报错求助

Flutter Web部署Firebase Hosting后FCM MissingPluginException 解决方案

以下是针对你遇到的本地正常、部署后出现MissingPluginException(No implementation found for method Messaging#getToken)问题的排查和修复步骤:

  • 调整Service Worker注册顺序
    你当前的代码中先注册FCM的Service Worker,再初始化Flutter,这可能导致Flutter的Service Worker覆盖或干扰FCM的插件实现。修改index.html中的脚本,将FCM的Service Worker注册放在Flutter初始化完成之后:

    <script>
      window.addEventListener("load", function (ev) {
        _flutter.loader
          .loadEntrypoint({
            serviceWorker: {
              serviceWorkerVersion: serviceWorkerVersion,
            },
          })
          .then(function (engineInitializer) {
            return engineInitializer.initializeEngine();
          })
          .then(function (appRunner) {
            // 先完成Flutter引擎初始化,再注册FCM的Service Worker
            if ("serviceWorker" in navigator) {
              navigator.serviceWorker.register("/firebase-messaging-sw.js");
            }
            return appRunner.runApp();
          });
      });
    </script>
    
  • 验证firebase-messaging-sw.js的位置与内容
    确保该文件放在web目录的根路径下,构建后会被自动复制到build/web文件夹中。文件需要包含正确的Firebase初始化代码,示例如下(替换为你的项目配置):

    importScripts('https://www.gstatic.com/firebasejs/9.22.0/firebase-app.js');
    importScripts('https://www.gstatic.com/firebasejs/9.22.0/firebase-messaging.js');
    
    firebase.initializeApp({
      apiKey: "你的API_KEY",
      authDomain: "你的AUTH_DOMAIN",
      projectId: "你的PROJECT_ID",
      storageBucket: "你的STORAGE_BUCKET",
      messagingSenderId: "你的SENDER_ID",
      appId: "你的APP_ID"
    });
    
    const messaging = firebase.messaging();
    

    注意JS版本要和你的dart包版本兼容,避免版本不匹配导致的插件实现缺失。

  • 清理Firebase Hosting缓存
    部署后旧的静态资源可能被缓存,导致新的FCM插件代码未加载。执行部署命令时添加缓存清理标记:

    firebase deploy --only hosting -m "清除缓存,更新FCM资源"
    

    也可以直接在Firebase控制台的Hosting设置中手动触发缓存清理。

  • 补充Firebase Web初始化配置
    在index.html的head标签中添加Firebase Web端的初始化脚本,确保在Flutter加载前完成Firebase初始化:

    <script type="module">
      import { initializeApp } from "https://www.gstatic.com/firebasejs/9.22.0/firebase-app.js";
      const firebaseConfig = {
        apiKey: "你的API_KEY",
        authDomain: "你的AUTH_DOMAIN",
        projectId: "你的PROJECT_ID",
        storageBucket: "你的STORAGE_BUCKET",
        messagingSenderId: "你的SENDER_ID",
        appId: "你的APP_ID"
      };
      const app = initializeApp(firebaseConfig);
    </script>
    
  • 重新构建项目
    执行以下命令清理旧构建文件,重新获取依赖并构建生产版本:

    flutter clean
    flutter pub get
    flutter build web --release
    

    同时确认pubspec.yaml中已添加firebase_core依赖(FCM必须依赖它):

    firebase_core: ^2.15.0
    firebase_messaging: ^14.2.1
    

内容的提问来源于stack exchange,提问作者David Somekh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 13:10:23