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

Flutter项目接入同一账号下两个Firebase实时数据库

问题描述

我有一个名为twoaccountfirebasedifferentinjustproject的Flutter Web项目,已上传至GitHub,待问题解决后可供他人参考使用。项目初始运行界面:
项目初始界面

我在同一Firebase账号下创建了两个项目:

  • twoaccountfirebaseone
  • twoaccountfirebasetwo
    两个项目均启用了Realtime Database服务。

目前已通过flutter configure完成twoaccountfirebaseone的Realtime Database配置,系统自动生成了google-services.json和firebase_options.dart文件,修改main.dart后可正常访问及操作该数据库,相关代码及效果如下:

初始化代码

import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_database/firebase_database.dart';
import 'package:flutter/material.dart';
import 'firebase_options.dart';

void main() async{
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp(
    options: DefaultFirebaseOptions.currentPlatform,
  );
  runApp(
    MaterialApp(
      home: const MyApp(),
    ),);
}

写入数据代码(main.dart第61-70行)

FirebaseDatabase database = FirebaseDatabase.instance;

final date = DateTime.now().toString();
final timenow = date.split('.');

final DBRef = FirebaseDatabase.instance.ref('example/'+timenow[0]);

await DBRef.set({
  'timenow': timenow[0],
});

写入效果:
写入数据效果

清空数据库代码(main.dart第89-96行)

FirebaseDatabase database = FirebaseDatabase.instance;

final date = DateTime.now().toString();
final timenow = date.split('.');

final DBRef = FirebaseDatabase.instance.ref('/');

await DBRef.set(null);

清空效果:
清空数据库效果

现在需要在该Flutter项目中同时接入twoaccountfirebasetwo的Realtime Database,实现两个数据库的并行访问与操作。已知需要创建第二个数据库实例,但不清楚具体操作方法,也不知道如何创建第二个firebase_options.dart文件,以及如何处理google-services.json文件的合并或新增。

已尝试参考相关步骤,GitHub项目已更新,希望得到帮助,同时请告知解决方法对应的文档来源,帮助提升解决问题的能力。


解决方案

1. 准备第二个Firebase项目配置文件

  • 下载twoaccountfirebasetwo的google-services.json,重命名为google-services-two.json,存到对应目录(Web项目放web文件夹,Android项目放android/app文件夹)。
  • 手动创建firebase_options_two.dart文件,复制firebase_options.dart的结构,替换为第二个项目的实际配置参数:
import 'package:firebase_core/firebase_core.dart';

class DefaultFirebaseOptionsTwo {
  static FirebaseOptions get currentPlatform {
    return FirebaseOptions(
      apiKey: "替换为第二个项目的API_KEY",
      authDomain: "twoaccountfirebasetwo.firebaseapp.com",
      databaseURL: "https://twoaccountfirebasetwo-default-rtdb.firebaseio.com",
      projectId: "twoaccountfirebasetwo",
      storageBucket: "twoaccountfirebasetwo.appspot.com",
      messagingSenderId: "替换为第二个项目的Sender ID",
      appId: "替换为第二个项目的App ID",
      measurementId: "替换为第二个项目的Measurement ID",
    );
  }
}

2. 初始化双Firebase App实例

修改main.dart,同时初始化两个App实例:

import 'firebase_options.dart';
import 'firebase_options_two.dart';

void main() async{
  WidgetsFlutterBinding.ensureInitialized();
  // 初始化第一个默认App
  await Firebase.initializeApp(
    options: DefaultFirebaseOptions.currentPlatform,
  );
  // 初始化第二个命名App,通过name参数区分实例
  await Firebase.initializeApp(
    options: DefaultFirebaseOptionsTwo.currentPlatform,
    name: "secondaryApp",
  );
  runApp(const MaterialApp(home: MyApp()));
}

3. 操作第二个Realtime Database

通过指定App实例获取第二个数据库引用,实现并行操作:

// 获取第二个App实例
final secondaryApp = Firebase.app("secondaryApp");
// 创建第二个数据库实例
final secondaryDatabase = FirebaseDatabase.instanceFor(app: secondaryApp);

// 写入第二个数据库
final date = DateTime.now().toString();
final timenow = date.split('.');
final secondaryDBRef = secondaryDatabase.ref('example/${timenow[0]}');
await secondaryDBRef.set({'timenow': timenow[0]});

// 清空第二个数据库
final secondaryDBRoot = secondaryDatabase.ref('/');
await secondaryDBRoot.set(null);

4. Web项目额外配置

在web/index.html的<body>标签内添加双项目的Firebase初始化脚本:

<!-- 第一个项目初始化 -->
<script type="module">
  import { initializeApp } from "https://www.gstatic.com/firebasejs/9.22.0/firebase-app.js";
  const primaryConfig = {
    // 第一个项目的配置参数
  };
  initializeApp(primaryConfig);
</script>

<!-- 第二个项目初始化 -->
<script type="module">
  import { initializeApp } from "https://www.gstatic.com/firebasejs/9.22.0/firebase-app.js";
  const secondaryConfig = {
    // 第二个项目的配置参数
  };
  initializeApp(secondaryConfig, "secondaryApp");
</script>

参考文档

  • Firebase官方:多项目使用指南
  • Flutter Firebase:多App初始化说明
  • Realtime Database:多数据库访问文档

内容的提问来源于stack exchange,提问作者Luciano Cruz Junior

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 21:10:27