# Datenschutz-Angaben für die Stores — HabitMaker

Antworten für Googles **Data safety** (Play Console) und Apples **App Privacy /
Privacy Nutrition Labels** (App Store Connect). Muss mit der verlinkten
Datenschutzerklärung übereinstimmen: `https://glowiszyn.com/privacy/`

## Der Sachverhalt (aus dem Code, nicht aus der Vorlage)

Geprüft wurden `app/pubspec.yaml`, alle drei `AndroidManifest.xml`,
`ios/Runner/Info.plist` und `app/lib/` (Stand 07.10.2026, mit Pro-Abo und Widgets).

- **Einzige App-eigene Datenübertragung: die Kaufmeldung (RevenueKit, seit Okt. 2026).**
  Das **Pro-Abo** läuft über Google Play Billing bzw. StoreKit — das wickelt der
  Store ab. Bestätigte Käufe/Wiederherstellungen meldet `revenueview_sdk` an den
  eigenen Server `revenueview.glowiszyn.com` (Produkt-ID, Kaufbeleg/Token,
  Transaktions-ID, Preis/Währung, zufällige Installations-ID) — keine Werbe-ID,
  kein Tracking, keine Weitergabe. Sonst spricht die App keinen Server an.
  Ob nach dem Merge der Plugin-Manifeste (Billing, WorkManager) `INTERNET` im
  Release steckt, nach dem ersten Build prüfen:
  `aapt dump permissions app-release.apk` — seit RevenueKit ist `INTERNET` ohnehin nötig.
- **Keine Konten, keine Registrierung.** Es gibt keinen Login-Screen und keinen
  App-Server (nur die Kaufmeldung, s. o.); `README.md` der App: „Komplett offline: kein Konto, keine Cloud".
- **Keine Werbung, kein Tracking.** Weder `google_mobile_ads` noch Firebase,
  Analytics oder ein Crash-SDK sind Abhängigkeiten.
- **In-App-Käufe: Ja — HabitMaker Pro als Abo.** `habitmaker_pro_monthly`
  (1,99 €) und `habitmaker_pro_yearly` (12,99 €), siehe `app/RELEASE.md`. Die
  ersten 7 Tage sind alle Funktionen ohne Abo frei (in der App, ohne Zahlungsdaten).
- **Homescreen-Widgets** lesen eine lokale Kopie der heutigen Habits
  (Android: SharedPreferences des Widgets, iOS: App-Group-UserDefaults). Bleibt auf dem Gerät.
- **Speicherort aller Daten:** SharedPreferences des Geräts (Habits als JSON,
  erledigte Tage, Ruhezeiten, Sprache, Theme). Deinstallieren löscht alles.

Die einzigen Vorgänge, die das Gerät verlassen können:

| Vorgang | Ziel | Anmerkung |
|---|---|---|
| **CSV-Export** (`services/csv_export.dart`) | Share-Sheet des Betriebssystems | Der Nutzer wählt das Ziel selbst; die App verschickt nichts von sich aus |
| **Backup (Pro)** (`services/backup_service.dart`) | Share-Sheet / Dateiauswahl | Wie CSV: nur auf Tipp, Ziel wählt der Nutzer |
| **Pro-Abo** (`services/pro_store.dart`) | Google Play / App Store | Kauf und Abo-Status laufen über den Store |
| **Kaufmeldung** (`revenueview_sdk`) | `revenueview.glowiszyn.com` (eigener Server) | Nur bei bestätigtem Kauf/Restore: Produkt-ID, Kaufbeleg, Transaktions-ID, Preis/Währung, zufällige Installations-ID |
| **Link in den Einstellungen** (`launchUrl`, `LaunchMode.externalApplication`) | externer Browser | Nur auf Tipp; es werden keine App-Daten mitgegeben |

Verwendete Berechtigungen im Release:

| Berechtigung | Warum |
|---|---|
| `RECEIVE_BOOT_COMPLETED` | Erinnerungen nach einem Geräteneustart neu planen |
| `POST_NOTIFICATIONS` (über `flutter_local_notifications` gemerged) | lokale Erinnerungen anzeigen (Android 13+) |

Bewusst **nicht** nötig: `SCHEDULE_EXACT_ALARM` — geplant wird
`inexactAllowWhileIdle`, deshalb entfällt der zusätzliche Systemdialog.

---

## Google Play — Data safety

- **Does your app collect or share any of the required user data types?** → **Ja** (nur die Kaufmeldung).
- **Shares data with third parties:** Nein
- **Encrypted in transit:** Ja (HTTPS zu `revenueview.glowiszyn.com`)
- **Data deletion:** „Nutzer können Daten löschen" → vollständig **in der App**
  (Habit löschen) bzw. durch Deinstallieren. Kein Konto, kein Support-Ticket nötig.
  Kaufmeldungen (RevenueKit) löschen wir auf Anfrage an hello@glowiszyn.com
  (Bestell-/Transaktionsnummer angeben).

**Ankreuzen:**

| Play-Kategorie | Konkret in der App | Zweck | Optional? |
|---|---|---|---|
| Financial info › Purchase history | Bestätigte Käufe/Wiederherstellungen (Produkt-ID, Kaufbeleg, Transaktions-ID, Preis/Währung) an RevenueKit (eigener Server) | Analytics, Account management (Analyse/Kontoverwaltung) | Nein (fällt bei jedem Kauf an) |
| Device or other IDs | Zufällige Installations-ID von RevenueKit (keine Werbe-ID, nicht app-übergreifend) | Analytics | Nein |

**Keine weitere Kategorie ankreuzen**, insbesondere nicht:

- **Health and fitness** — nahe liegend, aber falsch. HabitMaker kennt keine
  Gesundheitsdaten: es liest weder Health Connect noch Apple Health, misst
  nichts und speichert weder Schritte, Puls, Gewicht noch Kalorien. Ein Habit ist
  eine frei benannte Zeile mit einem Häkchen pro Tag. Entscheidend für Data
  safety ist ohnehin nicht die *Art* der Daten, sondern ob sie **erhoben**
  (= vom Gerät übertragen) werden — das tut die App nur für die Kaufmeldung.
- Personal info · Location · Financial info außer Purchase history · Messages · Photos and videos ·
  Audio · Files and docs · Calendar · Contacts · App activity · Web browsing ·
  App info and performance (kein Crash-SDK) · Advertising ID (keine Werbe-ID)

**Ads declaration im Listing:** „Enthält Werbung: **Nein**" ·
**In-App-Käufe: Ja** (Abo HabitMaker Pro).

**Store-Kategorie:** *Health & Fitness* ist die passende **Listing**-Kategorie —
das ist eine Einordnung im Store und hat mit Data safety nichts zu tun. Wer
lieber ohne diese Nähe auskommt, nimmt *Productivity*; beides ist vertretbar.

---

## Apple — App Privacy (Privacy Nutrition Labels)

- **„Does this app collect data?"** → **Ja** (nur die Kaufmeldung).
- **Tracking (App Tracking Transparency):** Nein → **kein ATT-Prompt**, kein
  `NSUserTrackingUsageDescription` in der `Info.plist` (dort steht auch keins).
- **Age Rating:** 4+ — keine Werbung, keine Nutzerinhalte von Dritten.
  In-App-Käufe sind für 4+ zulässig.

In App Store Connect nur diese Angaben, alles andere (auch `Health & Fitness`) bleibt leer:

| Apple-Kategorie | Konkret | Zweck | Mit Identität verknüpft? | Tracking? |
|---|---|---|---|---|
| Purchases › Purchase History | Bestätigte Käufe/Wiederherstellungen an RevenueKit (eigener Server) | Analytics | Nein | Nein |
| Identifiers › Device ID | Zufällige RevenueKit-Installations-ID (keine IDFA) | Analytics | Nein | Nein |

**Trotzdem in App Store Connect / Xcode zu erledigen:**

- **Privacy Manifest (`PrivacyInfo.xcprivacy`) ist Pflicht.** Verwendete
  „required reason APIs" nach den Abhängigkeiten:
  `shared_preferences` → UserDefaults, Grund **`CA92.1`**;
  Datei-Zeitstempel (über `share_plus`/`path_provider`) → **`C617.1`**.
- **Notifications:** Die App fragt die Erlaubnis erst, wenn die erste
  Erinnerung gesetzt wird — im Review-Hinweis erwähnen, damit der Prüfer sie
  findet.
- **Account Deletion:** entfällt, die App legt kein Konto an. Im Review-Hinweis
  vermerken.

---

## Vor dem Abgeben prüfen

- [ ] `https://glowiszyn.com/privacy/` erreichbar (`curl -o /dev/null -w '%{http_code}'`)
- [ ] Die Seite sagt dasselbe wie diese Datei: nur Kaufmeldung (RevenueKit), sonst keine Datenerhebung
- [ ] Play *Data safety* = Purchase history + Device or other IDs (s. o.), *Content rating*-Fragebogen ausgefüllt
- [ ] „Enthält Werbung: Nein" und „In-App-Käufe: Ja" gesetzt
- [ ] Apple *App Privacy* = Purchases + Device ID (nicht verknüpft, kein Tracking), Age Rating 4+
- [ ] `PrivacyInfo.xcprivacy` liegt im iOS-Target
- [ ] RevenueKit (seit Okt. 2026): ab dieser Version Angaben in Play Console und App Store Connect umstellen — Übersicht: `~/projects/_aktionen-2026/DATENSCHUTZ-ANPASSUNG.md`.
