# 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:** Vorbereitung. Die App läuft aktuell noch mit Demo-Daten ohne Firebase. Dieses Dokument wird mit jedem Firebase-Baustein erweitert und führt dich durch alles, was du selbst (mit deinem Google-Konto) tun musst. ## Was wofür? (Überblick) | Baustein | Aufgabe in Planty | | --- | --- | | **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 und melde dich mit deinem Google-Konto an. 2. **„Projekt hinzufügen"** → Name: `planty` → 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 (, 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. ## 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.