- flutterfire configure: firebase_options.dart, google-services.json, GoogleService-Info.plist - firebase_core eingebunden, Firebase.initializeApp in main.dart - Doku firebase-einrichtung.md auf aktuellen Stand gebracht - Verifiziert: flutter analyze/test grün, Android-Debug-Build erfolgreich Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
74 lines
5 KiB
Markdown
74 lines
5 KiB
Markdown
# Firebase-Einrichtung — Schritt für Schritt
|
||
|
||
Firebase ist Googles „Backend als Dienst": Es liefert uns Login (**Auth**), Datenbank mit Echtzeit-Sync (**Firestore**), Foto-Speicher (**Storage**), serverseitigen Code (**Cloud Functions**) und Push-Nachrichten (**FCM**) — ohne dass wir einen eigenen Server betreiben.
|
||
|
||
> **Stand:** Schritt 1–3 sind erledigt (18.07.2026): Projekt `leaf-it-to-me-app` existiert, die iOS- und Android-App sind registriert, `lib/firebase_options.dart` ist erzeugt und Firebase wird beim App-Start initialisiert. Die App-Daten (Pflanzen etc.) laufen noch über Demo-Daten — Firestore folgt im nächsten Block. Dieses Dokument wird mit jedem Baustein erweitert.
|
||
|
||
## Was wofür? (Überblick)
|
||
|
||
| Baustein | Aufgabe in LeafItToMe |
|
||
| --- | --- |
|
||
| **Authentication** | Login mit E-Mail+Passwort, Google und Apple |
|
||
| **Cloud Firestore** | Datenbank: Haushalte, Pflanzen, Stellplätze, Bestätigungen — synchronisiert in Echtzeit auf alle Geräte des Haushalts |
|
||
| **Storage** | Speichert die Pflanzen- und Stellplatz-Fotos |
|
||
| **Cloud Functions** | Unser Server-Code: ruft PlantNet/Claude auf (damit API-Keys nie in der App stecken) und verschickt die täglichen Erinnerungen |
|
||
| **Cloud Messaging (FCM)** | Stellt die Push-Nachrichten auf dem Sperrbildschirm zu |
|
||
|
||
## Schritt 1: Firebase-Projekt anlegen (machst du, ~10 Minuten)
|
||
|
||
1. Öffne <https://console.firebase.google.com> und melde dich mit deinem Google-Konto an.
|
||
2. **„Projekt hinzufügen"** → Name: `leafittome` → Google Analytics kannst du **deaktivieren** (brauchen wir nicht).
|
||
3. Nach dem Anlegen bist du in der Projekt-Übersicht. Fertig für heute — Apps registrieren wir gemeinsam per CLI (Schritt 3).
|
||
|
||
## Schritt 2: Auf den Blaze-Tarif umstellen (machst du, ~5 Minuten)
|
||
|
||
Cloud Functions (unser Server-Code) setzen den **Blaze-Tarif** („Pay as you go") voraus. Keine Sorge vor Kosten:
|
||
|
||
- Die großzügigen **Gratis-Kontingente bleiben auch im Blaze-Tarif bestehen** (z. B. 2 Mio. Function-Aufrufe/Monat, 50.000 Firestore-Lesezugriffe/Tag). Bei ~5 Nutzern bleiben wir weit darunter → real **~0 €/Monat**.
|
||
- In der Console: Zahnrad → **Nutzung und Abrechnung** → **Tarif ändern** → Blaze → Kreditkarte hinterlegen.
|
||
|
||
**Kostenschutz einrichten (wichtig, machen wir direkt mit):**
|
||
|
||
1. In der Google Cloud Console (<https://console.cloud.google.com>, gleiches Projekt) → **Abrechnung → Budgets und Benachrichtigungen**.
|
||
2. Budget anlegen: z. B. **5 €/Monat**, E-Mail-Alarm bei 50 %, 90 % und 100 %.
|
||
3. So bekommst du eine Mail, lange bevor irgendetwas teuer wird.
|
||
|
||
## Schritt 3: App mit Firebase verbinden (machen wir gemeinsam per CLI)
|
||
|
||
Wenn Schritt 1–2 erledigt sind, läuft das so (führe ich mit dir aus, hier zur Doku):
|
||
|
||
```bash
|
||
# Firebase-CLI installieren und einloggen (öffnet den Browser)
|
||
npm install -g firebase-tools
|
||
firebase login
|
||
|
||
# FlutterFire-CLI installieren
|
||
dart pub global activate flutterfire_cli
|
||
|
||
# Verbindet das Flutter-Projekt mit dem Firebase-Projekt:
|
||
# registriert die iOS- und Android-App und erzeugt lib/firebase_options.dart
|
||
flutterfire configure
|
||
```
|
||
|
||
`flutterfire configure` erzeugt `lib/firebase_options.dart` — darin stehen die Projekt-Kennungen (keine Geheimnisse, darf ins Git). Die eigentlichen API-Keys (Anthropic, PlantNet) leben **nur** in der Cloud-Functions-Umgebung, niemals in der App.
|
||
|
||
**Was dabei konkret passiert ist (zum Nachvollziehen):**
|
||
|
||
- In der Firebase Console tauchen unter *Projekteinstellungen → Meine Apps* jetzt zwei Apps auf (iOS und Android, jeweils `dev.leafittome.app`).
|
||
- `android/app/google-services.json` und `ios/Runner/GoogleService-Info.plist` sind die plattformspezifischen Verbindungsdateien; `firebase.json` merkt sich die Zuordnung fürs CLI.
|
||
- In den Android-Gradle-Dateien wurde das `google-services`-Plugin eingetragen (verarbeitet die JSON-Datei beim Build).
|
||
- `lib/main.dart` ruft beim Start `Firebase.initializeApp(...)` auf — ab jetzt können wir nach und nach Auth, Firestore, Storage und FCM andocken.
|
||
|
||
## Schritt 4 und folgende (kommen mit den nächsten Blöcken)
|
||
|
||
- **Firestore-Datenmodell + Sicherheitsregeln** — wer darf was lesen/schreiben (Haushalts-Mitgliedschaft), Doku folgt beim Firestore-Block.
|
||
- **Auth einrichten** — E-Mail+Passwort, Google, Apple (Apple-Login braucht den Apple Developer Account).
|
||
- **Cloud Functions** — PlantNet-/Claude-Anbindung und die geplante Erinnerungs-Function (läuft alle 15 Minuten).
|
||
- **FCM** — Push-Einrichtung inkl. APNs-Schlüssel für iOS (aus dem Apple Developer Account).
|
||
|
||
## Begriffe kurz erklärt
|
||
|
||
- **Projekt:** Der Container für alles — eine App = ein Firebase-Projekt.
|
||
- **Firestore-Dokument/Collection:** Firestore ist keine Tabellen-Datenbank, sondern speichert JSON-artige *Dokumente* in *Collections* (Ordnern), z. B. `households/abc123/plants/xyz789`.
|
||
- **Security Rules:** Regeln auf dem Server, die festlegen, wer welche Dokumente lesen/schreiben darf — unser Schutz, obwohl die App direkt mit der Datenbank spricht.
|
||
- **Cloud Function:** Eine Funktion (bei uns TypeScript), die bei Ereignissen oder nach Zeitplan auf Google-Servern läuft.
|