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

如何解决Unity WebGL集成Firebase时的‘firebase is not defined’错误?

问题原因与解决方法

Firebase 9.x采用模块化API设计,不再像旧版本那样暴露全局的firebase对象,你在jslib里直接调用firebase.database()自然会提示未定义。下面是具体的修正步骤:

1. 修正HTML中的Firebase初始化代码

你需要导入Firebase 9的具体模块,并将封装好的操作方法挂载到window全局对象,让jslib能够访问:

<script type="module">
  // 按需导入Firebase模块
  import { initializeApp } from "https://www.gstatic.com/firebasejs/9.15.0/firebase-app.js";
  import { getDatabase, ref, set } from "https://www.gstatic.com/firebasejs/9.15.0/firebase-database.js";

  // 你的Firebase配置
  const firebaseConfig = {
    apiKey: "你的API_KEY",
    authDomain: "你的AUTH_DOMAIN",
    databaseURL: "你的DATABASE_URL",
    projectId: "你的PROJECT_ID",
    storageBucket: "你的STORAGE_BUCKET",
    messagingSenderId: "你的SENDER_ID",
    appId: "你的APP_ID"
  };

  // 初始化Firebase应用
  const app = initializeApp(firebaseConfig);
  const db = getDatabase(app);

  // 封装数据提交函数,挂载到window供jslib调用
  window.submitToFirebase = async (dbPath, data) => {
    try {
      await set(ref(db, dbPath), data);
      console.log("数据提交成功");
      return true;
    } catch (err) {
      console.error("提交失败:", err);
      return false;
    }
  };
</script>

2. 修改jslib脚本中的调用逻辑

不要直接调用firebase.database(),而是调用我们挂载到window的封装函数:

mergeInto(LibraryManager.library, {
  // 示例:接收Unity传递的路径和数据,提交到Firebase
  SubmitDataToFirebase: function(pathPtr, dataPtr) {
    // 把Unity传递的指针转成字符串
    const dbPath = Pointer_stringify(pathPtr);
    const data = Pointer_stringify(dataPtr);
    
    // 调用全局的提交函数
    window.submitToFirebase(dbPath, data).then(success => {
      // 可选:回调通知Unity操作结果
      // 比如通过SendMessage给Unity的某个GameObject发消息
      if (success) {
        SendMessage("FirebaseManager", "OnSubmitSuccess", "");
      } else {
        SendMessage("FirebaseManager", "OnSubmitFailed", "");
      }
    });
  }
});

3. 关键注意事项

  • 确保HTML中的Firebase模块脚本在Unity的WebGL加载脚本(比如UnityLoader.js)之前执行,避免初始化未完成就调用方法。
  • 测试阶段检查Firebase实时数据库的规则设置,如果是默认的严格规则,会导致提交失败,可以暂时改为:
    {
      "rules": {
        ".read": true,
        ".write": true
      }
    }
    
    上线前务必修改为符合需求的安全规则。
  • 不要尝试在jslib中直接导入Firebase模块,jslib的运行环境无法识别ES模块语法,必须通过全局对象共享实例或方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 01:35:27