Stack tecnologico, architettura offline-first, sincronizzazione, sicurezza e integrazione con l'API Nautilus: la scheda tecnica completa di AVEMI Campo.
AVEMI Campo è un'app Android distribuita come APK: si installa direttamente sullo smartphone scaricando il file APK fornito da AVEMI, senza passare per il Play Store. Funziona su tutti i dispositivi Android 8+, aggiornamenti gestiti da AVEMI su richiesta.
| Componente | Tecnologia |
|---|---|
| Frontend | Vanilla JS ES2022, HTML5, CSS3 |
| Storage locale | IndexedDB (via idb wrapper) |
| Offline cache | Service Worker (Cache API) |
| Mappa campo | Leaflet.js 1.9 + OpenStreetMap |
| GPS | Web Geolocation API |
| Fotocamera | MediaDevices.getUserMedia + Canvas compression |
| Sync | Background Sync API + polling 5 min |
| Auth | Bearer Token (HTTP header) |
| Backend API | PHP 8.0 + MySQL |
Al primo avvio, il Service Worker scarica e memorizza in cache tutti gli asset dell'app (HTML, CSS, JS, icone). Le versioni successive controllano l'hash per aggiornamenti.
I rilievi compilati offline vengono salvati in IndexedDB nel browser del dispositivo. Struttura identica al database server per una sincronizzazione senza conflitti.
Al ripristino della connessione (o ogni 5 minuti), il sync engine invia i record locali all'API, gestisce duplicati con ID locale e riceve conferma di avvenuta scrittura.
avemi-campo-v3). Al deploy di una nuova versione, la vecchia cache viene eliminata automaticamente e l'app si aggiorna senza intervento dell'utente.
Ogni operatore ha un token univoco generato con random_bytes(32) e hash SHA-256. Il token viene inviato in ogni richiesta API nell'header Authorization: Bearer ….
Il responsabile può revocare il token di un operatore dal pannello admin in tempo reale. Tutte le richieste successive vengono rifiutate con 401 Unauthorized.
Tutte le comunicazioni con il server avvengono esclusivamente su HTTPS. Le chiamate API sono cifrate end-to-end. Il certificato SSL è gestito dall'hosting cPanel.
Le fotografie vengono ridimensionate e compresse a JPEG qualità 70% direttamente nel browser prima dell'upload. Dimensione massima: 200KB per immagine.
Il backend di AVEMI Campo è scritto in PHP 8.0 puro, senza framework o dipendenze esterne. Gira su hosting cPanel condiviso standard, senza Docker, senza Redis, senza Composer.
| Endpoint | Metodo | Descrizione |
|---|---|---|
| /campo/api.php?action=auth | POST | Verifica token e restituisce info operatore |
| /campo/api.php?action=sync | POST | Riceve array di rilievi da sincronizzare |
| /campo/api.php?action=list | GET | Lista rilievi con paginazione e filtri |
| /campo/api.php?action=photo | POST | Upload foto singola (base64 o multipart) |
| /campo/api.php?action=stats | GET | Statistiche per dashboard admin (chart data) |
| /campo/api.php?action=export | GET | Export CSV UTF-8 BOM con tutti i rilievi |
| /campo/api.php?api=map | GET | Punti GPS per mappa Leaflet admin |
Forniamo lo ZIP di installazione completo con istruzioni passo-passo. Setup in meno di 10 minuti su qualsiasi hosting cPanel.
Richiedi pacchetto installazione ← A cosa serve