Auf dieser Seite wird beschrieben, wie Sie mehr als ein Firebase-Projekt in Ihrer App verwenden.
Viele Apps benötigen nur ein einziges Firebase-Projekt und die Standardeinrichtung, die in den Erste Schritte-Anleitungen beschrieben wird. In den folgenden Fällen kann es nützlich sein, mehrere Firebase-Projekte zu verwenden:
- Einrichten Ihrer Entwicklungsumgebung zur Verwendung verschiedener Firebase-Projekte je nach Build-Typ oder Ziel
- Zugriff auf Inhalte aus mehreren Firebase-Projekten in Ihrer App
Verschiedene Umgebungen unterstützen
Ein häufiger Anwendungsfall ist die Unterstützung separater Firebase-Projekte für Ihre Entwicklungs- und Produktionsumgebungen.
Die Web- und Admin-SDKs werden konfiguriert, indem Werte direkt an ihre Initialisierungsfunktionen übergeben werden. Für diese SDKs können Sie eine Laufzeitprüfung verwenden, um Konfigurationsvariablen für die Entwicklung oder Produktion auszuwählen.
Android- und Apple-Plattformen (und ihre Unity- und C++-Wrapper) laden die Konfiguration normalerweise aus einer Konfigurationsdatei: GoogleService-Info.plist auf der Apple-Plattform und google-services.json unter Android. Diese Dateien werden in ein Optionenobjekt (FIROption oder FirebaseOptions) eingelesen, auf das vom Firebase-Anwendungsobjekt (FIRApp oder FirebaseApp) verwiesen wird.
Bei diesen Plattformen wird der Wechsel zwischen Umgebungen in der Regel als Entscheidung zur Build-Zeit implementiert, indem für jede Umgebung unterschiedliche Konfigurationsdateien verwendet werden.
Mehrere Umgebungen in Ihrer Apple-Anwendung unterstützen
Standardmäßig lädt FirebaseApp.configure() die Datei GoogleService-Info.plist, die mit der Anwendung gebündelt ist. Wenn Ihre Entwicklungs- und Produktionsumgebungen in Xcode als separate Ziele konfiguriert sind, haben Sie folgende Möglichkeiten:
- Laden Sie beide Dateien
GoogleService-Info.plistherunter. - Speichern Sie die beiden Dateien in verschiedenen Verzeichnissen.
- Fügen Sie beide Dateien Ihrem Xcode-Projekt hinzu.
- Verknüpfen Sie die verschiedenen Dateien mit den verschiedenen Zielen über das Feld „Zielmitgliedschaft“:

Wenn die Builds Teil eines einzelnen Ziels sind, ist es am besten, beiden Konfigurationsdateien eindeutige Namen zu geben (z.B. GoogleService-Info-Free.plist und GoogleService-Info-Paid.plist). Wählen Sie dann zur Laufzeit aus, welche PLIST-Datei geladen werden soll.
Dies wird im folgenden Beispiel gezeigt:
// Load a named file. guard let filePath = Bundle.main.path(forResource: "MyGoogleService", ofType: "plist"), let fileOptions = FirebaseOptions(contentsOfFile: filePath) else { fatalError("Couldn't load config file.") } FirebaseApp.configure(options: fileOptions)
Mehrere Umgebungen in Ihrer Android-App unterstützen
Unter Android wird die Datei google-services.json vom Google Services Gradle-Plug-in in Android-Stringressourcen verarbeitet. Welche Ressourcen erstellt werden, erfahren Sie in der Dokumentation zum Google Services-Plug-in unter
JSON-Datei verarbeiten.
Sie können mehrere google-services.json-Dateien für verschiedene
Build-Varianten
haben, indem Sie google-services.json-Dateien in separaten Verzeichnissen platzieren, die nach den jeweiligen
Varianten unter dem Stammverzeichnis des App-Moduls benannt sind. Wenn Sie beispielsweise die Build-Varianten „Entwicklung“ und „Release“ haben, kann Ihre Konfiguration so organisiert sein:
app/
google-services.json
src/development/google-services.json
src/release/google-services.json
...
Weitere Informationen finden Sie in der Dokumentation zum Google Services-Plug-in unter JSON-Datei hinzufügen.
Diese Ressourcen werden dann vom FirebaseInitProvider, der vor dem Anwendungscode ausgeführt wird und die Firebase APIs mit diesen Werten initialisiert, geladen.
Da dieser Anbieter nur Ressourcen mit bekannten Namen liest, können Sie die Stringressourcen auch direkt Ihrer App hinzufügen, anstatt das Google Services Gradle-Plug-in zu verwenden. Dazu haben Sie folgende Möglichkeiten:
- Entfernen Sie das Plug-in
google-servicesaus Ihrerbuild.gradle-Datei auf Stammebene. - Löschen Sie die Datei
google-services.jsonaus Ihrem Projekt. - Fügen Sie die Stringressourcen direkt hinzu.
- Löschen Sie
apply plugin: 'com.google.gms.google-services'aus Ihrerbuild.gradle-Datei der App.
Mehrere Projekte in Ihrer Anwendung verwenden
Manchmal müssen Sie mit denselben APIs auf verschiedene Projekte zugreifen, z. B. auf mehrere Datenbankinstanzen. In den meisten Fällen gibt es ein zentrales Firebase-Anwendungsobjekt, das die Konfiguration für alle Firebase APIs verwaltet. Dieses Objekt wird im Rahmen der normalen Einrichtung initialisiert. Wenn Sie jedoch von einer einzelnen Anwendung aus auf mehrere Projekte zugreifen möchten, benötigen Sie ein separates Firebase-Anwendungsobjekt, um auf jedes einzeln zu verweisen. Sie müssen diese anderen Instanzen selbst initialisieren.
In beiden Fällen müssen Sie zuerst ein Firebase-Optionsobjekt erstellen, das die Konfigurationsdaten für die Firebase-Anwendung enthält. Die vollständige Dokumentation zu den Optionen finden Sie in der API-Referenzdokumentation für die folgenden Klassen:
- Swift:
FirebaseOptions(googleAppID:gcmSenderID:) - Android:
FirebaseOptions.Builder - Web:
initializeApp() - C++:
firebase::App::Create - Unity:
FirebaseApp.Create - Node.js:
initializeApp - Java:
FirebaseOptions.Builder
Die Verwendung dieser Klassen zur Unterstützung mehrerer Projekte in einer Anwendung wird in den folgenden Beispielen gezeigt:
Swift
// Configure with manual options. Note that projectID and apiKey, though not // required by the initializer, are mandatory. let secondaryOptions = FirebaseOptions(googleAppID: "1:27992087142:ios:2a4732a34787067a", gcmSenderID: "27992087142") secondaryOptions.apiKey = "AIzaSyBicqfAZPvMgC7NZkjayUEsrepxuXzZDsk" secondaryOptions.projectID = "projectid-12345" // The other options are not mandatory, but may be required // for specific Firebase products. secondaryOptions.bundleID = "com.google.firebase.devrel.FiroptionConfiguration" secondaryOptions.clientID = "27992087142-ola6qe637ulk8780vl8mo5vogegkm23n.apps.googleusercontent.com" secondaryOptions.databaseURL = "https://myproject.firebaseio.com" secondaryOptions.storageBucket = "myproject.appspot.com" secondaryOptions.deepLinkURLScheme = "myapp://" secondaryOptions.storageBucket = "projectid-12345.appspot.com" secondaryOptions.appGroupID = nil
Kotlin
// Manually configure Firebase Options. The following fields are REQUIRED: // - Project ID // - App ID // - API Key val options = FirebaseOptions.Builder() .setProjectId("my-firebase-project") .setApplicationId("1:27992087142:android:ce3b6448250083d1") .setApiKey("AIzaSyADUe90ULnQDuGShD9W23RDP0xmeDc6Mvw") // .setDatabaseUrl(...) // .setStorageBucket(...) .build()
Java
// Manually configure Firebase Options. The following fields are REQUIRED: // - Project ID // - App ID // - API Key FirebaseOptions options = new FirebaseOptions.Builder() .setProjectId("my-firebase-project") .setApplicationId("1:27992087142:android:ce3b6448250083d1") .setApiKey("AIzaSyADUe90ULnQDuGShD9W23RDP0xmeDc6Mvw") // setDatabaseURL(...) // setStorageBucket(...) .build();
Web
// The following fields are REQUIRED: // - Project ID // - App ID // - API Key const secondaryAppConfig = { projectId: "<PROJECT_ID>", appId: "<APP_ID>", apiKey: "<API_KEY>", // databaseURL: "...", // storageBucket: "...", };
C++
firebase::AppOptions secondary_app_options;
// API key, app ID, and project ID are always required.
secondary_app_options.set_api_key("<API_KEY>");
secondary_app_options.set_app_id("<GOOGLE_APP_ID>");
secondary_app_options.set_project_id("<PROJECT_ID>");
// The following options are specific to individual Firebase products
// and may not always be required.
secondary_app_options.set_database_url("<DATABASE_URL>");
secondary_app_options.set_messaging_sender_id("<SENDER_ID>");
secondary_app_options.set_storage_bucket("<STORAGE_BUCKET>");
Unity
Firebase.AppOptions secondaryAppOptions = new Firebase.AppOptions {
ApiKey = "<API_KEY>",
AppId = "<GOOGLE_APP_ID>",
ProjectId = "<PROJECT_ID>"
};
Node.js
const secondaryServiceAccount = require('./path/to/serviceAccountKey.json'); // All required options are specified by the service account, // add service-specific configuration like databaseURL as needed. const secondaryAppConfig = { credential: cert(secondaryServiceAccount), // databaseURL: 'https://<DATABASE_NAME>.firebaseio.com' };
Java
FileInputStream serviceAccount = new FileInputStream("path/to/serviceAccountKey.json");
FirebaseOptions secondaryAppConfig = new FirebaseOptions.Builder()
.setCredential(FirebaseCredentials.fromCertificate(serviceAccount))
.setDatabaseUrl("https://<DATABASE_NAME>.firebaseio.com/")
.build();
Nachdem Sie dieses Optionenobjekt initialisiert haben, können Sie es verwenden, um eine zusätzliche Firebase-Anwendungsinstanz zu konfigurieren. In allen unten gezeigten Beispielen verwenden wir den String secondary. Dieser Name wird verwendet, um die Anwendungsinstanz abzurufen und sie von anderen Instanzen zu unterscheiden, einschließlich der Standardinstanz ([DEFAULT]). Sie sollten einen String auswählen, der für die beabsichtigte Verwendung des anderen Firebase-Projekts geeignet ist.
Die folgenden Snippets zeigen, wie Sie eine Verbindung zu einer alternativen Realtime Database herstellen. Die APIs für andere Firebase-Funktionen folgen demselben Muster.
Swift
// Configure an alternative FIRApp. FirebaseApp.configure(name: "secondary", options: secondaryOptions) // Retrieve a previous created named app. guard let secondary = FirebaseApp.app(name: "secondary") else { fatalError("Could not retrieve secondary app") } // Retrieve a Real Time Database client configured against a specific app. let secondaryDb = Database.database(app: secondary)
Kotlin
// Initialize secondary FirebaseApp. Firebase.initialize(context = this, options, "secondary") // Retrieve secondary FirebaseApp. val secondary = Firebase.app("secondary") // Get the database for the other app. val secondaryDatabase = Firebase.database(secondary)
Java
// Initialize with secondary app FirebaseApp.initializeApp(this /* Context */, options, "secondary"); // Retrieve secondary FirebaseApp FirebaseApp secondary = FirebaseApp.getInstance("secondary");
Web
// Initialize another app with a different config const secondaryApp = firebase.initializeApp(secondaryAppConfig, "secondary"); // Access services, such as the Realtime Database // secondaryApp.database();
C++
firebase::App* secondary_app = firebase::App::Create(secondary_app_options, "Secondary");
firebase::database::Database* secondary_database = firebase::database::Database::GetInstance(secondary_app);
Unity
var secondaryApp = Firebase.FirebaseApp.Create(secondaryAppOptions, "Secondary"));
var secondaryDatabase = Firebase.Database.FirebaseDatabase.getInstance(secondaryApp);
Node.js
// Initialize another app with a different config const secondary = initializeApp(secondaryAppConfig, 'secondary'); // Access services, such as the Realtime Database // const secondaryDatabase = secondary.database();
Java
// Initialize another app with a different config
FirebaseApp secondaryApp = FirebaseApp.initializeApp(secondaryAppConfig, "secondary");
// Retrieve the database.
FirebaseDatabase secondaryDatabase = FirebaseDatabase.getInstance(secondaryApp);
Zuverlässige Berichte für Analytics sicherstellen
Google Analytics erfasst Ereignisse sehr früh im App-Startablauf, in manchmal bevor die primäre Firebase-App-Instanz konfiguriert wurde. In diesen Fällen verweist Firebase auf die Android-Ressource oder GoogleService-Info.plist auf Apple-Plattformen, um die richtige Google-App-ID zum Speichern von Ereignissen zu ermitteln. Aus diesem Grund empfehlen wir, nach Möglichkeit die Standardkonfigurationsmethoden zu verwenden.
Wenn eine Laufzeitkonfiguration erforderlich ist, beachten Sie die folgenden Einschränkungen:
- Wenn Sie AdMob verwenden und Anzeigen wie empfohlen beim Start anfordern, gehen möglicherweise einige Analytics-Daten zu mobilen Anzeigen verloren, wenn Sie nicht den ressourcen basierten Konfigurationsansatz verwenden.
- Geben Sie in jeder verteilten Variante Ihrer App nur eine Google-App-ID an. Wenn Sie beispielsweise Version 1 Ihrer App mit einer bestimmten
GOOGLE_APP_IDin der Konfiguration ausliefern und dann Version 2 mit einer anderen ID hochladen, können Analytics-Daten verloren gehen. - Fügen Sie auf Apple-Plattformen Ihrem Projekt keine Datei „GoogleService-Info.plist“ hinzu, wenn Sie zur Laufzeit eine andere Konfiguration angeben, da dies zu einer scheinbaren Änderung von
GOOGLE_APP_IDund zum Verlust von Analytics-Daten führen kann.