Aggiornamento di applicazioni AIR
Gli utenti possono installare o aggiornare un'applicazione AIR facendo doppio clic su un file AIR sul computer o dal browser (utilizzando la funzionalità di installazione invisibile). Il programma di installazione di Adobe® AIR® gestisce l'installazione e avvisa l'utente se sta tentando di aggiornare un'applicazione esistente Tuttavia, è anche possibile che un'applicazione installata esegua l'aggiornamento automatico a una nuova versione utilizzando la classe Updater (un'applicazione installata può rilevare che una nuova versione è disponibile per essere scaricata e installata). La classe Updater include un metodo update() che consente di selezionare un file AIR sul computer dell'utente e di eseguire l'aggiornamento a quella versione. Il pacchetto dell'applicazione deve essere creato in formato di file AIR per poter utilizzare la classe Updater. Le applicazioni impacchettate come eseguibili o pacchetti nativi devono utilizzare le funzionalità di aggiornamento fornite dalla piattaforma nativa. L'ID applicazione e l'ID editore di un file AIR di aggiornamento devono corrispondere all'applicazione da aggiornare. L'ID editore viene ricavato dal certificato di firma. Sia l'aggiornamento che l'applicazione da aggiornare devono essere firmati con lo stesso certificato. Per AIR 1.5.3 e versioni successive, il file descrittore dell'applicazione include un elemento <publisherID>. È necessario utilizzare questo elemento se esistono versioni dell'applicazione sviluppate con AIR 1.5.2 o versioni precedenti. Per ulteriori informazioni, vedete publisherID. A partire da AIR 1.1 e versioni successive, potete migrare un'applicazione per utilizzare un nuovo certificato per la firma del codice. La migrazione di un'applicazione per utilizzare una nuova firma implica la firma del file AIR aggiornato con i certificati nuovo e originale. La migrazione del certificato è un processo unidirezionale. Dopo la migrazione, solo i file AIR firmati con il nuovo certificato (o con entrambi i certificati) verranno riconosciuti come aggiornamenti di un'installazione esistente. La gestione degli aggiornamenti delle applicazioni può essere un'operazione complessa. AIR 1.5 include il nuovo framework di aggiornamento per le applicazioni AdobeAIR. In questo framework sono disponibili le API che consentono agli sviluppatori di includere funzioni di aggiornamento adeguate nelle applicazioni AIR. Potete usare la migrazione del certificato per passare da un certificato autofirmato a un certificato firmato commerciale o da un certificato autofirmato o commerciale a un altro. Se non eseguite la migrazione del certificato, gli utenti esistenti devono rimuovere la versione corrente dell'applicazione prima di installare la nuova versione. Per ulteriori informazioni, vedete Modifica dei certificati. È consigliabile includere un meccanismo di aggiornamento nella vostra applicazione. Se create una nuova versione dell'applicazione, questo meccanismo può richiedere all'utente di installare la nuova versione. Il programma di installazione dell'applicazione AIR crea dei file di registro quando l'applicazione viene installata, aggiornata o rimossa. Potete consultare questi registri per individuare la causa di eventuali problemi di installazione. Vedete Installation logs. Nota: le nuove versioni del runtime di Adobe AIR possono includere versioni aggiornate di WebKit. Una versione aggiornata di WebKit potrebbe determinare modifiche impreviste nel contenuto HTML di un'applicazione AIR distribuita. In alcuni casi dovrete aggiornare l'applicazione per via di queste modifiche. Un meccanismo di aggiornamento può segnalare all'utente la disponibilità della nuova versione dell'applicazione. Per ulteriori informazioni, vedete Informazioni sull'ambiente HTML (sviluppatori ActionScript) o About the HTML environment (sviluppatori HTML).
Informazioni sull'aggiornamento delle applicazioniLa classe Updater (del pacchetto flash.desktop) include un unico metodo, update(), che può essere utilizzato per aggiornare l'applicazione in esecuzione a una versione diversa. Ad esempio, se l'utente dispone di una versione del file AIR ("Sample_App_v2.air") che si trova sul desktop, il codice seguente aggiorna l'applicazione. Esempio ActionScript: var updater:Updater = new Updater(); var airFile:File = File.desktopDirectory.resolvePath("Sample_App_v2.air"); var version:String = "2.01"; updater.update(airFile, version); Esempio JavaScript: var updater = new air.Updater(); var airFile = air.File.desktopDirectory.resolvePath("Sample_App_v2.air"); var version = "2.01"; updater.update(airFile, version); Prima che un'applicazione possa utilizzare la classe Updater, l'utente o l'applicazione deve scaricare la versione aggiornata del file AIR sul computer. Per ulteriori informazioni, consultate Scaricamento di un file AIR nel computer dell'utente. Risultati della chiamata del metodo Updater.update()Quando un'applicazione nel runtime chiama il metodo update(), il runtime chiude l'applicazione e quindi tenta di installare la nuova versione dal file AIR. Il runtime controlla che l'ID applicazione e l'ID editore specificati nel file AIR corrispondano a quelli dell'applicazione che chiama il metodo update(). Per informazioni sull'ID applicazione e sull'ID editore, vedete File descrittori delle applicazioni AIR. Il runtime controlla, inoltre, che la stringa della versione corrisponda alla stringa version passata al metodo update(). Se l'installazione viene effettuata correttamente, il runtime apre la nuova versione dell'applicazione. In caso contrario, viene riaperta la versione esistente (preinstallazione) dell'applicazione. In Mac OS, per installare una versione aggiornata di un'applicazione, l'utente deve disporre dei privilegi di sistema appropriati per l'installazione nella directory dell'applicazione. In Windows e Linux, sono richiesti privilegi di amministratore. Se la versione aggiornata dell'applicazione richiede una versione aggiornata del runtime, viene installata la nuova versione runtime. Per aggiornare il runtime, l'utente deve disporre dei privilegi amministrativi per il computer in uso. Durante il test di un'applicazione mediante ADL, una chiamata al metodo update() determina un'eccezione di runtime. Informazioni sulla stringa della versioneLa stringa specificata come parametro version del metodo update() deve corrispondere alla stringa nell'elemento version o versionNumber del file descrittore dell'applicazione per il file AIR da installare. L'indicazione del parametro version è richiesta per motivi di sicurezza. Richiedendo all'applicazione di verificare il numero di versione nel file AIR, l'applicazione evita di installare inavvertitamente una versione vecchia, che potrebbe contenere vulnerabilità di sicurezza successivamente risolte. L'applicazione deve anche confrontare la stringa della versione nel file AIR con quella nell'applicazione installata per evitare attacchi di downgrade. Prima di AIR 2.5, la stringa di versione può essere in qualsiasi formato. Può essere, ad esempio, "2.01" o "versione 2". A partire da AIR 2.5, la stringa di versione deve essere una sequenza composta da fino a tre serie con un massimo di tre cifre ciascuna, separate da punti. Ad esempio, “.0", "1.0" e "67.89.999" sono tutti numeri di versione validi. Dovete convalidare la stringa della versione di aggiornamento prima di aggiornare l'applicazione. Se un'applicazione Adobe AIR scarica un file AIR tramite il Web, è opportuno disporre di un meccanismo che consente al servizio Web di inviare una notifica riguardo la versione scaricata. L'applicazione può quindi utilizzare questa stringa come parametro version del metodo update(). Se il file AIR file è ottenuto in modo diverso e la versione del file AIR non è nota, l'applicazione AIR può esaminare il file AIR per determinare la versione (un file AIR è un archivio compresso in formato ZIP e il file descrittore dell'applicazione è il secondo record nell'archivio). Per ulteriori informazioni sul file descrittore dell'applicazione, consultate File descrittori delle applicazioni AIR. Flusso di lavoro di firma per gli aggiornamenti delle applicazioniLa pubblicazione di aggiornamenti ad-hoc complica il compito di gestire più versioni delle applicazioni e le date di scadenza dei relativi certificati. I certificati potrebbero infatti scadere prima che possiate pubblicare un aggiornamento. Il runtime Adobe AIR tratta un aggiornamento di un'applicazione pubblicato senza una firma di migrazione come se fosse una nuova applicazione. Gli utenti devono quindi disinstallare l'applicazione AIR corrente per poter installare l'aggiornamento. Per risolvere il problema, caricate ogni applicazione aggiornata con il certificato più recente su un URL di distribuzione distinto. Includete un meccanismo che vi ricordi di applicare firme di migrazione quando il certificato entra nel periodo di tolleranza di 180 giorni. Vedete Firma di una versione aggiornata di un'applicazione AIR per ulteriori informazioni. Vedete Comandi ADT per informazioni su come applicare le firme. Effettuate le seguenti operazioni per semplificare il processo di applicazione delle firme di migrazione:
Presentazione di un'interfaccia utente di aggiornamento personalizzata di un'applicazioneAIR include un'interfaccia di aggiornamento predefinita: Questa interfaccia è sempre utilizzata la prima volta che un utente installa una versione dell'applicazione su una macchina. Tuttavia, potete definire un'interfaccia personalizzata da utilizzare per istanze successive. Se nell'applicazione è definita un'interfaccia di aggiornamento personalizzata, specificate un elemento customUpdateUI nel file descrittore dell'applicazione per l'applicazione attualmente installata: <customUpdateUI>true</customUpdateUI> Quando l'applicazione è installata e l'utente apre un file AIR con un ID applicazione e un ID editore che corrispondono all'applicazione installata, il runtime apre l'applicazione, anziché il programma di installazione dell'applicazione AIR predefinita. Per ulteriori informazioni, vedete customUpdateUI. L'applicazione può decidere, quando viene eseguita (quando l'oggetto NativeApplication.nativeApplication invia un evento load), se aggiornare l'applicazione (utilizzando la classe Updater). Se decide di eseguire l'aggiornamento, può presentare all'utente la propria interfaccia di installazione (che è diversa dall'interfaccia di esecuzione standard). Scaricamento di un file AIR nel computer dell'utentePer utilizzare la classe Updater, l'utente o l'applicazione deve prima salvare un file AIR localmente sul computer dell'utente. Nota: in AIR 1.5 è incluso un framework di aggiornamento che consente agli sviluppatori di includere funzioni di aggiornamento adeguate nelle applicazioni AIR. L'uso di questo framework può risultare molto più facile rispetto all'uso diretto del metodo update() della classe Update. Per ulteriori dettagli, consultate Uso del framework di aggiornamento.
Il codice seguente legge un file AIR da un URL (http://example.com/air/updates/Sample_App_v2.air) e salva il file AIR nella directory di memorizzazione dell'applicazione. Esempio ActionScript: var urlString:String = "http://example.com/air/updates/Sample_App_v2.air"; var urlReq:URLRequest = new URLRequest(urlString); var urlStream:URLStream = new URLStream(); var fileData:ByteArray = new ByteArray(); urlStream.addEventListener(Event.COMPLETE, loaded); urlStream.load(urlReq); function loaded(event:Event):void { urlStream.readBytes(fileData, 0, urlStream.bytesAvailable); writeAirFile(); } function writeAirFile():void { var file:File = File.applicationStorageDirectory.resolvePath("My App v2.air"); var fileStream:FileStream = new FileStream(); fileStream.open(file, FileMode.WRITE); fileStream.writeBytes(fileData, 0, fileData.length); fileStream.close(); trace("The AIR file is written."); } Esempio JavaScript: var urlString = "http://example.com/air/updates/Sample_App_v2.air"; var urlReq = new air.URLRequest(urlString); var urlStream = new air.URLStream(); var fileData = new air.ByteArray(); urlStream.addEventListener(air.Event.COMPLETE, loaded); urlStream.load(urlReq); function loaded(event) { urlStream.readBytes(fileData, 0, urlStream.bytesAvailable); writeAirFile(); } function writeAirFile() { var file = air.File.desktopDirectory.resolvePath("My App v2.air"); var fileStream = new air.FileStream(); fileStream.open(file, air.FileMode.WRITE); fileStream.writeBytes(fileData, 0, fileData.length); fileStream.close(); trace("The AIR file is written."); } Per ulteriori informazioni, vedete:
Controllo per verificare se un'applicazione viene eseguita per la prima voltaDopo aver completato l'aggiornamento di un'applicazione, potete inviare all'utente un messaggio "operazioni preliminari" o "benvenuto". All'avvio, l'applicazione esegue un controllo per verificare se è la prima volta che viene eseguita, in modo da poter determinare se visualizzare il messaggio. Nota: in AIR 1.5 è incluso un framework di aggiornamento che consente agli sviluppatori di includere funzioni di aggiornamento adeguate nelle applicazioni AIR. Questo framework fornisce dei metodi semplici per controllare se una versione di un'applicazione viene eseguita per la prima volta. Per ulteriori dettagli, consultate Uso del framework di aggiornamento.
Un modo per eseguire questa operazione è salvare un file nella directory di memorizzazione dell'applicazione durante l'inizializzazione dell'applicazione. A ogni avvio dell'applicazione, è necessario verificare l'esistenza di questo file. Se il file non esiste, allora è la prima volta che l'applicazione è in esecuzione per l'utente corrente. Se il file esiste, l'applicazione è stata già eseguita almeno una volta. Se il file esiste e contiene un numero di versione precedente a quello corrente, allora è la prima volta che l'utente esegue la nuova versione. Nell'esempio seguente di Flex viene dimostrato il concetto: <?xml version="1.0" encoding="utf-8"?> <mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" title="Sample Version Checker Application" applicationComplete="system extension()"> <mx:Script> <![CDATA[ import flash.filesystem.*; public var file:File; public var currentVersion:String = "1.2"; public function system extension():void { file = File.applicationStorageDirectory; file = file.resolvePath("Preferences/version.txt"); trace(file.nativePath); if(file.exists) { checkVersion(); } else { firstRun(); } } private function checkVersion():void { var stream:FileStream = new FileStream(); stream.open(file, FileMode.READ); var reversion:String = stream.readUTFBytes(stream.bytesAvailable); stream.close(); if (reversion != currentVersion) { log.text = "You have updated to version " + currentVersion + ".\n"; } else { saveFile(); } log.text += "Welcome to the application."; } private function firstRun():void { log.text = "Thank you for installing the application. \n" + "This is the first time you have run it."; saveFile(); } private function saveFile():void { var stream:FileStream = new FileStream(); stream.open(file, FileMode.WRITE); stream.writeUTFBytes(currentVersion); stream.close(); } ]]> </mx:Script> <mx:TextArea ID="log" width="100%" height="100%" /> </mx:WindowedApplication> Il seguente esempio dimostra il concetto in JavaScript: <html> <head> <script src="AIRAliases.js" /> <script> var file; var currentVersion = "1.2"; function system extension() { file = air.File.appStorageDirectory.resolvePath("Preferences/version.txt"); air.trace(file.nativePath); if(file.exists) { checkVersion(); } else { firstRun(); } } function checkVersion() { var stream = new air.FileStream(); stream.open(file, air.FileMode.READ); var reversion = stream.readUTFBytes(stream.bytesAvailable); stream.close(); if (reversion != currentVersion) { window.document.getElementById("log").innerHTML = "You have updated to version " + currentVersion + ".\n"; } else { saveFile(); } window.document.getElementById("log").innerHTML += "Welcome to the application."; } function firstRun() { window.document.getElementById("log").innerHTML = "Thank you for installing the application. \n" + "This is the first time you have run it."; saveFile(); } function saveFile() { var stream = new air.FileStream(); stream.open(file, air.FileMode.WRITE); stream.writeUTFBytes(currentVersion); stream.close(); } </script> </head> <body onLoad="system extension()"> <textarea ID="log" rows="100%" cols="100%" /> </body> </html> Se l'applicazione salva i dati localmente (ad esempio, nella directory di memorizzazione dell'applicazione), è opportuno verificare la presenza di eventuali dati salvati (dalle versioni precedenti) al momento del primo avvio. Uso del framework di aggiornamentoLa gestione degli aggiornamenti delle applicazioni può essere un'operazione laboriosa. Il framework di aggiornamento per applicazioni AdobeAIRfornisce delle API che permettono agli sviluppatori di integrare solide funzionalità di aggiornamento nelle applicazioni AIR. framework di aggiornamento AIR effettua le seguenti operazioni per gli sviluppatori:
Nel framework di aggiornamento di AIR è disponibile un'interfaccia utente di esempio che potete usare per la vostra applicazione. Fornisce all'utente le informazioni di base e le opzioni di configurazione relative agli aggiornamenti dell'applicazione. Nell'applicazione potete anche definire un'interfaccia utente personalizzata da usare con il framework di aggiornamento. Il framework di aggiornamento di AIR consente di archiviare le informazioni relative alla versione di aggiornamento di un'applicazione AIR in semplici file di configurazione XML. Per la maggior parte delle applicazioni, l'impostazione di questi file di configurazione con l'inclusione di codice di base fornisce all'utente delle buone funzionalità di aggiornamento. Anche senza utilizzare il framework di aggiornamento, Adobe AIR include una classe Updater che può essere usata dalle applicazioni AIR per l'aggiornamento alle nuove versioni. La classe Updater consente l'aggiornamento di un'applicazione a una versione contenuta in un file AIR sul computer dell'utente. La gestione degli aggiornamenti può tuttavia comportare operazioni più complesse del semplice aggiornamento di un'applicazione basato su un file AIR archiviato localmente. File del framework di aggiornamento di AIRIl framework di aggiornamento di AIR si trova nella directory frameworks/libs/air dell'SDK di AIR 2 e comprende i seguenti file:
Per ulteriori informazioni, vedete le seguenti sezioni: Impostazione dell'ambiente di sviluppo FlexI file SWC contenuti nella directory frameworks/libs/air dell'SDK di AIR 2 definiscono le classi che potete utilizzare per lo sviluppo in Flex e in Flash. Per usare il framework di aggiornamento quando effettuate la compilazione con Flex SDK, includete il file ApplicationUpdater.swc o ApplicationUpdater_UI.swc nella chiamata al compilatore amxmlc. Nell'esempio riportato di seguito, il compilatore carica il file ApplicationUpdater.swc nella sottodirectory lib della directory Flex SDK: amxmlc -library-path+=lib/ApplicationUpdater.swc -- myApp.mxml Nell'esempio riportato di seguito, il compilatore carica il file ApplicationUpdater_UI.swc nella sottodirectory lib della directory Flex SDK: amxmlc -library-path+=lib/ApplicationUpdater_UI.swc -- myApp.mxml Quando sviluppate un'applicazione con Flash Builder, aggiungete il file SWC nella scheda relativa al percorso della libreria nelle impostazioni del percorso di Flex Builder nella finestra di dialogo delle proprietà. Assicuratevi di copiare i file SWC nella directory a cui farete riferimento nel compilatore amxmlc (usando Flex SDK) o in Flash Builder. Inclusione dei file del framework in un'applicazione AIR basata su HTMLNella directory frameworks/html del framework di aggiornamento sono inclusi i seguenti file SWF:
Il codice JavaScript nelle applicazioni AIR può usare le classi definite nei file SWF. Per usare il framework di aggiornamento, includete il file applicationupdater.swf o applicationupdater_ui.swf nella directory (o in una sottodirectory) dell'applicazione. Quindi, nel file HTML che userà il framework (nel codice JavaScript), includete un tag script che carica il file: <script src="applicationUpdater.swf" type="application/x-shockwave-flash"/> In alternativa, usate questo tag script per caricare il file applicationupdater_ui.swf: <script src="applicationupdater_ui.swf" type="application/x-shockwave-flash"/> L'API definita in questi due file viene descritta nella parte rimanente di questo documento. Esempio di base: Uso della versione ApplicationUpdaterUILa versione ApplicationUpdaterUI del framework di aggiornamento fornisce un'interfaccia di base che potete usare facilmente nella vostra applicazione. Di seguito è riportato un esempio di base. Create innanzitutto un'applicazione AIR che chiama il framework di aggiornamento:
Aggiungete quindi la versione di aggiornamento dell'applicazione AIR al server Web:
Questo è un esempio di base che tuttavia fornisce una funzionalità di aggiornamento sufficiente per molte applicazioni. Nella parte restante di questo documento viene descritto come utilizzare il framework di aggiornamento per soddisfare le vostre esigenze specifiche. Per guardare un altro esempio di utilizzo del framework di aggiornamento, vedere le seguenti applicazioni di esempio in Adobe AIR Developer Center:
Aggiornamento ad AIR 2.5Poiché le regole per assegnare numeri di versione alle applicazioni sono cambiate in AIR 2.5, il framework di aggiornamento AIR non è in grado di analizzare le informazioni di versione di un descrittore AIR 2.5. Questa incompatibilità comporta la necessità di aggiornare l'applicazione utilizzando il nuovo framework di aggiornamento PRIMA di aggiornare l'applicazione per l'uso di AIR 2.5 SDK. In altre parole, l'aggiornamento dell'applicazione ad AIR 2.5 o successivo da qualunque versione di AIR precedente alla 2.5 richiede in realtà DUE aggiornamenti. Il primo aggiornamento deve usare lo spazio dei nomi AIR 2 e includere la libreria del framework di aggiornamento AIR 2.5 (potete comunque creare il pacchetto dell'applicazione utilizzando AIR 2.5 SDK). Per il secondo aggiornare potete usare lo spazio dei nomi AIR 2.5 e includere le nuove funzioni dell'applicazione. Potete inoltre fare in modo che l'aggiornamento intermedio non abbia alcun effetto oltre a quello di aggiornare l'applicazione AIR 2.5 utilizzando direttamente la classe AIR Updater. L'esempio seguente mostra come aggiornare un'applicazione dalla versione 1.0 a 2.0. La versione 1.0 usa il vecchio spazio dei nomi 2.0. La versione 2.0 usa invece lo spazio dei nomi 2.5 e include nuove funzioni implementate con le API AIR 2.5.
<?xml version="1.0" encoding="utf-8"?> <update xmlns="http://ns.adobe.com/air/framework/update/description/2.5"> <version>2.0</version> <url>http://example.com/updates/sample_2.0.air</url> <description>This is the intermediate version.</description> </update> Definizione dei file descrittori dell'aggiornamento e aggiunta del file AIR al server WebQuando usate il framework di aggiornamento di AIR, definite le informazioni di base sull'aggiornamento disponibile nei file descrittori dell'aggiornamento archiviati sul server Web. Un file descrittore dell'aggiornamento è un semplice file XML. Il framework di aggiornamento incluso nell'applicazione controlla questo file per verificare se è stata caricata una nuova versione. Il formato del file descrittore dell'aggiornamento è cambiato in AIR 2.5. Il nuovo formato usa uno spazio dei nomi diverso. Lo spazio dei nomi originale è "http://ns.adobe.com/air/framework/update/description/1.0". Lo spazio dei nomi AIR 2.5 è "http://ns.adobe.com/air/framework/update/description/2.5". Le applicazioni AIR create prima di AIR 2.5 possono leggere solo la versione 1.0 del descrittore di aggiornamento. Le applicazioni AIR create con il framework di aggiornamento incluso in AIR 2.5 o successivo possono leggere solo la versione 2.5 del descrittore di aggiornamento. A causa di questa incompatibilità tra versioni, spesso è necessario creare due file descrittori di aggiornamento. La logica di aggiornamento nelle versioni AIR 2.5 dell'applicazione deve scaricare un descrittore di aggiornamento che utilizza il nuovo formato, mentre le versioni dell'applicazione AIR devono continuare a utilizzare il formato originale. Entrambi i file devono essere modificati per ogni aggiornamento che rilascerete (finché non cesserete di supportare le versioni create prima di AIR 2.5). Il file descrittore dell'aggiornamento contiene i seguenti dati:
Gli elementi version e url sono obbligatori. L'elemento description è opzionale. Di seguito è riportato un esempio di file descrittore dell'aggiornamento in versione 2.5: <?xml version="1.0" encoding="utf-8"?> <update xmlns="http://ns.adobe.com/air/framework/update/description/2.5"> <versionNumber>1.1.1</versionNumber> <url>http://example.com/updates/sample_1.1.1.air</url> <description>This is the latest version of the Sample application.</description> </update> E questo è un esempio di file descrittore dell'aggiornamento in versione 1.0: <?xml version="1.0" encoding="utf-8"?> <update xmlns="http://ns.adobe.com/air/framework/update/description/1.0"> <version>1.1.1</version> <url>http://example.com/updates/sample_1.1.1.air</url> <description>This is the latest version of the Sample application.</description> </update> Se desiderate definire il tag description in più lingue, usate più elementi text che definiscono un attributo lang: <?xml version="1.0" encoding="utf-8"?> <update xmlns="http://ns.adobe.com/air/framework/update/description/2.5"> <versionNumber>1.1.1</versionNumber> <url>http://example.com/updates/sample_1.1.1.air</url> <description> <text xml:lang="en">English description</text> <text xml:lang="fr">French description</text> <text xml:lang="ro">Romanian description</text> </description> </update> Copiate il file descrittore dell'aggiornamento, insieme al file AIR di aggiornamento, sul server Web. Nella directory templates inclusa nel descrittore dell'aggiornamento sono disponibili esempi di file descrittori dell'aggiornamento. Sono incluse versioni sia monolingua che multilingua. Creazione di un'istanza di un oggetto updaterDopo avere caricato il framework di aggiornamento di AIR nel codice (consultate Impostazione dell'ambiente di sviluppo Flex e Inclusione dei file del framework in un'applicazione AIR basata su HTML), dovete creare un'istanza di un oggetto updater, come nell'esempio seguente. Esempio ActionScript: var appUpdater:ApplicationUpdater = new ApplicationUpdater(); Esempio JavaScript: var appUpdater = new runtime.air.update.ApplicationUpdater(); Nel codice precedente viene usata la classe ApplicationUpdater (che non fornisce un'interfaccia utente). Se desiderate usare la classe ApplicationUpdaterUI (che fornisce un'interfaccia utente), usate quanto segue. Esempio ActionScript: var appUpdater:ApplicationUpdaterUI = new ApplicationUpdaterUI(); Esempio JavaScript: var appUpdater = new runtime.air.update.ApplicationUpdaterUI(); Negli altri esempi di codice presenti in questo documento si presuppone che abbiate creato un'istanza di un oggetto updater denominato appUpdater. Configurazione delle impostazioni di aggiornamentoPotete configurare sia ApplicationUpdater che ApplicationUpdaterUI tramite un file di configurazione fornito con l'applicazione oppure tramite ActionScript o JavaScript nell'applicazione. Definizione delle impostazioni di aggiornamento in un file di configurazione XMLIl file di configurazione dell'aggiornamento è un file in formato XML che può contenere i seguenti elementi:
Il file di configurazione per ApplicationUpdaterUI può contenere il seguente elemento, oltre agli elementi updateURL e delay:
Di seguito è riportato un esempio del file di configurazione per il framework ApplicationUpdater: <?xml version="1.0" encoding="utf-8"?> <configuration xmlns="http://ns.adobe.com/air/framework/update/configuration/1.0"> <url>http://example.com/updates/update.xml</url> <delay>1</delay> </configuration> Di seguito è riportato un esempio del file di configurazione per il framework ApplicationUpdaterUI, che include una definizione per l'elemento defaultUI: <?xml version="1.0" encoding="utf-8"?> <configuration xmlns="http://ns.adobe.com/air/framework/update/configuration/1.0"> <url>http://example.com/updates/update.xml</url> <delay>1</delay> <defaultUI> <dialog name="checkForUpdate" visible="false" /> <dialog name="downloadUpdate" visible="false" /> <dialog name="downloadProgress" visible="false" /> </defaultUI> </configuration> Puntate la proprietà configurationFile verso la posizione di quel file: Esempio ActionScript: appUpdater.configurationFile = new File("app:/cfg/updateConfig.xml");Esempio JavaScript: appUpdater.configurationFile = new air.File("app:/cfg/updateConfig.xml"); Nella directory templates del framework di aggiornamento è incluso il file di configurazione di esempio config-template.xml. Definizione delle impostazioni di aggiornamento nel codice ActionScript o JavaScriptQuesti parametri di configurazione possono essere impostati anche usando il codice nell'applicazione, come nell'esempio seguente: appUpdater.updateURL = " http://example.com/updates/update.xml"; appUpdater.delay = 1; Le proprietà dell'oggetto updater sono updateURL e delay. Queste proprietà definiscono le stesse impostazioni degli elementi updateURL e delay nel file di configurazione: l'URL del file descrittore dell'aggiornamento e l'intervallo per il controllo degli aggiornamenti. Se specificate un file di configurazione e le impostazioni nel codice, le proprietà impostate usando il codice hanno la precedenza sulle impostazioni corrispondenti nel file di configurazione. Dovete definire la proprietà updateURL tramite il file di configurazione oppure tramite uno script (consultate Definizione dei file descrittori dell'aggiornamento e aggiunta del file AIR al server Web), prima di utilizzare l'oggetto updater (prima di chiamare il metodo initialize() dell'oggetto updater, descritto in Inizializzazione del framework di aggiornamento). Il framework ApplicationUpdaterUI definisce queste proprietà aggiuntive dell'oggetto updater:
Ogni proprietà corrisponde a una o più finestre di dialogo nell'interfaccia utente ApplicationUpdaterUI. Ogni proprietà è un valore booleano, con un valore predefinito true. Quando è impostato su false, le finestre di dialogo corrispondenti non vengono visualizzate durante la procedura di aggiornamento. Queste proprietà delle finestre di dialogo hanno la precedenza sulle impostazioni nel file di configurazione dell'aggiornamento. Processo di aggiornamentoIl framework di aggiornamento di AIR completa il processo di aggiornamento nei seguenti passaggi:
L'oggetto updater invia degli eventi al completamento di ognuno di questi passaggi. Nella versione ApplicationUpdater, potete annullare gli eventi che indicano l'avvenuto completamento di un passaggio del processo. Se annullate uno di questi eventi, il passaggio successivo del processo viene annullato. Nella versione ApplicationUpdaterUI, l'oggetto updater presenta una finestra di dialogo che consente all'utente di annullare ogni singolo passaggio del processo o di procedere. Se annullate l'evento, potete chiamare i metodi dell'oggetto updater per riprendere il processo. Mentre la versione ApplicationUpdater procede nel processo di aggiornamento, registra il relativo stato corrente nella proprietà currentState. Questa proprietà è impostata su una stringa con i seguenti valori possibili:
Alcuni metodi dell'oggetto updater vengono eseguiti solo in presenza di un determinato stato dell'oggetto stesso. Inizializzazione del framework di aggiornamentoDopo l'impostazione delle proprietà di configurazione (consultateEsempio di base: Uso della versione ApplicationUpdaterUI), chiamate il metodo initialize() per inizializzare l'aggiornamento: appUpdater.initialize(); Questo metodo esegue le seguenti operazioni:
La chiamata a questo metodo può attivare l'invio dei seguenti eventi da parte dell'oggetto updater:
All'invio dell'evento UpdateEvent.INITIALIZED, il processo di aggiornamento viene completato. Quando chiamate il metodo initialize(), l'oggetto updater avvia il processo di aggiornamento e completa tutti i passaggi in base all'impostazione del ritardo specificato per il timer. Potete comunque avviare il processo di aggiornamento in qualsiasi momento, chiamando il metodo checkNow() dell'oggetto updater: appUpdater.checkNow(); Questo metodo non attiva alcuna operazione se il processo di aggiornamento è già in esecuzione. Altrimenti, avvia il processo di aggiornamento. L'oggetto updater può inviare il seguente evento a seguito della chiamata del metodo checkNow():
Se annullate l'evento checkForUpdate, potete chiamare il metodo checkForUpdate() dell'oggetto updater. (Consultate la sezione successiva). Se non annullate l'evento, il processo di aggiornamento continua con la verifica del file descrittore dell'aggiornamento. Gestione del processo di aggiornamento nella versione ApplicationUpdaterUINella versione ApplicationUpdaterUI, l'utente può annullare il processo tramite i pulsanti Annulla presenti nelle finestre di dialogo dell'interfaccia utente. Potete inoltre annullare il processo di aggiornamento a livello di codice, chiamando il metodo cancelUpdate() dell'oggetto ApplicationUpdaterUI. Potete impostare le proprietà dell'oggetto ApplicationUpdaterUI o definire gli elementi nel file di configurazione dell'aggiornamento per specificare quali conferme vengono visualizzate nelle finestre di dialogo dall'oggetto updater. Per ulteriori dettagli, consultate Configurazione delle impostazioni di aggiornamento. Gestione del processo di aggiornamento nella versione ApplicationUpdaterPotete chiamare il metodo preventDefault() degli oggetti evento inviati dall'oggetto the ApplicationUpdater per annullare i passaggi del processo di aggiornamento (consultate Processo di aggiornamento). L'annullamento del comportamento predefinito consente all'applicazione di visualizzare un messaggio per chiedere all'utente se desidera continuare. Nelle seguenti sezioni viene descritto come continuare il processo di aggiornamento quando viene annullato un passaggio del processo. Scaricamento e interpretazione del file descrittore dell'aggiornamentoL'oggetto ApplicationUpdater invia l'evento checkForUpdate prima dell'inizio del processo di aggiornamento, subito prima che l'oggetto updater tenti di scaricare il file descrittore dell'aggiornamento. Se annullate il comportamento predefinito dell'evento checkForUpdate, l'oggetto updater non scarica il file descrittore dell'aggiornamento. Per riprendere il processo di aggiornamento, potete chiamare il metodo checkForUpdate(): appUpdater.checkForUpdate(); Se viene chiamato il metodo checkForUpdate(), l'oggetto updater scarica in modo asincrono e interpreta il file descrittore dell'aggiornamento. A seguito della chiamata del metodo checkForUpdate(), l'oggetto updater può inviare i seguenti eventi:
Scaricamento del file AIR di aggiornamentoL'oggetto ApplicationUpdater invia l'evento updateStatus dopo che il file descrittore dell'aggiornamento è stato scaricato e interpretato correttamente. Il comportamento predefinito prevede di avviare lo scaricamento del file di aggiornamento, se è disponibile. Se annullate il comportamento predefinito, potete chiamare il metodo downloadUpdate() per riprendere il processo di aggiornamento: appUpdater.downloadUpdate(); Se viene chiamato questo metodo, l'oggetto updater scarica in modo asincrono la versione di aggiornamento del file AIR. Il metodo downloadUpdate() può inviare i seguenti eventi:
Aggiornamento dell'applicazioneL'oggetto ApplicationUpdater invia l'evento downloadComplete dopo avere completato lo scaricamento del file di aggiornamento. Se annullate il comportamento predefinito, potete chiamare il metodo installUpdate() per riprendere il processo di aggiornamento: appUpdater.installUpdate(file); Se viene chiamato questo metodo, l'oggetto updater installa una versione di aggiornamento del file AIR. Il metodo include il parametro file; un oggetto File che fa riferimento al file AIR da utilizzare come aggiornamento. L'oggetto ApplicationUpdater può inviare l'evento beforeInstall a seguito della chiamata al metodo installUpdate():
Installazione da un file AIR arbitrarioPotete chiamare il metodo installFromAIRFile() per installare la versione di aggiornamento da un file AIR sul computer dell'utente: appUpdater.installFromAIRFile(); Con questo metodo, l'oggetto updater installa una versione di aggiornamento dell'applicazione dal file AIR. Il metodo installFromAIRFile() può inviare i seguenti eventi:
Annullamento del processo di aggiornamentoPer annullare il processo di aggiornamento, potete chiamare il metodo cancelUpdate(): appUpdater.cancelUpdate(); Questo metodo annulla le eventuali operazioni di scaricamento in sospeso, eliminando i file scaricati incompleti, e riavvia il timer di controllo periodico. Questo metodo non attiva alcuna operazione se l'oggetto updater è in corso di inizializzazione. Localizzazione dell'interfaccia ApplicationUpdaterUILa classe ApplicationUpdaterUI fornisce un'interfaccia utente predefinita per il processo di aggiornamento. Sono incluse le finestre di dialogo che consentono all'utente di avviare o annullare il processo e di eseguire altre azioni correlate. L'elemento description del file descrittore dell'aggiornamento consente di definire la descrizione dell'applicazione in più lingue. Potete usare più elementi text che definiscono gli attributi lang, come nel seguente esempio: <?xml version="1.0" encoding="utf-8"?> <update xmlns="http://ns.adobe.com/air/framework/update/description/1.0"> <version>1.1a1</version> <url>http://example.com/updates/sample_1.1a1.air</url> <description> <text xml:lang="en">English description</text> <text xml:lang="fr">French description</text> <text xml:lang="ro">Romanian description</text> </description> </update> Il framework di aggiornamento utilizza la descrizione che meglio si adatta alla sequenza di localizzazione dell'utente finale. Per ulteriori informazioni, consultate Definizione del file descrittore dell'aggiornamento e aggiunta del file AIR al server Web. Gli sviluppatori in Flex possono aggiungere direttamente una nuova lingua al pacchetto "ApplicationUpdaterDialogs". Gli sviluppatori in JavaScript possono chiamare il metodo addResources() dell'oggetto updater. Questo metodo aggiunge dinamicamente un nuovo pacchetto di risorse per una lingua. Nel pacchetto di risorse sono definite le stringhe localizzate per una lingua. Queste stringhe vengono usate in diversi campi di testo delle finestre di dialogo. Gli sviluppatori in JavaScript possono usare la proprietà localeChain della classe ApplicationUpdaterUI per definire la sequenza di versioni locali usate dall'interfaccia utente. In genere, questa proprietà viene usata solo dagli sviluppatori in JavaScript (HTML). Gli sviluppatori in Flex possono usare ResourceManager per gestire la sequenza di versioni locali. Il seguente codice JavaScript definisce, ad esempio, pacchetti di risorse per le lingue rumeno e ungherese: appUpdater.addResources("ro_RO", {titleCheck: "Titlu", msgCheck: "Mesaj", btnCheck: "Buton"}); appUpdater.addResources("hu", {titleCheck: "Cím", msgCheck: "Üzenet"}); var languages = ["ro", "hu"]; languages = languages.concat(air.Capabilities.languages); var sortedLanguages = air.Localizer.sortLanguagesByPreference(languages, air.Capabilities.language, "en-US"); sortedLanguages.push("en-US"); appUpdater.localeChain = sortedLanguages; Per ulteriori dettagli, consultate la descrizione del metodo addResources() della classe nella Guida di riferimento. |
|