Un rapido snipped di codice che permette di gestire l’aggiornamento over-the-air di file presenti all’interno della nostra app:
function getFile(filename) { Ti.API.info("Carico file" + filename + ".txt"); var f = Titanium.Filesystem.getFile(Ti.Filesystem.applicationDataDirectory, filename + '.txt'); var contents = f.read(); contents = contents.text; if(Titanium.Network.networkType != Titanium.Network.NETWORK_NONE) { //Scarico cache Ti.API.info("scarico cache"); var xhr = Titanium.Network.createHTTPClient(); xhr.open("GET", "http://[SERVER DI PROVISIONING]/" + filename + ".txt"); xhr.onload = function() { statusCode = xhr.status; if(statusCode == 200) { var doc = this.responseText; Ti.API.info(doc); var f = Titanium.Filesystem.getFile(Ti.Filesystem.applicationDataDirectory, filename + '.txt'); Ti.API.info("ELIMINO VECCHIO FILE:" + f.deleteFile()); f.write(doc); } }; xhr.send(); } return contents; }
I file devono essere già presenti nella location Ti.Filesystem.applicationDataDirectory: la cosa migliore da fare è copiarli nella cartella Resources del progetto (io utilizzo una directory archivi nella quale metto tutti gli archivi ‘di default’) e copiarli in applicationDataDirectory con questa semplice funzione:
function copyFile(filename) { var fromFile = Titanium.Filesystem.getFile(Ti.Filesystem.resourcesDirectory, 'archivi/' + filename + '.txt'); var contenuto = fromFile.read() var toFile = Titanium.Filesystem.getFile(Ti.Filesystem.applicationDataDirectory, filename + '.txt'); if(toFile.exists() === false) toFile.write(contenuto); }
La funzione getFile non fa altro che prelevare il file dal path passato come parametro e restituirlo, contestualmente verifica se è presente una connessione di rete disponibile e inizia a scaricare in background una nuova versione del file (dall’indirizzo specificato con [SERVER DI PROVISIONING]).A download terminato lo sostituisce a quello attualmente in uso.
Al successivo avvio dell’applicazione, i dati saranno aggiornati.