Il problema che ho è con il controllo delle versioni di una singola applicazione mobile (creata con Cordova) e con i servizi Web WCF che consuma.
Situazione: l'ultima versione dell'app mobile è sempre disponibile attraverso l'app store. I servizi Web vengono distribuiti ai clienti, che non aggiornano i servizi Web molto spesso. Tuttavia i servizi web sono in costante sviluppo e versioni più recenti verranno rilasciate in futuro. Tra qualche tempo ci saranno molte diverse versioni dei servizi web implementati e solo una versione più recente dell'app mobile nell'app store. Posso costringere le persone ad aggiornare l'app per dispositivi mobili, ma non ad aggiornare i servizi Web a cui l'app deve connettersi.
Esempio di problema: ad esempio, esistono diverse versioni dei servizi Web implementate. La versione più recente dei servizi Web offre una sorta di operazione fantastica, che ovviamente la versione più recente dell'app desidera utilizzare. Quando l'app tenta di eseguire questa operazione con una versione precedente dei servizi Web, l'app genera errori.
Domanda: il problema che ho riscontrato è come posso rendere l'app compatibile con tutti i servizi distribuiti su tutti i diversi servizi?
Soluzioni che conosco:
- Ovviamente c'è la soluzione per rendere sempre l'applicazione compatibile all'indietro. L'app dovrà conoscere a quale versione del servizio Web si connette e può, a seconda della versione, mostrare dati diversi, recuperare dati diversi o comportarsi diversamente. Ciò può tuttavia creare un incubo da gestire se le versioni dei servizi Web si accumuleranno.
- Un'altra opzione, che è possibile perché l'app è stata creata con Cordova, consiste nel mettere solo un'app shell nell'app store. Questa shell fornirà all'utente solo l'opportunità di connettersi con il servizio Web di cui dispone e scaricherà il codice della versione dell'app corrispondente dai servizi Web. Questo risolverà il problema di versione, ma introdurrà altri problemi. Ad esempio, a volte la shell deve essere aggiornata affinché le librerie Cordova supportino le nuove versioni del sistema operativo (ad esempio iOS 8 / Android 6). È possibile che ciò introduca cambiamenti improvvisi nel codice Cordova. Quando ciò accade, ogni versione del codice dell'app su ogni servizio Web implementato dovrà essere aggiornata, il che significa molto lavoro perché ci sono solo molti servizi. Oltre alla seconda soluzione, è necessario caricare solo tutto il codice dell'app, fatta eccezione per alcune API wrapper per l'API Cordova. Questa API Cordova risiederà nell'app shell che viene pubblicata negli app store. Quando ci sono cambiamenti di rottura nelle API Cordova, queste possono essere incapsulate in queste API nell'app shell. Sebbene questa sia una soluzione migliore, non so ancora se sia utile caricare la maggior parte dell'app mobile da un servizio Web per supportare più versioni.
Secondo me nessuna di queste soluzioni è perfetta.
Ci saranno probabilmente soluzioni a cui non ho pensato e sono interessato a sentirle.