Zum Inhalt

Single-Tenant Firebase Setup

Dieses Projekt verwendet jetzt ein Single-Tenant-Setup, bei dem jede Deployment-Umgebung ihre eigene Firebase-Datenbank verwendet.

Konfigurationsdateien

Erstellen Sie folgende Firebase-Konfigurationsdateien im assets/firebase_config/ Verzeichnis:

  1. firebase_config_production.json - Für das Produktivsystem
  2. firebase_config_staging.json - Für das Testsystem
  3. firebase_config_development.json - Für die lokale Entwicklung

Format der Konfigurationsdateien

{
  "apiKey": "YOUR_API_KEY",
  "appId": "YOUR_APP_ID",
  "messagingSenderId": "YOUR_MESSAGING_SENDER_ID",
  "projectId": "YOUR_PROJECT_ID",
  "authDomain": "YOUR_AUTH_DOMAIN",
  "storageBucket": "YOUR_STORAGE_BUCKET"
}

Umgebungsauswahl

Die Umgebung wird automatisch basierend auf der Deployment-Methode ausgewählt:

1. Build-Zeit-Flag (Empfohlen)

# Produktionsbuild
flutter build web --dart-define=ENVIRONMENT=production

# Staging/Test-Build
flutter build web --dart-define=ENVIRONMENT=staging

# Development-Build
flutter build web --dart-define=ENVIRONMENT=development

2. Hostname-Erkennung (für Web)

Wenn kein Build-Flag gesetzt ist, wird die Umgebung automatisch anhand der Hostname erkannt:

  • localhost oder 127.0.0.1 → development
  • Domain enthält test oder staging → staging
  • Alle anderen → production

Deployment

Produktivsystem

# 1. Build für Produktion
flutter build web --dart-define=ENVIRONMENT=production --release

# 2. Deploy zu Firebase Hosting (Produktiv-Projekt)
firebase deploy --only hosting --project YOUR_PRODUCTION_PROJECT_ID

Testsystem

# 1. Build für Staging
flutter build web --dart-define=ENVIRONMENT=staging --release

# 2. Deploy zu Firebase Hosting (Test-Projekt)
firebase deploy --only hosting --project YOUR_STAGING_PROJECT_ID

Lokale Entwicklung

# Einfach starten - verwendet automatisch development config
flutter run -d chrome

Firebase-Projekte einrichten

  1. Erstellen Sie separate Firebase-Projekte:
  2. Ein Projekt für Produktion
  3. Ein Projekt für Staging/Test
  4. Optional: Ein Projekt für Development

  5. Für jedes Projekt:

  6. Aktivieren Sie Authentication (Email/Password)
  7. Erstellen Sie eine Firestore-Datenbank
  8. Konfigurieren Sie Firebase Hosting
  9. Kopieren Sie die Web-App-Konfiguration in die entsprechende JSON-Datei

  10. Firebase Hosting Konfiguration

Erstellen Sie verschiedene Sites in Firebase Hosting oder verwenden Sie verschiedene Projekte:

# Fügen Sie Sites für verschiedene Umgebungen hinzu
firebase hosting:sites:create production-site --project YOUR_PRODUCTION_PROJECT
firebase hosting:sites:create staging-site --project YOUR_STAGING_PROJECT

Vorteile des neuen Setups

✅ Einfachere Verwaltung - nur eine Firebase-App pro Umgebung ✅ Keine Multi-Tenant-Komplexität mehr ✅ Klare Trennung von Produktiv- und Testsystem ✅ Standard Firebase-Setup - einfacher zu debuggen ✅ Automatische Umgebungserkennung

Migration von Multi-Tenant

Die folgenden Änderungen wurden vorgenommen:

  • customerId wurde entfernt - Login benötigt jetzt keine customerId mehr
  • Firebase.initializeApp() verwendet keine benannte App mehr
  • FirebaseInstanceProvider verwendet die Default-App
  • Auth-Status wird jetzt mit isLoggedIn gespeichert statt customerId

Troubleshooting

"Firebase not initialized" Fehler

Stellen Sie sicher, dass die entsprechende Config-Datei existiert und gültig ist.

Falsche Umgebung wird verwendet

Prüfen Sie, ob das ENVIRONMENT Build-Flag korrekt gesetzt ist.

Login funktioniert nicht

Überprüfen Sie, ob Firebase Authentication im richtigen Projekt aktiviert ist.