132 lines
5.0 KiB
Markdown
132 lines
5.0 KiB
Markdown
# LME Mappe Catastali Pro - Play Store Checklist
|
|
|
|
## Identita app
|
|
|
|
- Nome: LME Mappe Catastali Pro.
|
|
- Package name Android: `it.liviomerola.lmemappecatastali.pro`.
|
|
- Versione corrente da pubblicare: `1.0.11` / version code `111`.
|
|
- Formato Release Android: Android App Bundle (`.aab`).
|
|
- Target SDK Release: Android 16 / API 36.
|
|
|
|
## Base e Pro
|
|
|
|
La separazione e centralizzata in `Services/EntitlementService.cs`.
|
|
|
|
Base gratuita:
|
|
|
|
- consultazione mappa catastale;
|
|
- ricerca localita e ricerca catastale;
|
|
- GPS live;
|
|
- fino a 15 disegni, misure, POI e punti GPS creati dall'utente;
|
|
- apertura e consultazione dei dati gia presenti.
|
|
|
|
Pro:
|
|
|
|
- archivio progetti;
|
|
- export GIS/PDF/GPX;
|
|
- sincronizzazione WebDAV;
|
|
- mappe offline;
|
|
- strumenti geometrici avanzati;
|
|
- traccia GPS.
|
|
- disegni, misure, POI e punti GPS senza limite applicativo.
|
|
|
|
Se l'abbonamento non risulta verificabile offline, l'app conserva una tolleranza locale e non elimina, sequestra o altera i dati dell'utente. Le funzioni Pro possono essere disabilitate, ma i dati esistenti devono restare consultabili.
|
|
|
|
## Google Play Billing
|
|
|
|
Configurare nella Play Console un unico prodotto in abbonamento:
|
|
|
|
- product id: `lme_pro`;
|
|
- base plan mensile: `monthly`, prezzo discusso `EUR 4,99`;
|
|
- base plan annuale: `yearly`, prezzo discusso `EUR 39,99`.
|
|
|
|
Il codice contiene solo identificativi di prodotto e base plan. Non inserire chiavi casuali, segreti, service account, keystore o password nel repository.
|
|
|
|
Il client Android usa Google Play Billing 9.1 tramite `Xamarin.Android.Google.BillingClient 9.1.0.2`. Acquisto, ripristino, acknowledgement e interrogazione delle sottoscrizioni sono collegati a `EntitlementService`.
|
|
|
|
Il client supporta la verifica server-side dei purchase token tramite un endpoint HTTPS configurato in fase di build. Il servizio di riferimento e in `tools/LmePlayVerifier` e usa la Google Play Developer API senza incorporare credenziali nell'app.
|
|
|
|
Per il test chiuso l'endpoint puo restare disattivato. Prima della produzione occorre pubblicare il servizio, autorizzare il relativo service account nella Play Console e compilare l'app con `PlayBillingVerificationUrl` e `PlayBillingVerificationRequired=true`.
|
|
|
|
## Licenze manuali
|
|
|
|
- Codice opaco cifrato AES-GCM e firmato RSA 3072, inseribile nelle impostazioni dell'app.
|
|
- Registro SQLite con nome, cognome, email, emissione, scadenza, hash, note e revoca amministrativa.
|
|
- Ritorno automatico a Base alla scadenza, salvo abbonamento Google ancora valido.
|
|
- Nessun vincolo al PC emittente o al dispositivo destinatario.
|
|
- Backup portabile `.lmekey` della chiave privata, cifrato da password, per l'uso da altri sistemi o utenti Windows.
|
|
|
|
Dettagli operativi e limiti della revoca offline sono in `MANUAL_LICENSES.md`.
|
|
|
|
## Firma Android
|
|
|
|
Usare Play App Signing.
|
|
|
|
Da fare fuori repository:
|
|
|
|
- creare upload key e keystore in una cartella privata;
|
|
- salvare password in secret manager, variabili ambiente o CI secret;
|
|
- configurare `AndroidSigningKeyStore`, `AndroidSigningKeyAlias`, `AndroidSigningKeyPass` e `AndroidSigningStorePass` solo in ambiente locale/CI;
|
|
- caricare la upload certificate nella Play Console quando richiesto.
|
|
|
|
## Privacy e permessi
|
|
|
|
Permessi Android dichiarati:
|
|
|
|
- Internet e stato rete;
|
|
- posizione approssimativa e precisa;
|
|
- Billing.
|
|
|
|
La privacy policy deve spiegare:
|
|
|
|
- uso GPS e posizione per mappa, particelle, tracce e misure;
|
|
- uso rete per mappe, servizi catastali pubblici, geocoding, sync WebDAV e aggiornamenti;
|
|
- gestione locale di progetti, backup, mappe offline e preferenze;
|
|
- eventuali chiavi personali Google/Azure salvate nel SecureStorage del dispositivo;
|
|
- acquisti gestiti da Google Play.
|
|
|
|
## Localizzazione e misure
|
|
|
|
La localizzazione applicativa e in `Services/AppLocalizationService.cs`.
|
|
|
|
Lingue iniziali:
|
|
|
|
- Italiano;
|
|
- Inglese.
|
|
|
|
Sistemi di misura:
|
|
|
|
- automatico in base all'area;
|
|
- metrico;
|
|
- imperiale.
|
|
|
|
La mappa JavaScript riceve cultura e sistema di misura tramite `lmeMap.setLocalization(...)`; distanze, superfici e Leaflet Draw vengono formattati di conseguenza.
|
|
|
|
## Build Release
|
|
|
|
Esempio locale, con Android SDK installato:
|
|
|
|
```powershell
|
|
dotnet publish -f net10.0-android -c Release -p:AndroidSdkDirectory=C:\Users\livio\AppData\Local\Android\Sdk
|
|
```
|
|
|
|
Per firmare aggiungere solo parametri esterni o variabili ambiente, mai valori nel file `.csproj`.
|
|
|
|
Per creare APK e AAB di test con una chiave locale separata:
|
|
|
|
```powershell
|
|
.\scripts\build-android-test.ps1
|
|
```
|
|
|
|
La chiave di test non deve essere usata come upload key del Play Store.
|
|
|
|
## Interventi richiesti sull'account Google
|
|
|
|
- aprire o confermare l'account sviluppatore Play Console;
|
|
- creare l'app con package `it.liviomerola.lmemappecatastali.pro`;
|
|
- creare `lme_pro` con i base plan `monthly` e `yearly` e impostarne prezzi e paesi;
|
|
- attivare Play App Signing e creare una upload key di produzione;
|
|
- configurare tester, traccia di test interno e account licenza;
|
|
- predisporre credenziali e servizio per la verifica server-side dei purchase token;
|
|
- pubblicare la privacy policy su un URL pubblico e completare Data safety, scheda store e classificazione contenuti.
|