# App-Verwaltung und Deinstallation (v1.9.17) ## Ziel Die PWA „BENSA Wetter" lässt sich installieren (siehe `docs/user-guide.md` „Installation"), aber bis v1.9.16 gab es keine verständliche Information dazu, wie man sie wieder **entfernt**. Ein Nutzer, der nach Installation und Verwaltung sucht, fand nichts. ## Warum es keinen "Deinstallieren"-Button gibt **Es gibt keine Web-API, mit der eine Seite sich selbst deinstalliert.** Eine PWA wird vom Betriebssystem/Browser als eigenständige App-Registrierung verwaltet (Startmenü-Eintrag, App-Verzeichnis, Servicebindung) - eine Webseite hat darauf keinen Zugriff. Eine Schaltfläche „App deinstallieren", die selbst etwas löscht, wäre daher **unehrlich** und würde nicht funktionieren. Stattdessen zeigt die Karte „App verwalten" (Reiter „Mehr"): 1. **Installationsstatus** - läuft die App gerade im Browser-Tab oder im Standalone-Modus (eigenes Fenster ohne Browserleiste)? 2. **Erkannte Plattform** - bestmöglich aus dem User-Agent-String abgeleitet, **nie als 100 % sicher behauptet** (siehe „Grenzen der Erkennung" unten). 3. **Eine dafür zutreffende, konkrete Anleitung** zum Deinstallieren - Text, keine Automation. ## Implementierung Reine Logik in `pwa/js/pwa-ui-state-lib.js` (`detectPlatform`, `determineUninstallGuidance`, getestet in `tests/run-pwa-ui-state-lib-tests.js`), DOM-Rendering in `pwa/js/app.js` (`renderAppManageCard`), Anzeige in `pwa/index.html` (`#appManageCard`, Reiter „Mehr", direkt unter der bestehenden Installationskarte). `detectPlatform(userAgent)` erkennt anhand einfacher, dokumentierter Muster: | Plattform | Erkennungsmuster | |---|---| | `android` | `/android/i` | | `ios` | `/iphone\|ipad\|ipod/i` | | `windows` | `/windows/i` | | `mac` | `/macintosh\|mac os x/i` | | `linux` | `/linux/i` | | `unknown` | kein Muster passt (sicherer Fallback, kein Absturz) | ## Anleitungstexte (Beispiele, siehe `UNINSTALL_INSTRUCTIONS`) - **Android:** „App-Symbol auf dem Startbildschirm gedrückt halten, dann „App-Info" bzw. „Deinstallieren" wählen." - **Windows:** „Im Windows-Startmenü die App mit der rechten Maustaste anklicken und „Deinstallieren" wählen (alternativ: Einstellungen → Apps → installierte Apps)." - **iOS:** „Safari kennt keine klassische Deinstallation: Symbol auf dem Startbildschirm gedrückt halten, bis ein Menü erscheint, dann „App entfernen" wählen." - **Mac:** „Je nach Browser: installierte Web-Apps über das Browsermenü öffnen (z. B. Chrome unter chrome://apps) und dort entfernen." - **Linux/unbekannt:** allgemeiner Hinweis, im Browsermenü nach installierten Apps zu suchen. Jede Antwort enthält zusätzlich einen festen Hinweis: „Menü- und Schaltflächenbezeichnungen können sich je nach Browser- und Betriebssystemversion unterscheiden." - bewusst vorsichtig formuliert, weil sich Menünamen zwischen Chrome-Versionen, Edge, Firefox usw. unterscheiden und das Projekt das nicht für jede Kombination pflegen kann. ## Deinstallation außerhalb der Webseite Das ist der zentrale Punkt dieses Features: **die eigentliche Deinstallation passiert immer außerhalb dieser Webseite**, im Betriebssystem oder Browser selbst. Diese Karte kann nur *erklären*, wo der Nutzer dafür hinmuss - sie kann den Vorgang nicht auslösen, überwachen oder bestätigen. Es gibt daher auch keine "Deinstallation erfolgreich"-Rückmeldung o. Ä. ## Grenzen der Erkennung - `detectPlatform` liest ausschließlich `navigator.userAgent` - ein manipulierter oder ungewöhnlicher User-Agent-String (z. B. in manchen Privatsphäre-Browsern) kann zu einer falschen Plattformzuordnung führen. Der Fallback (`unknown`) ist dafür bewusst allgemein gehalten, statt eine falsche, zu spezifische Anleitung zu zeigen. - `isStandalone()` (`display-mode: standalone` bzw. `navigator.standalone` auf iOS) kann in seltenen Fällen (z. B. bestimmte In-App-Browser) ungenau sein - auch hier zeigt die Karte nur eine Einschätzung, keine Garantie. ## Tests `tests/run-pwa-ui-state-lib-tests.js`: `detectPlatform` für alle unterstützten Muster plus leere/unbekannte Werte; `determineUninstallGuidance` für jede Plattform (konkrete Anleitung, nie-leerer Hinweis, Standalone- vs. Browser-Tab-Text, keine Behauptung einer automatisierten Deinstallation). `tests/run-ui-static-checks-tests.js` prüft zusätzlich, dass die Karte in `pwa/index.html`/`pwa/js/app.js` tatsächlich verdrahtet ist.