Doku: App Check abgeschlossen, Hosting-Anleitung auf Cloudflare/Hetzner zugeschnitten
App Check ist jetzt vollständig live und gerätegetestet (Deploy 49b7f44,
Bestätigung durch Chris). Die Datenschutz-Hosting-Anleitung ersetzt den
vagen Platzhalter-Vorschlag durch Chris' konkretes Setup: eigene Domain
über Cloudflare vor dem Hetzner-VPS, inkl. Origin-Certificate und
nginx-Vorlage.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
parent
49b7f4496c
commit
8d2b10b9ee
2 changed files with 27 additions and 14 deletions
|
|
@ -232,15 +232,27 @@ Ziel: dieselbe „ohne öffentlichen Store-Eintrag"-Stufe für Android.
|
|||
- *Anzeigen:* keine Werbung in der App.
|
||||
5. **Interner Test-Track:** *Testen → Interner Test* → neue Version → AAB hochladen → Tester per Google-Konto-E-Mail oder Google-Gruppe hinzufügen → Link zur Teilnahme an die Tester schicken (kein Review, Verfügbarkeit meist innerhalb weniger Minuten).
|
||||
|
||||
## Hosting-Vorschlag: Datenschutzerklärung öffentlich erreichbar machen
|
||||
## Hosting: Datenschutzerklärung öffentlich erreichbar machen
|
||||
|
||||
`docs/legal/datenschutz.html` ist bewusst eine einzelne, eigenständige HTML-Datei ohne Build-Schritt — sie kann 1:1 ausgeliefert werden. Da die eigene Domain für die App noch aussteht, als Zwischenlösung der pragmatischste Weg über den bereits laufenden Hetzner-VPS (dort läuft schon nginx als Reverse-Proxy vor Forgejo, siehe `docs/git-forgejo.md`):
|
||||
`docs/legal/datenschutz.html` ist bewusst eine einzelne, eigenständige HTML-Datei ohne Build-Schritt — sie kann 1:1 ausgeliefert werden. Chris nutzt bereits Cloudflare vor einer eigenen Domain, daher läuft das Hosting so:
|
||||
|
||||
1. Datei auf den Server kopieren, z. B. nach `/var/www/leafittome-legal/datenschutz.html`.
|
||||
2. Kleinen `server{}`-Block (oder `location`-Block auf einem bestehenden Host) in der nginx-Config ergänzen, der diesen Ordner statisch ausliefert — entweder unter einer neuen Subdomain (`legal.cshomelabs.work`) oder einem Pfad auf einer bestehenden Domain, je nachdem was ohne DNS-Änderung am schnellsten geht.
|
||||
3. Die resultierende URL in App Store Connect (Schritt 10) und Play Console (Schritt 11) eintragen.
|
||||
1. **Cloudflare-DNS:** Subdomain anlegen, z. B. `datenschutz.<domain>.tld` → A-Record auf die IP des Hetzner-VPS. Proxy (orange Wolke) aktiviert lassen.
|
||||
2. **SSL/TLS-Modus auf „Full (strict)"** stellen (Cloudflare → SSL/TLS → Übersicht) — **nicht** „Flexible", sonst ist die Strecke Cloudflare↔Server unverschlüsselt. Dafür ein **Origin Certificate** erzeugen (Cloudflare → SSL/TLS → Origin Server → Zertifikat erstellen; 15 Jahre gültig, kein Renewal wie bei Let's Encrypt nötig) und auf dem Server ablegen.
|
||||
3. **Auf dem Hetzner-VPS:** Datei nach z. B. `/var/www/leafittome-legal/datenschutz.html` kopieren, neuer nginx-`server{}`-Block neben dem bestehenden Forgejo-Setup:
|
||||
```nginx
|
||||
server {
|
||||
listen 443 ssl;
|
||||
server_name datenschutz.<domain>.tld;
|
||||
|
||||
Sobald die endgültige `leafittome`-Domain steht, kann die Seite dorthin umziehen — die App-Store-/Play-Einträge müssten dann nur die URL aktualisieren.
|
||||
ssl_certificate /etc/nginx/cloudflare-origin.pem;
|
||||
ssl_certificate_key /etc/nginx/cloudflare-origin.key;
|
||||
|
||||
root /var/www/leafittome-legal;
|
||||
index datenschutz.html;
|
||||
}
|
||||
```
|
||||
4. Vor dem Hochladen die Platzhalter (`[Name]`/`[E-Mail-Adresse]`/`[Datum]`) in `docs/legal/datenschutz.html` ausfüllen.
|
||||
5. Die resultierende URL in App Store Connect (Schritt 10) und Play Console (Schritt 11) eintragen.
|
||||
|
||||
## Begriffe kurz erklärt
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Handoff: LeafItToMe (Pflanzenpflege-App)
|
||||
|
||||
Stand: 2026-08-19 (Session-Ende). Sprache mit dem Nutzer (Chris): **Deutsch**.
|
||||
Stand: 2026-08-20 (Session-Ende). Sprache mit dem Nutzer (Chris): **Deutsch**.
|
||||
|
||||
## Projekt in einem Satz
|
||||
|
||||
|
|
@ -34,19 +34,20 @@ Private Flutter-App (iOS+Android) zur Pflanzenpflege für Haushalt + Pflanzen-Si
|
|||
|
||||
Ziel fürs Erste: **nur TestFlight + Play-Internal-Testing**, kein öffentlicher Store-Eintrag (mit Chris abgestimmt — spart Screenshots/Store-Texte/Altersfreigabe für später). Bundle-ID bleibt bewusst `dev.leafittome.app` (eigene Domain steht noch aus, ist aber kein Blocker für TestFlight/Internal-Testing).
|
||||
|
||||
**Code-seitig erledigt:**
|
||||
- App Check Client-Integration (Debug-Provider, `lib/main.dart`) — Functions erzwingen es noch nicht, siehe `firebase-einrichtung.md` Schritt 9 für den zweiten Schritt (Provider in der Console registrieren, dann erst `enforceAppCheck: true`).
|
||||
**App Check: vollständig abgeschlossen** (2026-08-20). Play Integrity (Android) + App Attest (iOS) in der Firebase-Console registriert, Debug-Token hinterlegt, „Verified requests" für Cloud Functions auf beiden Plattformen bestätigt, `enforceAppCheck: true` auf allen 7 `onCall`-Functions deployt (Commit `49b7f44`) und per Gerätetest bestätigt (Pflanze anlegen/Diagnose funktionieren normal). **Hinweis für später:** Unverified Requests bei Firestore/Storage in der Console sind erwartet/harmlos — dafür wurde nie Enforcement eingerichtet, nur für die Functions. Ebenso die einmalige iOS-Kaltstart-Meldung „App not registered … exchangeDeviceCheckToken" — bekannte, folgenlose Plugin-Race, siehe `firebase-einrichtung.md` Schritt 9.
|
||||
|
||||
**Weiteres Code-seitig erledigt:**
|
||||
- iOS: `ITSAppUsesNonExemptEncryption = false` in `Info.plist` (vermeidet wiederkehrende Export-Compliance-Nachfrage bei jedem TestFlight-Upload).
|
||||
- Android: Release-Signing vorbereitet (`android/app/build.gradle.kts` liest `key.properties`, Vorlage `android/key.properties.example`; Datei + `.jks` sind in `.gitignore`). **Der Upload-Key selbst existiert noch nicht** — Chris muss ihn per `keytool` erzeugen (Befehl in `firebase-einrichtung.md` Schritt 11) und sofort sichern.
|
||||
- `flutter_launcher_icons` vorbereitet (`pubspec.yaml`), zeigt auf `assets/icon/icon.png` — Datei existiert noch nicht.
|
||||
- Entwurf Datenschutzerklärung: `docs/legal/datenschutz.html` (Platzhalter `[Name]`/`[E-Mail-Adresse]`/`[Datum]` müssen noch von Chris ausgefüllt werden), Hosting-Vorschlag (Hetzner-VPS/nginx) in `firebase-einrichtung.md`.
|
||||
- Neue Doku-Schritte in `firebase-einrichtung.md`: **Schritt 9** (App Check, konkretisiert), **Schritt 10** (TestFlight einrichten), **Schritt 11** (Play Internal Testing einrichten) — inkl. Textvorlagen für Apples App-Privacy-Fragebogen und Googles Data-Safety-Formular.
|
||||
- Entwurf Datenschutzerklärung: `docs/legal/datenschutz.html` (Platzhalter `[Name]`/`[E-Mail-Adresse]`/`[Datum]` müssen noch von Chris ausgefüllt werden). Hosting-Anleitung in `firebase-einrichtung.md` jetzt konkret auf Chris' Setup zugeschnitten: eigene Domain + Cloudflare (Subdomain per A-Record auf den Hetzner-VPS, SSL-Modus „Full (strict)" mit Cloudflare-Origin-Certificate, nginx-Server-Block-Vorlage).
|
||||
- Nebenbei behoben: SPM-Versionskonflikt durch `firebase_app_check`-Einführung (inkonsistente Firebase-Paket-Minor-Versionen verhinderten den iOS-Build) — Commit `248f3be`.
|
||||
- Neue Doku-Schritte in `firebase-einrichtung.md`: **Schritt 9** (App Check, jetzt komplett abgeschlossen), **Schritt 10** (TestFlight einrichten), **Schritt 11** (Play Internal Testing einrichten) — inkl. Textvorlagen für Apples App-Privacy-Fragebogen und Googles Data-Safety-Formular.
|
||||
|
||||
**Noch offen (Chris' Konsolen-Schritte, alle in `firebase-einrichtung.md` Schritt 9–11 dokumentiert):**
|
||||
**Noch offen (Chris' nächste Schritte, alle in `firebase-einrichtung.md` Schritt 10–11 dokumentiert):**
|
||||
- App-Icon: 1024×1024-Design liefern → unter `assets/icon/icon.png` ablegen → `dart run flutter_launcher_icons`.
|
||||
- Datenschutzerklärung: Platzhalter ausfüllen + irgendwo öffentlich hosten (Vorschlag: Hetzner-VPS).
|
||||
- Datenschutzerklärung: Platzhalter ausfüllen + über Cloudflare/Hetzner hosten (Anleitung s. o.).
|
||||
- Android-Upload-Key erzeugen (`keytool`, Schritt 11) und sichern.
|
||||
- App Check: Play Integrity/App Attest in der Firebase-Console registrieren, Metriken abwarten, danach `enforceAppCheck: true` in den Functions + Redeploy.
|
||||
- App Store Connect: App-Eintrag anlegen, Privacy-URL + App-Privacy-Fragebogen ausfüllen, Build hochladen, interne TestFlight-Gruppe + Tester.
|
||||
- Play Console: App anlegen, Datenschutz-URL + Data-Safety-Formular + Content-Rating ausfüllen, internen Test-Track + Tester.
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue