Actualización de aplicaciones de AIR
Los usuarios pueden instalar o actualizar cualquier aplicación de AIR haciendo doble clic en el archivo de AIR de su equipo o desde un navegador (mediante la perfeccionada función de instalación). El instalador de Adobe® AIR™ gestiona la instalación y avisa al usuario si está actualizando una aplicación previa existente. Sin embargo, también es posible permitir que las propias aplicaciones se actualicen solas mediante la clase Updater. (Una aplicación instalada puede detectar nuevas versiones disponibles para su descarga e instalación.) La clase Updater incluye un método update() que permite al usuario apuntar a un archivo de AIR de un equipo y actualizar a dicha versión. Your application must be packaged as an AIR file in order to use the Updater class. Applications packaged as a native executable or package should use the update facilities provided by the native platform. Tanto el ID de aplicación como el ID de editor de un archivo de actualización de AIR deben coincidir para que la aplicación se actualice. El ID de editor proviene del certificado de firma. Tanto la actualización como la aplicación que va a actualizarse deben estar firmadas con el mismo certificado. Para AIR 1.5.3 o posterior, el archivo descriptor de la aplicación incluye un elemento <publisherID>. Este elemento debe usarse si existen versiones de la aplicación desarrolladas utilizando AIR 1.5.2 o una versión anterior. Para obtener más información, consulte publisherID. En AIR 1.1 y posterior, es posible migrar una aplicación para utilizar un nuevo certificado de firma para el código. Para migrar una aplicación y utilizar una nueva firma, es preciso firmar el archivo de actualización de AIR con el certificado nuevo y con el original. La migración de certificados es un proceso que no se puede invertir. Una vez concluida la migración, sólo se reconocerán como actualizaciones de la instalación existente aquellos archivos de AIR firmados con el nuevo certificado (o con ambos certificados). La administración de las actualizaciones de aplicaciones puede resultar un proceso complicado. AIR 1.5 incluye el nuevo marco de actualización para las aplicaciones de AdobeAIR. Este marco proporciona las API que ayudan a los desarrolladores a ofrecer buenas capacidades de actualización en aplicaciones de AIR. Puede utilizar la migración de certificados para pasar de un certificado firmado automáticamente a un certificado comercial de firma de código, o de uno firmado automáticamente a otro del mismo tipo. Si no migra el certificado, los usuarios existentes deberán quitar su versión actual de la aplicación para poder instalar la nueva versión. Para obtener más información, consulte Cambio de certificado. Es recomendable incluir un mecanismo de actualización en la aplicación. Si se crea una nueva versión de la aplicación, el mecanismo de actualización puede indicar al usuario que instale la nueva versión. El instalador de aplicaciones de AIR crea archivos de registro cuando se instala, se actualiza o se elimina una aplicación de AIR. Puede consultar estos registros para ayudar a determinar la causa de cualquier problema de instalación. Consulte Installation logs (Registros de instalación; en inglés). Nota: las nuevas versiones del motor de ejecución Adobe AIR puede incluir versiones actualizadas de WebKit. Una versión actualizada de WebKit puede implicar cambios inesperados en el contenido HTML de una aplicación implementada de AIR. Estos cambios pueden requerir la actualización de la aplicación. Un mecanismo de actualización puede informar al usuario de la nueva versión de la aplicación. Para obtener más información, consulte Entorno HTML (para desarrolladores de ActionScript) o Entorno HTML (para desarrolladores HTML).
Actualización de aplicacionesLa clase Updater (del paquete flash.desktop) incluye un método, update(), que se puede utilizar para actualizar la aplicación actualmente en ejecución a una versión distinta. Por ejemplo, si el usuario tiene una versión del archivo de AIR ("Sample_App_v2.air") en el escritorio, el siguiente código actualizaría la aplicación: Ejemplo de 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); Ejemplo de JavaScript: var updater = new air.Updater(); var airFile = air.File.desktopDirectory.resolvePath("Sample_App_v2.air"); var version = "2.01"; updater.update(airFile, version); Antes de que una aplicación utilice la clase Updater, el usuario o la aplicación deben descargar la versión actualizada del archivo de AIR en el equipo. Para obtener más información, consulte Descarga de un archivo de AIR en el equipo del usuario. Resultados de la llamada al método Updater.update()Cuando una aplicación del motor de ejecución llama al método update(), éste cierra la aplicación y, a continuación, intenta instalar la nueva versión del archivo de AIR. Se comprueba que el ID de aplicación y el ID de editor especificados en el archivo de AIR coinciden con el ID de aplicación y de editor de la aplicación que llama al método update(). (Para obtener más información sobre el ID de aplicación y el ID de editor, consulte AIR application descriptor files.) También comprueba si la cadena de versión coincide con la cadena version transferida al método update(). Si la instalación concluye correctamente, el motor de ejecución abre la nueva versión de la aplicación. En caso contrario (si la instalación no concluye correctamente), vuelve a abrir la versión existente de la aplicación (previa a la instalación). En Mac OS, para instalar una versión actualizada de una aplicación, el usuario debe contar con adecuados privilegios del sistema para instalar en el directorio de la aplicación. En Windows y Linux, el usuario debe disponer de privilegios de administrador. Si la versión actualizada de la aplicación requiere una versión actualizada del motor de ejecución, se instala la versión más reciente del motor de ejecución. Para actualizar el motor de ejecución, el usuario debe tener privilegios administrativos para el equipo. Al verificar una aplicación con ADL, llamar al método update() produce una excepción de tiempo de ejecución. Cadena de versiónPara que el archivo de AIR se pueda instalar, la cadena que se especifica como parámetro version del método update() debe coincidir con el elemento version o versionNumber del archivo descriptor de la aplicación para el archivo de AIR que va a instalarse. Es preciso especificar el parámetro version por motivos de seguridad. Al solicitar a la aplicación que verifique el número de versión en el archivo de AIR, la aplicación no instalará por error una versión anterior. (Una versión anterior de la aplicación puede presentar una vulnerabilidad de seguridad que se haya solucionado en la aplicación instalada actualmente.) La aplicación también comprueba la cadena de versión en el archivo de AIR y la compara con la de la aplicación instalada para evitar desactualizaciones. Prior to AIR 2.5, the version string can be of any format. Por ejemplo, "2.01" o "versión 2". In AIR 2.5, or later, the version string must be a sequence of up to three, three-digit numbers separated by periods. For example, “.0”, “1.0”, and “67.89.999” are all valid version numbers. You should validate the update version string before updating the application. Si una aplicación de Adobe AIR descarga un archivo de AIR por Internet, se recomienda disponer de un mecanismo que permite al servicio Web notificar a la aplicación de Adobe AIR sobre la descarga actual de la versión. La aplicación puede utilizar esta cadena como el parámetro version del método update(). Si el archivo de AIR se obtiene por otros medios que impiden conocer la versión del archivo de AIR, la aplicación de AIR puede examinar el archivo de AIR para extraer la información sobre su versión. (Un archivo de AIR es un archivo ZIP comprimido y el archivo descriptor de la aplicación es el segundo registro del archivo.) Para obtener más información sobre el archivo descriptor de aplicación, consulte AIR application descriptor files. Flujo de trabajo de firma para actualizaciones de la aplicaciónPublishing updates in an ad-hoc manner complicates the tasks of managing multiple application versions and also makes tracking certificate expiry dates difficult. Certificates may expire before you can publish an update. Adobe AIR runtime treats an application update published without a migration signature as a new application. Users must uninstall their current AIR application before they can install the application update. To resolve the problem, upload each updated application with the latest certificate to a separate deployment URL. Include a mechanism that reminds you to apply migration signatures when your certificate is within the 180 days grace period. See Firma de una versión actualizada de una aplicación de AIR for more information. See Comandos de ADT for information on how to apply signatures. Perform the following tasks to streamline the process of applying the migration signatures:
Presentación de una interfaz de usuario personalizada para las actualizaciones de la aplicaciónAIR incluye una interfaz de actualización predeterminada: Esta interfaz siempre se utiliza la primera vez que el usuario instala la versión de una aplicación en un ordenador. Sin embargo, es posible definir una interfaz propia para utilizarla en el futuro. Si su aplicación define una interfaz de actualización personalizada, especifique un elemento customUpdateUI en el archivo descriptor de la aplicación para la aplicación instalada actualmente: <customUpdateUI>true</customUpdateUI> Cuando la aplicación se instale y el usuario abra un archivo de AIR con un ID de aplicación e ID de editor que coincidan con los de la aplicación instalada, será el motor de ejecución el encargado de abrir la aplicación, no el archivo de instalación predeterminado de la aplicación de AIR. For more information, see customUpdateUI. La aplicación puede decidir, cuando se ejecute (cuando el objeto NativeApplication.nativeApplication distribuye un evento load), si actualiza o no la aplicación (con la clase Updater). Si decide actualizarse, puede presentar su propia interfaz de instalación al usuario (interfaz que no es igual que la estándar). Descarga de un archivo de AIR en el equipo del usuarioPara poder utilizar la clase Updater, el usuario o la aplicación deben guardar primero localmente un archivo de AIR en el equipo del usuario. Nota: AIR 1.5 incluye un marco de actualización que ayuda a los desarrolladores a ofrecer buenas capacidades de actualización en aplicaciones de AIR. El uso de este marco puede resultar mucho más sencillo que la utilización del método update() de la clase Update directamente. Para obtener más información, consulte Utilización del marco de actualización.
El siguiente código lee un archivo de AIR desde una dirección URL (http://example.com/air/updates/Sample_App_v2.air) y lo guarda en el directorio de almacenamiento de la aplicación: Ejemplo de 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."); } Ejemplo de 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."); } Para obtener más información, consulte:
Comprobar si una aplicación se está ejecutando por primera vezUna vez actualizada la aplicación, puede ofrecer al usuario un mensaje de bienvenida o de primeros pasos. Al iniciarse, la aplicación comprueba si se está ejecutando por primera vez para saber si debe mostrar o no el mensaje. Nota: AIR 1.5 incluye un marco de actualización que ayuda a los desarrolladores a ofrecer buenas capacidades de actualización en aplicaciones de AIR. Este marco proporciona métodos sencillos para comprobar si una versión de una aplicación se está ejecutando por primera vez. Para obtener más información, consulte Utilización del marco de actualización.
Una forma de hacerlo es guardar un archivo en el directorio de almacenamiento de la aplicación al inicializarla. Cada vez que se inicie la aplicación, comprobará si existe este archivo. Si el archivo no existe, significa que la aplicación se está ejecutando por primera vez para el usuario. Si el archivo existe, significa que el usuario ya ha ejecutado la aplicación al menos una vez. Si el archivo existe y su número de versión es anterior a la versión actual, significa que el usuario está ejecutando la aplicación por primera vez. Este concepto se demuestra en el siguiente ejemplo de Flex: <?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> Este concepto se muestra en el siguiente ejemplo de 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> Si la aplicación guarda datos localmente (por ejemplo, en el directorio de almacenamiento de la aplicación), puede buscar datos guardados previamente (de versiones anteriores) durante la primera ejecución de la aplicación. Utilización del marco de actualizaciónManaging updates to applications can be tedious. The update framework for AdobeAIR applications provides APIs that enable developers to provide robustupdate capabilities in AIR applications. The AIR update framework performs the following tasks for developers:
El marco de actualización de AIR proporciona una interfaz de usuario de ejemplo para su aplicación. Proporciona al usuario información básica y opciones de configuración para las actualizaciones de la aplicación. La aplicación también puede definir una interfaz de usuario para su uso con el marco de actualización. El marco de actualización de AIR permite almacenar información sobre la versión de actualización de una aplicación de AIR en sencillos archivos de configuración XML. En la mayoría de aplicaciones, al definir los archivos de configuración e incluir algo de código básico, los resultados de funcionalidad de la actualización son buenos para el usuario. Aun sin el uso del marco de actualización, Adobe AIR incluye una clase Updater que las aplicaciones de AIR pueden emplear para actualizar a nuevas versiones. La clase Updater permite que una aplicación se actualice a una versión incluida en un archivo de AIR en el equipo del usuario. No obstante, la administración de la actualización puede implicar un proceso más complejo que el basar simplemente la actualización de la aplicación en un archivo de AIR almacenado localmente. Archivos en el marco de actualización de AIREl marco de actualización de AIR se incluye en el directorio frameworks/libs/air del SDK de AIR 2. Incluye los siguientes archivos:
Para obtener más información, consulte las siguientes secciones: Configuración del entorno de desarrollo de FlexLos archivos SWC del directorio frameworks/libs/air del SDK de AIR 2 definen clases que se pueden utilizar en el desarrollo de Flex y Flash. Para utilizar el marco de actualización al compilar con el SDK de Flex, incluya el archivo ApplicationUpdater.swc o ApplicationUpdater_UI.swc en la llamada al compilador amxmlc. En el siguiente ejemplo, el compilador carga el archivo ApplicationUpdater.swc en el subdirectorio lib del directorio Flex SDK: amxmlc -library-path+=lib/ApplicationUpdater.swc -- myApp.mxml En el siguiente ejemplo, el compilador carga el archivo ApplicationUpdater_UI.swc en el subdirectorio lib del directorio Flex SDK: amxmlc -library-path+=lib/ApplicationUpdater_UI.swc -- myApp.mxml Al realizar el desarrollo con el uso de Flash Builder, añada el archivo SWC en la ficha de ruta de biblioteca de la configuración de la ruta de compilación de Flex en el cuadro de diálogo de propiedades. Asegúrese de copiar los archivos SWC en el directorio al que se hará referencia en el compilador amxmlc (usando el SDK de Flex) o Flash Builder. Inclusión de archivos del marco en una aplicación de AIR basada en HTMLEl directorio frameworks/html del marco de actualización incluye los siguientes archivos SWF:
El código JavaScript de las aplicaciones de AIR puede utilizar clases definidas en archivos SWF. Para utilizar el marco de actualización, incluya el archivo ApplicationUpdater.swf o ApplicationUpdater_UI.swf en el directorio de la aplicación (o un subdirectorio) A continuación, en el archivo HTML que utilizará el marco (en código JavaScript), incluya una etiqueta script que cargue el archivo: <script src="applicationUpdater.swf" type="application/x-shockwave-flash"/> O bien, utilice esta etiqueta script para cargar el archivo ApplicationUpdater_UI.swf: <script src="applicationupdater_ui.swf" type="application/x-shockwave-flash"/> La API definida en estos dos archivos se describe en el resto del documento. Ejemplo básico: Uso de la versión ApplicationUpdaterUILa versión ApplicationUpdaterUI del marco de actualización proporciona una interfaz básica que se puede emplear fácilmente en la aplicación. A continuación se incluye un ejemplo básico. En primer lugar, cree una aplicación de AIR que llame al marco de actualización:
A continuación, añada la versión de actualización de la aplicación de AIR al servidor web:
Este es un ejemplo básico, pero proporciona la funcionalidad de actualización suficiente para diversas aplicaciones. En el resto del documento se describe cómo emplear el marco de actualización para que mejor se adapte a sus necesidades. Para obtener otro ejemplo del uso de marco de actualización, consulte las siguientes aplicaciones de ejemplo en el entro de desarrollo de Adobe AIR:
Updating to AIR 2.5Because the rules for assigning version numbers to applications changed in AIR 2.5, the AIR 2 update framework cannot parse the version information in an AIR 2.5 application descriptor. This incompatibility means that you must update your application to use the new update framework BEFORE you update your application to use the AIR 2.5 SDK. Thus, updating your application to AIR 2.5 or later from any version of AIR before 2.5, requires TWO updates. The first update must use the AIR 2 namespace and include the AIR 2.5 update framework library (you can still create the application package using the AIR 2.5 SDK). The second update can use the AIR 2.5 namespace and include the new features of your application. You can also have the intermediate update do nothing except update to your AIR 2.5 application using the AIR Updater class directly. The following example illustrates how to update an application from version 1.0 to 2.0. Version 1.0 uses the old 2.0 namespace. Version 2.0 uses the 2.5 namespace and has new features implemented using AIR 2.5 APIs.
<?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> Definición del archivo descriptor de actualización y adición del archivo de AIR al servidor webCuando se utiliza el marco de actualización de AIR, se define la información básica sobre la actualización disponible en un archivo descriptor de actualización, almacenado en el servidor web. Un archivo descriptor de actualización es un sencillo archivo XML. El marco de actualización incluido en la aplicación comprueba este archivo para ver si se ha cargado una nueva versión. Formato del archivo descriptor de actualización modificado para AIR 2.5. El nuevo formato utiliza un espacio de nombres distinto. El espacio de nombres original es “http://ns.adobe.com/air/framework/update/description/1.0”. El espacio de nombres de AIR 2.5 es “http://ns.adobe.com/air/framework/update/description/2.5”. AIR applications created prior to AIR 2.5 can only read the version 1.0 update descriptor. AIR applications created using the updater framework included in AIR 2.5 or later can only read the version 2.5 update descriptor. Because of this version incompatibility, you often need to create two update descriptor files. The update logic in the AIR 2.5 versions of your application must download an update descriptor that uses the new format. Earlier versions of your AIR application must continue to use the original format. Both files must be modified for every update that you release (until you stop supporting versions created before AIR 2.5). El archivo descriptor de actualización contiene los siguientes datos:
Los elementos version y url son obligatorios. El elemento description es opcional. A continuación se incluye un archivo descriptor de actualización de ejemplo de la versión 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> A continuación se incluye un archivo descriptor de actualización de ejemplo de la versión 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> Si desea definir la etiqueta description mediante varios idiomas, utilice varios elementos text que definan un atributo 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> Sitúe el archivo descriptor de actualización, junto con el archivo de actualización de AIR, en el servidor web. El directorio de plantillas incluido con el descriptor de actualización contiene archivos descriptores de actualización de ejemplo. Éstos incluyen versiones en un solo idioma y varios idiomas. Creación de una instancia del objeto updaterTras cargar el marco de actualización de AIR en su código (consulte Configuración del entorno de desarrollo de Flex e Inclusión de archivos del marco en una aplicación de AIR basada en HTML), es necesario crear una instancia del objeto updater, tal y como se muestra en el siguiente ejemplo. Ejemplo de ActionScript: var appUpdater:ApplicationUpdater = new ApplicationUpdater(); Ejemplo de JavaScript: var appUpdater = new runtime.air.update.ApplicationUpdater(); El código anterior utiliza la clase ApplicationUpdater (que no proporciona ninguna interfaz de usuario). Si desea usar la clase ApplicationUpdaterUI (que proporciona una interfaz de usuario), utilice lo siguiente: Ejemplo de ActionScript: var appUpdater:ApplicationUpdaterUI = new ApplicationUpdaterUI(); Ejemplo de JavaScript: var appUpdater = new runtime.air.update.ApplicationUpdaterUI(); En los ejemplos de código restantes de este documento se presupone que se ha creado una instancia de un objeto updater denominada appUpdater. Definición de la configuración de actualizaciónTanto ApplicationUpdater como ApplicationUpdaterUI se pueden configurar mediante un archivo de configuración incluido con la aplicación, o bien, a través de ActionScript o JavaScript en la aplicación. Definición de la configuración de actualización en un archivo de configuración XMLEl archivo de configuración de actualización es un archivo XML. Puede incluir los siguientes elementos:
El archivo de configuración para ApplicationUpdaterUI puede incluir el siguiente elemento además de los elementos updateURL y delay:
A continuación se incluye un ejemplo del archivo de configuración para el marco 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> Se muestra un ejemplo del archivo de configuración para el marco ApplicationUpdaterUI, que incluye una definición para el 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> Seleccione la propiedad configurationFile en la ubicación de ese archivo: Ejemplo de ActionScript: appUpdater.configurationFile = new File("app:/cfg/updateConfig.xml");Ejemplo de JavaScript: appUpdater.configurationFile = new air.File("app:/cfg/updateConfig.xml"); El directorio de plantillas del marco de actualización incluye un archivo de configuración de ejemplo, config-template.xml. Definición de la configuración de actualización con código ActionScript o JavaScriptEstos parámetros de configuración también se pueden establecer utilizando código en la aplicación, tal y como se muestra a continuación: appUpdater.updateURL = " http://example.com/updates/update.xml"; appUpdater.delay = 1; Las propiedades del objeto updater son updateURL y delay. Estas propiedades definen la misma configuración que los elementos updateURL y delay en el archivo de configuración: la dirección URL del archivo descriptor de actualización y el intervalo para buscar actualizaciones. Si se especifica un archivo de configuración y la configuración en código, todas las propiedades establecidas utilizando código tienen prioridad sobre la configuración correspondiente en el archivo de configuración. Se debe definir la propiedad updateURL, a través del archivo de configuración o mediante script (consulte Definición del archivo descriptor de actualización y adición del archivo de AIR al servidor web) antes de utilizar updater (antes de llamar al método initialize() del objeto updater, descrito en Inicialización del marco de actualización). El marco ApplicationUpdaterUI define estas propiedades adicionales del objeto updater:
Todas las propiedades hacen referencia a uno o varios cuadros de diálogo en la interfaz de usuario ApplicationUpdaterUI. Cada propiedad es un valor booleano, con un valor predeterminado de true. Cuando se establece en false, los cuadros de diálogo correspondientes no aparecen como parte del proceso de actualización. Estas propiedades de cuadro de diálogo anulan la configuración del archivo de configuración de actualización. Proceso de actualizaciónEl marco de actualización de AIR completa el proceso de actualización en los siguientes pasos:
El objeto updater distribuye eventos a la finalización de cada uno de estos pasos. En la versión de ApplicationUpdater, es posible cancelar los eventos que indiquen la correcta finalización de un paso en el proceso. Si cancela uno de estos eventos, se cancelará el siguiente paso del proceso. En la versión de ApplicationUpdaterUI, updater presenta un cuadro de diálogo que permite al usuario cancelar o continuar en cada paso del proceso. Si cancela el evento, se pueden llamar a métodos del objeto updater para reanudar el proceso. Conforme progresa la versión ApplicationUpdater de updater en el proceso de actualización, se registra su estado actual, en una propiedad currentState. Esta propiedad se establece en una cadena los siguientes posibles valores:
Algunos métodos del objeto updater sólo se ejecutan si updater se encuentra en un determinado estado. Inicialización del marco de actualizaciónUna vez definidas las propiedades de configuración, (consulte Ejemplo básico: Uso de la versión ApplicationUpdaterUI), llame al método initialize() para inicializar la actualización: appUpdater.initialize(); Este método realiza lo siguiente:
La llamada a este método puede provocar que el objeto updater distribuya los siguientes eventos:
Al distribuir el evento UpdateEvent.INITIALIZED, el proceso de actualización se completa. Cuando se llamada al método initialize(), updater inicia el proceso de actualización y completa todos los pasos, en función de la configuración del intervalo de demora del temporizador. No obstante, también puede iniciar el proceso de actualización en cualquier momento llamando al método checkNow() del objeto updater: appUpdater.checkNow(); Este método no realiza ninguna operación si el proceso de actualización ya se está ejecutando. De lo contrario, inicia el proceso de actualización. El objeto updater puede distribuir el siguiente evento como resultado de la llamada al método checkNow():
Si se cancela el evento checkForUpdate, se puede llamar al método checkForUpdate() del objeto updater. (Consulte la siguiente sección.) Si no cancela el evento, el proceso de actualización continúa comprobando el archivo descriptor de actualización. Administración del proceso de actualización en la versión de ApplicationUpdaterUIEn la versión de ApplicationUpdaterUI, el usuario puede cancelar el proceso mediante los botones Cancelar de los cuadros de diálogo de la interfaz de usuario. Asimismo, es posible cancelar mediante programación el proceso de actualización llamando al método cancelUpdate() del objeto ApplicationUpdaterUI. Se pueden establecer las propiedades del objeto ApplicationUpdaterUI o definir elementos en el archivo de configuración de actualización para especificar qué confirmaciones de cuadro de diálogo muestra updater. Para obtener más información, consulte Definición de la configuración de actualización. Administración del proceso de actualización en la versión de ApplicationUpdaterPuede llamara al método preventDefault() de los objetos de evento distribuidos mediante el objeto ApplicationUpdater con el fin de cancelar pasos del proceso de actualización (consulte Proceso de actualización). La cancelación del comportamiento predeterminado ofrece a la aplicación una oportunidad para mostrar un mensaje al usuario donde se le pregunta si se desea continuar. En las siguientes secciones se describe cómo continuar con el proceso de actualización cuando se ha cancelado un paso del proceso. Descarga e interpretación del archivo descriptor de actualizaciónEl objeto ApplicationUpdater distribuye el evento checkForUpdate antes de que comience el proceso de actualización y justo antes de que updater intente descargar el archivo descriptor de actualización. Si cancela el comportamiento predeterminado del evento checkForUpdate, updater no descargará el archivo descriptor de actualización. Puede llamar al método checkForUpdate() para reanudar el proceso de actualización: appUpdater.checkForUpdate(); Al llamar al método checkForUpdate(), updater interpreta y descarga de forma asincrónica el archivo descriptor de actualización. Como resultado de la llamada al método checkForUpdate(), el objeto updater puede distribuir los siguientes eventos:
Descarga del archivo de actualización de AIREl objeto ApplicationUpdater distribuye el evento updateStatus una vez que updater descarga e interpreta correctamente el archivo descriptor de actualización. El comportamiento predeterminado es comenzar a descargar el archivo de actualización, si está disponible. Si cancela este comportamiento, puede llamar al método downloadUpdate() para que se reanude el proceso de actualización: appUpdater.downloadUpdate(); Al llamar a este método, updater descarga de forma asincrónica la versión de actualización del archivo de AIR. El método downloadUpdate() puede distribuir los siguientes eventos:
Actualización de la aplicaciónEl objeto ApplicationUpdater distribuye el evento downloadComplete cuando finaliza la descarga del archivo de actualización. Si cancela el comportamiento predeterminado, puede llamar al método installUpdate() para que se reanude el proceso de actualización: appUpdater.installUpdate(file); Al llamar a este método, updater instala una versión de actualización del archivo de AIR. El método incluye un parámetro, file, que es un objeto File que hace referencia al archivo de AIR para usar como actualización. El objeto ApplicationUpdater puede distribuir el evento beforeInstall como resultado de la llamada al método installUpdate():
Instalación desde un archivo arbitrario de AIRPuede llamar al método installFromAIRFile() para instalar la versión de actualización desde un archivo de AIR en el equipo del usuario: appUpdater.installFromAIRFile(); Este método hace que updater instale una versión de actualización de la aplicación desde el archivo de AIR. El método installFromAIRFile() puede distribuir los siguientes eventos:
Cancelación del proceso de actualizaciónPuede llamar al método cancelUpdate() para cancelar el proceso de actualización: appUpdater.cancelUpdate(); Este método cancela todas las descargas pendientes, elimina todos los archivos descargados incompletos y reinicia el temporizador de comprobación periódica. El método no realiza ninguna operación si el objeto updater se está inicializando. Localización de la interfaz ApplicationUpdaterUILa clase ApplicationUpdaterUI proporciona una interfaz de usuario predeterminada para el proceso de actualización. Esto incluye cuadros de diálogo que permiten al usuario iniciar y cancelar el proceso y llevar a cabo otras operaciones relacionadas. El elemento description del archivo descriptor de actualización permite definir la descripción de la aplicación en varios idiomas. Emplee varios elementos text que definan atributos lang, tal y como se muestra a continuación: <?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> El marco de actualización utiliza la descripción que mejor se adapta a la cadena de localización del usuario final. Para obtener más información, consulte Definición del archivo descriptor de actualización y adición del archivo de AIR al servidor web. Los desarrolladores de Flex puede añadir directamente un nuevo idioma al paquete"ApplicationUpdaterDialogs". Los desarrolladores de JavaScript pueden llamar al método addResources() del objeto updater. Este método agrega de forma dinámica un nuevo paquete de recursos para un idioma. El paquete de recursos define cadenas localizadas para un idioma. Estas cadenas se utilizan en distintos campos de texto de cuadro de diálogo. Los desarrolladores de JavaScript pueden emplear la propiedad localeChain de la clase ApplicationUpdaterUI para definir la cadena de configuraciones regionales empleada en la interfaz de usuario. Generalmente sólo los desarrolladores de JavaScript (HTML) utilizan esta propiedad. Los desarrolladores de Flex pueden usar ResourceManager para administrar la cadena de configuraciones regionales. Por ejemplo, el siguiente código de JavaScript define paquetes de recursos para rumano y húngaro: 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; Para obtener más información, consulte la descripción del método addResources() de la clase ApplicationUpdaterUI en la referencia del lenguaje. |
|