Project_SylDa/appstore.md

205 lines
9.9 KiB
Markdown

# App Store Publicatie — Sylvia Touch Relay
## Licentie-overzicht Dependencies
| Dependency | Versie | Licentie | Copyleft? | FOSS? |
|---|---|---|---|---|
| `io.github.dkaukov:esp32-flash-lib` | 1.1.17 | **GPL-3.0** | Ja (strong) | Ja |
| `com.eclipsesource.minimal-json:minimal-json` | 0.9.5 | MIT | Nee | Ja |
| `org.slf4j:slf4j-nop` | 2.0.16 | MIT | Nee | Ja |
| `androidx.security:security-crypto` | 1.1.0-alpha06 | Apache 2.0 | Nee | Ja |
| `androidx.core:core-ktx` | 1.12.0 | Apache 2.0 | Nee | Ja |
| `androidx.appcompat:appcompat` | 1.6.1 | Apache 2.0 | Nee | Ja |
### GPL-3.0 Copyleft Implicatie
`esp32-flash-lib` is GPL-3.0. Een app die ertoe linkt (compile-time dependency) moet zelf ook GPL-3.0 (of compatibele licentie) zijn. Dit betekent:
- App **moet** onder GPL-3.0 worden uitgebracht
- Source code moet beschikbaar blijven (GitHub volstaat)
- Geen proprietary SDKs linken (niet van toepassing)
- Voor andere stores (Amazon, Samsung) is dit geen belemmering
### Actie: GPL-3.0 toepassen ✅ Voltooid
1. ✅ `LICENSE` file toevoegen in repo root (volledige GPL-3.0 tekst)
2. ✅ Source file headers toevoegen: `// SPDX-License-Identifier: GPL-3.0-or-later` in alle 6 Kotlin bestanden
3. ✅ `README.md` licentiesectie bijwerken
---
## Google Play Store
### Vereisten (2026)
| Vereiste | Status | Opmerking |
|---|---|---|
| Ontwikkelaarsaccount | ❌ Nog aanmaken | $25 eenmalig |
| Overheids-ID verificatie | ❌ Nog doen | Paspoort/rijbewijs + selfie |
| AAB formaat (geen APK) | ❌ Release build nodig | Nu alleen debug |
| Release signing key | ❌ Aanmaken | `keytool` of Play App Signing |
| targetSdk ≥ 35 | ❌ Nu 34 | Verplicht; ≥ 36 vanaf 31 aug 2026 |
| App icoon (mipmap) | ❌ Ontbreekt | Geen mipmap resources aanwezig |
| Privacy Policy URL | ❌ Nodig | Website of GitHub Pages |
| Data Safety formulier | ❌ Invullen | In Play Console |
| IARC content rating | ❌ Invullen | Vragenlijst in Play Console |
| App signing | ⚠️ Keuze | Play App Signing (aanbevolen) of eigen key |
| `minifyEnabled true` | ⚠️ Aanbevolen | Proguard/R8 rules ontbreken nog |
| `ACCESS_FINE_LOCATION` | ⚠️ Mogelijk overbodig | Sinds Android 12 niet meer nodig voor BLE scan |
### Closed Testing Verplichting
Nieuwe persoonlijke accounts moeten **closed testing** doorlopen:
- Minimaal **12 testers**
- Minimaal **14 opeenvolgende dagen** testen
- Testers moeten de app actief gebruiken
- Na goedkeuring: pas dan kan de app publiek
### Publicatie Stappenplan
1. Ontwikkelaarsaccount aanmaken + ID verificatie
2. `targetSdk` upgraden naar 35 (codereview #7.2)
3. App icoon ontwerpen + mipmap resources toevoegen
4. Release build configureren (signing, minify, proguard)
5. Privacy Policy pagina maken (GitHub Pages of statische site)
6. AAB build maken: `./gradlew bundleRelease`
7. Closed testing opzetten met 12 testers
8. Na 14 dagen: productie-release indienen
---
## Alternatieve App Stores
### Vergelijking
| Store | Kosten | Review tijd | GMS nodig? | FOSS verplicht? | Relevante beperking |
|---|---|---|---|---|---|
| **Samsung Galaxy Store** | Gratis | Weken | Nee | Nee | 16KB page size verplicht voor native libs |
| **Amazon Appstore** | $0 | ~1 dag | Nee | Nee | Laagste drempel, grote userbase (Fire TV/tablets) |
| **F-Droid** | $0 | 2-3 weken | Nee | **Ja** | Bouwt zelf vanuit source; hele codebase + deps moeten FOSS |
| **Huawei AppGallery** | Gratis | Dagen | Nee | Nee | ID verificatie verplicht |
| **Aptoide** | $0 | Uren | Nee | Nee | Minimale review, minder vertrouwd |
### F-Droid Specifiek
- **Compatibel**: alle deps zijn FOSS (GPL-3.0, MIT, Apache 2.0)
- **Vereist**: app moet open-source licentie hebben → GPL-3.0 (verplicht door esp32-flash-lib copyleft)
- **Proces**: F-Droid bouwt de app zelf vanuit source (geen APK/AAB upload)
- **Aanvraag**: merge request in [fdroiddata](https://gitlab.com/fdroid/fdroiddata) repo met build recipe
- **Voordelen**: geen ontwikkelaarskosten, geen account nodig, vertrouwd door FOSS-gemeenschap
- **Nadelen**: kleine userbase, geen automatische updates buiten F-Droid client
### Amazon Appstore Specifiek
- **Laagste drempel**: gratis, snelle review (~1 dag), geen ID verificatie
- **Bereik**: Fire TV, Fire tablets, Kindle — niche maar relevant voor IoT-apps
- **Formaat**: APK of AAB
- **Aanmelden**: [developer.amazon.com](https://developer.amazon.com)
### Samsung Galaxy Store Specifiek
- **Bereik**: alleen Samsung Galaxy toestellen (groot marktaandeel, maar exclusief)
- **Niet-Samsung**: Galaxy Store kan officieel alleen op Samsung toestellen; sideloading APK op andere merken werkt onbetrouwbaar (ROM-afhankelijkheden, craches, geen updates)
- **16KB page size**: als de app native libraries bevat, moeten deze met 16KB page alignment worden gebuild. Onze app heeft geen native libs, dus geen probleem.
- **Aanmelden**: [seller.samsungapps.com](https://seller.samsungapps.com)
### Aptoide
- **Niet zelf-hosted**: jouw store draait binnen Aptoide's infrastructuur, niet op eigen server
- **Gebruikers moeten eerst Aptoide client installeren** voordat ze jouw store kunnen vinden
- **Data breach**: 2020 — 20M gebruikersgegevens gelekt
- **Review**: minimaal (uren), maar minder vertrouwd bij gebruikers
- **Geschikt voor**: grote distributie, niet voor 1-2 apps → overkill voor ons
---
## Eigen App Store (Self-Hosted)
Technisch is een eigen app store simpel: APK hosten op een webserver, gebruiker downloadt direct. Android staat installatie uit onbekende bronnen toe. Er zijn geen Google-licenties of -toestemmingen nodig om een app store te runnen.
### Praktische Overwegingen
- Gebruiker moet "Installatie uit onbekende bronnen" inschakelen; Google Play Protect waarschuwt
- Geen automatische updates tenzij je zelf een update-check in de app bouwt
- **Android Developer Verificatie (vanaf 2027 globaal)**: Google vereist identity verification + package name registratie via Android Developer Console voor installatie op gecertificeerde apparaten. Dit geldt voor óók sideloading. De verificatie is gratis (geen $25 Play-account nodig), maar vereist legitimatiebewijs.
### Self-Hosted Oplossingen Vergelijking
| Aspect | Selfdroid | Aptoide | Simpele webpagina |
|---|---|---|---|
| **Zelf-hosted** | ✅ Ja | ❌ Nee (Aptoide's ecosysteem) | ✅ Ja |
| **Installatie voor gebruiker** | URL in browser → download APK | Eerst Aptoide client, dan store zoeken | URL → download APK |
| **Licentie** | BSD 3-clause | Propriëtair | NVT |
| **Setup** | Python/Flask + nginx + uWSGI | Account op aptoide.com | Statische HTML |
| **Admin paneel** | ✅ Met wachtwoordbeveiliging | Via Aptoide dashboard | Handmatig upload |
| **APK metadata extractie** | ✅ Automatisch (naam, versie, icoon) | ✅ Automatisch | Nee |
| **Android companion app** | Gepland, nooit gebouwd | ✅ Aptoide client | Nee |
| **Data breach history** | Nee | Ja (2020, 20M gebruikers) | Nee |
| **Geschikt voor 1 app** | ✅ Perfect | ❌ Overkill | ✅ Simpelst |
### Aanrader: Selfdroid
**Selfdroid** ([vitlabuda/selfdroid-web-app](https://github.com/vitlabuda/selfdroid-web-app)) — self-hosted Android app store, Python/Flask, BSD-licentie.
Voordelen:
- Admin uploadt APK, metadata automatisch geëxtraheerd
- Gebruikers openen URL op telefoon → downloaden APK direct vanuit browser
- Geen extra app installatie nodig voor gebruikers
- Lichtgewicht: Python 3.7+, Flask, nginx + uWSGI
- Kan op bestaande server draaien
- BSD-licentie compatibel met onze GPL-3.0 app
Deploy stappen:
1. Clone repo, configureer `Settings.py` (admin wachtwoord)
2. `./prepare.sh` voor Python venv + dependencies
3. nginx vhost + uWSGI config (meegeleverd in repo)
4. Upload APK via admin paneel
5. Deel URL met gebruikers
Alternatief voor maximale eenvoud: APK op GitHub Releases hosten + simpele downloadpagina (GitHub Pages). Geen server nodig, maar geen auto-metadata of admin paneel.
---
## Multi-Channel Distributiestrategie
We publiceren parallel via meerdere kanalen. Geen exclusiviteit — Android staat meerdere distributiekanalen naast elkaar toe.
| Kanaal | Bereik | Kosten | Beheer | Prioriteit |
|---|---|---|---|---|
| **F-Droid** | FOSS-gebruikers wereldwijd | Gratis | MR in fdroiddata, F-Droid bouwt zelf | 1e |
| **Samsung Galaxy Store** | Samsung-gebruikers | Gratis | Upload AAB, Samsung review | 2e |
| **Eigen store (Selfdroid)** | Iedereen met directe link | Hosting alleen | APK upload via admin paneel | 3e |
| **Google Play Store** | Grootste bereik | $25 + ID verificatie | Veel vereisten, closed testing | 4e |
### Volgorde
1. **F-Droid** — geen kosten, F-Droid bouwt zelf vanuit source, vertrouwd kanaal
2. **Samsung Galaxy Store** — gratis, bereikt Samsung-gebruikers die geen F-Droid hebben
3. **Selfdroid (eigen store)** — APK distributie voor iedereen buiten F-Droid/Samsung, geen goedkeuringsproces
4. **Google Play Store** — grootste bereik maar veel vereisten (account, closed testing, targetSdk 35)
### Benodigde stappen vóór publicatie (alle kanalen)
| Stap | F-Droid | Galaxy Store | Eigen store | Google Play |
|---|---|---|---|---|
| GPL-3.0 licentie | ✅ Gedaan | — | — | — |
| Release build (signed) | F-Droid bouwt zelf | ✅ Nodig | ✅ Nodig | ✅ Nodig (AAB) |
| App icoon (mipmap) | ✅ Nodig | ✅ Nodig | — | ✅ Nodig |
| targetSdk ≥ 35 | — | — | — | ✅ Verplicht |
| Privacy Policy URL | — | — | — | ✅ Verplicht |
| Developer verificatie | — | — | 2027 | ✅ Automatisch |
| Proguard rules | Aanbevolen | Aanbevolen | — | Aanbevolen |
---
## Openstaande Codereview Punten die Publicatie Blokkeren
| # | Prioriteit | Bevinding | Relevantie voor publicatie |
|---|---|---|---|
| 7.2 | LAAG | compileSdk/targetSdk → 35 | **Blokkeert Google Play** |
| 4.5 | LAAG | Proguard rules | **Aanbevolen** voor release build |
| 6.2 | LAAG | Dark mode | Gebruikerservaring |
| — | — | App icoon (mipmap) | **Verplicht** voor alle stores |
| — | — | Release build signing | **Verplicht** voor alle stores |
| — | — | Privacy Policy URL | **Verplicht** voor Google Play |