Mise à jour des applications AIR
L’utilisateur peut installer ou mettre à jour une application AIR en double-cliquant sur un fichier AIR sur l’ordinateur ou à partir du navigateur (à l’aide de la fonction d’installation transparente). Le programme d’installation d’Adobe® AIR™ gère l’installation et avertit l’utilisateur s’il met à jour une application existante. Par ailleurs, la classe Updater permet à une application installée de se mettre automatiquement à niveau vers une nouvelle version. (Il est possible qu’une application installée détecte qu’une nouvelle version peut être téléchargée et installée.) La classe Updater inclut une méthode update(), qui permet de pointer vers un fichier AIR résidant sur l’ordinateur de l’utilisateur et d’effectuer la mise à jour vers cette version. Vous devez mettre en package l’application sous forme de fichier AIR pour pouvoir utiliser la classe Updater. Les applications mises en package sous forme de package ou fichier exécutable natif devraient utiliser les fonctionnalités de mise à jour fournies par la plate-forme native. L’ID d’application et l’ID d’éditeur d’un fichier AIR de mise à jour doivent correspondre à l’application à mettre à jour. L’ID d’éditeur est issu du certificat de signature, ce qui signifie que la mise à jour et l’application à mettre à jour doivent être signées avec le même certificat. Dans AIR 1.5.3 ou ultérieur, le fichier descripteur d’application comprend un élément <publisherID>. Vous devez utiliser cet élément si vous avez développé des versions de l’application à l’aide d’AIR 1.5.2 ou antérieur. Pour plus d’informations, voir publisherID. Depuis AIR 1.1, vous pouvez effectuer la migration d’une application pour utiliser un nouveau certificat développeur. La migration d’une application pour utiliser une nouvelle signature implique la signature du fichier AIR de mise à jour avec l’ancien et le nouveau certificat. La migration de certificats est un processus unidirectionnel. Après la migration, seuls les fichiers AIR signés avec le nouveau certificat (ou avec les deux certificats) sont reconnus comme étant des mises à jour d’une installation existante. La gestion des mises à jour des applications peut se révéler complexe. AIR 1.5 comprend la nouvelle structure de mise à jour des applications AdobeAIR. Cette structure fournit des API qui aident les développeurs à doter les applications AIR de bonnes capacités de mise à jour. Vous pouvez utiliser la migration de certificats pour passer d’un certificat auto-signé à un certificat de signature de code commercial, ou d’un certificat auto-signé ou commercial à un autre. Si vous n’effectuer pas la migration du certificat, les utilisateurs existants doivent supprimer la version actuelle de votre application avant d’installer la nouvelle. Pour plus d’informations, voir Changement de certificats. Il est recommandé d’inclure un mécanisme de mise à jour dans votre application. Si vous créez une nouvelle version de celle-ci, le mécanisme de mise à jour peut inviter l’utilisateur à installer la nouvelle version. Le programme d’installation d’une application AIR crée des fichiers journaux à l’installation, la mise à jour ou la suppression de l’application. Vous pouvez consulter ces journaux pour déterminer la cause de tout problème d’installation. Voir Installation logs. Remarque : les nouvelles versions du moteur d’exécution Adobe AIR comprennent parfois des versions mises à jour de WebKit. Celles-ci sont susceptibles d’apporter des modifications inattendues au contenu HTML dans une application AIR déployée, modifications exigeant éventuellement la mise à jour de l’application. Un mécanisme de mise à jour peut informer l’utilisateur qu’une nouvelle version de l’application est disponible. Pour plus d’informations, voir A propos de l’environnement HTML (développeurs ActionScript) ou A propos de l’environnement HTML (développeurs HTML).
A propos de la mise à jour des applicationsLa classe Updater (intégrée au package flash.desktop) contient une méthode unique, update(), qui permet de mettre à jour l’application en cours d’exécution. Par exemple, si l’utilisateur dispose d’une version du fichier AIR (« Sample_App_v2.air ») située sur le bureau, le code suivant met à jour l’application : Exemple 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);
Exemple JavaScript : var updater = new air.Updater();
var airFile = air.File.desktopDirectory.resolvePath("Sample_App_v2.air");
var version = "2.01";
updater.update(airFile, version);
Pour que l’application puisse utiliser la classe Updater, l’utilisateur ou l’application doit télécharger la version mise à jour du fichier AIR sur l’ordinateur. Pour plus d’informations, voir Téléchargement d’un fichier AIR sur l’ordinateur de l’utilisateur. Résultats de l’appel à la méthode Updater.update()Lorsqu’une application du moteur d’exécution appelle la méthode update(), le moteur d’exécution ferme l’application, puis tente d’installer la nouvelle version à partir du fichier AIR. Le moteur d’exécution vérifie que l’ID d’application et l’ID d’éditeur spécifiés dans le fichier AIR correspondent à ceux de l’application qui appellent la méthode update(). (Pour plus d’informations sur l’ID d’application et l’ID d’éditeur, voir Fichiers descripteurs d’applications AIR.) Il vérifie également que la chaîne de version correspond à la chaîne version transmise à la méthode update(). Si l’installation réussit, le moteur d’exécution ouvre la nouvelle version de l’application. Dans le cas contraire (si l’installation échoue), il ouvre à nouveau la version existante (pré-installée) de l’application. Sous Mac OS, pour installer une version mise à jour d’une application, l’utilisateur doit disposer de privilèges système appropriés pour accéder au répertoire de l’application. S’il utilise Windows ou Linux, l’utilisateur doit disposer de privilèges d’administrateur. Si la version mise à jour de l’application requiert une mise à jour du moteur d’exécution, la nouvelle version du moteur est installée. Pour mettre à jour le moteur d’exécution, un utilisateur doit disposer des privilèges administrateur pour l’ordinateur. Lors du test d’une application avec l’application de débogage du lanceur AIR (ADL), l’appel de la méthode update() provoque une exception d’exécution. A propos de la chaîne de versionLa chaîne spécifiée comme paramètre version de la méthode update() doit correspondre à la chaîne de l’élément version ou versionNumber du fichier descripteur d’application associé au fichier AIR à installer. Par mesure de sécurité, la définition du paramètre version est obligatoire. En imposant à l’application de vérifier le numéro de version du fichier AIR, celle-ci évite d’installer une version antérieure par inadvertance. (Une version antérieure de l’application risque d’être affectée par des problèmes de sécurité résolus dans l’application actuellement installée.) L’application doit également vérifier la chaîne de version du fichier AIR avec la chaîne de version de l’application installée afin d’éviter les tentatives d’attaque pour rétrograder l’application. Avant AIR 2.5, utilisez n’importe quel format pour la chaîne de version (« 2.01 » ou « version 2 », par exemple). A partir d’AIR 2.5 ou ultérieur, la chaîne de version doit correspondre à une séquence de nombres d’un, deux ou trois chiffres, séparés par un point. Exemple : « .0 », « 1.0 » et « 67.89.999 » sont tous des nombres de version valides. Validez la chaîne de version avant de mettre à jour l’application. Si une application Adobe AIR télécharge un fichier AIR via Internet, il est conseillé de disposer d’un mécanisme permettant au service Web d’informer l’application Adobe AIR de la version en cours de téléchargement. L’application peut ainsi utiliser cette chaîne comme paramètre version de la méthode update(). Si le fichier AIR est obtenu par un autre moyen, dans lequel la version du fichier AIR est inconnue, l’application AIR peut examiner le fichier AIR afin de déterminer les informations de version. (Un fichier AIR est une archive compressée et le fichier descripteur d’application correspond au deuxième enregistrement dans l’archive.) Pour plus d’informations sur le fichier descripteur d’application, voir Fichiers descripteurs d’applications AIR. Flux de travail de signature associé aux mises à jour d’applicationLa publication ad hoc de mises à jour complique les tâches de gestion de versions d’application multiples, ainsi que le processus de suivi des dates d’expiration des certificats. Un certificat risque d’arriver à expiration avant que vous ne puissiez publier une mise à jour. Le moteur d’exécution d’Adobe AIR traite une mise à jour d’application publiée sans signature de migration comme une nouvelle application. Les utilisateurs doivent désinstaller l’application AIR en cours pour pouvoir installer la mise à jour. Pour résoudre le problème, téléchargez chaque application mise à jour avec le certificat le plus récent sur une URL de déploiement distincte. Incluez un mécanisme destiné à vous rappeler d’appliquer une signature de migration lorsque le délai de 180 jours du certificat est entamé, mais pas dépassé. Pour plus d’informations, voir Signature d’une version mise à jour d’une application AIR. Pour apprendre à appliquer une signature, voir Commandes de l’outil ADT. Exécutez les tâches suivantes pour rationaliser le processus d’application des signatures de migration :
Présentation d’une interface utilisateur personnalisée pour la mise à jour d’applicationsAIR inclut une interface de mise à jour par défaut : Cette interface est toujours utilisée la première fois qu’un utilisateur installe une version d’une application sur une machine. Vous pouvez cependant définir votre propre interface en vue de l’utiliser dans les occurrences suivantes. Si l’application définit une interface de mise à jour personnalisée, spécifiez un élément customUpdateUI dans le fichier descripteur de l’application actuellement installée : <customUpdateUI>true</customUpdateUI> Après avoir installé l’application et une fois que l’utilisateur a ouvert un fichier AIR avec un ID d’application et un ID d’éditeur correspondant à l’application installée, c’est le moteur d’exécution qui ouvre l’application et non le programme d’installation par défaut de l’application AIR. Pour plus d’informations, voir customUpdateUI. Lors de son exécution (c’est-à-dire lorsque l’objet NativeApplication.nativeApplication distribue un événement load), l’application peut décider de mettre ou non l’application à jour (à l’aide de la classe Updater). Si elle décide d’effectuer la mise à jour, elle peut présenter à l’utilisateur sa propre interface d’installation (qui diffère de l’interface d’exécution standard). Téléchargement d’un fichier AIR sur l’ordinateur de l’utilisateurPour utiliser la classe Updater, l’utilisateur ou l’application doit tout d’abord enregistrer un fichier AIR localement sur l’ordinateur de l’utilisateur. Remarque : AIR 1.5 comprend une structure de mise à jour qui aide les développeurs à doter les applications AIR de bonnes capacités de mise à jour. L’utilisation de cette structure peut être bien plus simple que l’utilisation directe de la méthode update() de la classe Update. Pour plus d’informations, voir Utilisation de la structure de mise à jour.
Le code suivant lit un fichier AIR à partir d’une URL (http://example.com/air/updates/Sample_App_v2.air) et l’enregistre dans le répertoire de stockage de l’application. Exemple 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.");
}
Exemple 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.");
}
Pour plus d’informations, voir :
Vérifications permettant de savoir si l’application est exécutée pour la première foisAprès avoir mis à jour une application, vous pouvez afficher un message de bienvenue ou de mise en route destiné à l’utilisateur. Au démarrage, l’application vérifie si elle est exécutée pour la première fois afin d’afficher ou non ce message. Remarque : AIR 1.5 comprend une structure de mise à jour qui aide les développeurs à doter les applications AIR de bonnes capacités de mise à jour. Cette structure fournit des méthodes simples qui permettent de vérifier si la version de l’application est exécutée pour la première fois. Pour plus d’informations, voir Utilisation de la structure de mise à jour.
Pour cela, vous devez enregistrer un fichier dans le répertoire de stockage de l’application lors de l’initialisation de l’application. Chaque fois que l’application démarre, elle vérifie l’existence de ce fichier. Si le fichier n’existe pas, l’application est exécutée pour la première fois pour l’utilisateur actuel. Si le fichier existe, l’application a déjà été exécutée au moins une fois. Si le fichier existe et contient un numéro de version antérieur au numéro de version actuel, vous savez que l’utilisateur exécute la nouvelle version pour la première fois. L’exemple Flex suivant illustre ce concept : <?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>
L’exemple suivant illustre le concept en 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 votre application enregistre les données localement (par exemple, dans le répertoire de stockage de l’application), vous pouvez vérifier toutes les données préalablement enregistrées (de versions antérieures) lors de la première exécution. Utilisation de la structure de mise à jourLa gestion des mises à jour d’applications s’avère parfois laborieuse. La structure de mise à jour des applications AdobeAIR contient des API qui permettent aux développeurs d’intégrer des fonctionnalités de mise à jour performantes aux applications AIR. La structure de mise à jour d’AIR exécute les tâches suivantes à l’intention des développeurs :
La structure de mise à jour d’AIR propose un exemple d’interface utilisateur dont dispose l’application. Cette interface présente à l’utilisateur des informations de base et les options de configuration associées aux mises à jour de l’application. L’application peut également définir une interface utilisateur personnalisée à utiliser avec la structure de mise à jour. La structure de mise à jour AIR permet de stocker les informations relatives à la version mise à jour d’une application AIR dans de simples fichiers de configuration XML. Pour la plupart des applications, l’inclusion dans ces fichiers de configuration du code de base fournit à l’utilisateur final des fonctionnalités de mise à jour satisfaisantes. Même sans faire appel à la structure de mise à jour, Adobe AIR comprend une classe Updater dont disposent les applications AIR pour effectuer la mise à jour vers de nouvelles versions. Cette classe permet à l’application de procéder à une mise à jour vers la version contenue dans un fichier AIR situé sur l’ordinateur de l’utilisateur. Toutefois, la gestion des mises à jour peut se révéler plus complexe que la simple mise à jour d’une application à partir d’un fichier AIR stocké localement. Fichiers de structure de mise à jour AIRLa structure de mise à jour AIR figure dans le répertoire frameworks/libs/air du kit de développement SDK AIR 2. Elle comprend les fichiers suivants :
Pour plus d’informations, voir : Configuration de l’environnement de développement FlexLes fichiers SWC qui figurent dans le répertoire frameworks/libs/air du kit SDK AIR 2 définissent les classes que vous pouvez utiliser lors du développement dans Flash et Flex. Pour utiliser la structure de mise à jour lors d’une compilation avec le kit SDK Flex, intégrez le fichier ApplicationUpdater.swc ou ApplicationUpdater_UI.swc dans l’appel au compilateur amxmlc. Dans l’exemple suivant, le compilateur charge le fichier ApplicationUpdater.swc dans le sous-répertoire lib du répertoire SDK Flex : amxmlc -library-path+=lib/ApplicationUpdater.swc -- myApp.mxml Dans l’exemple suivant, le compilateur charge le fichier ApplicationUpdater_UI.swc dans le sous-répertoire lib du répertoire SDK Flex : amxmlc -library-path+=lib/ApplicationUpdater_UI.swc -- myApp.mxml Lors d’un développement avec Flash Builder, ajoutez le fichier SWC dans l’onglet Chemin de la bibliothèque des paramètres du chemin de création Flex de la boîte de dialogue Propriétés. Assurez-vous de copier les fichiers SWC vers le répertoire que vous référencerez dans le compilateur amxmlc (avec le kit SDK Flex) ou Flash Builder. Intégration des fichiers de la structure dans une application AIR de type HTMLLe répertoire frameworks/html de la structure de mise à jour contient les fichiers SWF suivants :
Le code JavaScript des applications AIR peut utiliser les classes définies dans les fichiers SWF. Pour utiliser la structure de mise à jour, intégrez le fichier applicationupdater.swf ou applicationupdater_ui.swf dans le répertoire (ou un sous-répertoire) de l’application. Ensuite, dans le fichier HTML qui utilisera la structure (dans le code JavaScript), insérez une balise script chargeant le fichier : <script src="applicationUpdater.swf" type="application/x-shockwave-flash"/> Vous pouvez également charger le fichier applicationupdater_ui.swf à l’aide de la balise script : <script src="applicationupdater_ui.swf" type="application/x-shockwave-flash"/> L’API définie dans ces deux fichiers est décrite dans la suite de ce document. Exemple de base : utilisation de la version ApplicationUpdaterUILa version ApplicationUpdaterUI de la structure de mise à jour propose une interface de base que vous pouvez facilement utiliser dans l’application. Voici un exemple de base. D’abord, créez une application AIR qui appelle la structure de mise à jour :
Ajoutez ensuite la mise à jour de l’application AIR sur le serveur Web :
Il s’agit là d’un exemple de base, mais il fournit des fonctionnalités de mise à jour suffisantes pour la plupart des applications. La suite de ce document décrit l’utilisation de la structure de mise à jour en fonction de vos besoins. Pour accéder à un autre exemple d’utilisation de la structure de mise à jour, voir les exemples d’application suivants dans le Centre des développeurs d’Adobe AIR :
Mise à jour vers AIR 2.5En raison de la modification des règles d’affectation de numéro de version aux applications dans AIR 2.5, la structure de mise à jour d’AIR 2 ne peut pas analyser les informations de version dans un fichier descripteur d’application AIR 2.5. Cette incompatibilité signifie que vous devez mettre à jour l’application de sorte à utiliser la nouvelle structure de mise à jour AVANT de mettre à jour l’application de sorte à utiliser le kit SDK d’AIR 2.5. Par conséquent, mettre à jour l’application vers AIR 2.5 ou ultérieur à partir de n’importe quelle version d’AIR antérieure à 2.5 nécessite DEUX mises à jour. La première mise à jour doit utiliser l’espace de noms d’AIR 2 et inclure la bibliothèque de la structure de mise à jour d’AIR 2.5 (vous pouvez continuer à mettre en package l’application à l’aide du kit SDK d’AIR 2.5). La seconde mise à jour peut faire appel à l’espace de noms d’AIR 2.5 et inclure les nouvelles fonctionnalités de l’application. Vous pouvez également restreindre la mise à jour intermédiaire à la mise à jour de l’application AIR 2.5 directement par le biais de la classe Updater d’AIR. L’exemple suivant illustre la procédure de mise à jour d’une application de la version 1.0 à la version 2.0. La version 1.0 utilise l’ancien espace de noms 2.0. La version 2.0 fait appel à l’espace de noms 2.5 et possède les nouvelles fonctionnalités mises en œuvre par le biais des API d’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>
Définition des fichiers descripteurs de mise à jour et ajout du fichier AIR dans le serveur WebLorsque vous utilisez la structure de mise à jour d’AIR, vous définissez les informations de base relatives à la mise à jour disponible dans des fichiers descripteurs de mise à jour, stockés sur le serveur Web. Un fichier descripteur de mise à jour est un simple fichier XML. La structure de mise à jour intégrée à l’application examine ce fichier pour savoir si une nouvelle version a été téléchargée. Le format du fichier descripteur de mise à jour a été modifié dans AIR 2.5 et utilise à présent un autre espace de noms. L’espace de noms d’origine correspond à « http://ns.adobe.com/air/framework/update/description/1.0 ». L’espace de noms d’AIR 2.5 correspond à « http://ns.adobe.com/air/framework/update/description/2.5 ». Les applications AIR créées avant AIR 2.5 ne lisent que la version 1.0 du descripteur de mise à jour. Les applications AIR créées avec la structure de mise à jour intégrée à AIR 2.5 ou ultérieur ne lisent que la version 2.5 du descripteur de mise à jour. En raison de cette incompatibilité des versions, il s’avère souvent nécessaire de créer deux fichiers descripteurs de mise à jour. La logique de mise à jour des versions AIR 2.5 de l’application doit télécharger un descripteur de mise à jour qui utilise le nouveau format. Les versions antérieures de l’application AIR doivent continuer à utiliser le format d’origine. Les deux fichiers doivent être modifiés pour chaque mise à jour (jusqu’à ce que vous arrêtiez la prise en charge des versions créées avant AIR 2.5). Le fichier descripteur de mise à jour contient les données suivantes :
Les éléments version et url sont obligatoires. L’élément description est facultatif. Voici un exemple de fichier descripteur de mise à jour (version 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>
Et voici un exemple de fichier descripteur de mise à jour (version 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>
Pour définir la balise description avec plusieurs langues, utilisez plusieurs éléments text définissant un attribut 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>
Placez le fichier descripteur de mise à jour et le fichier AIR de mise à jour sur le serveur Web. Le répertoire templates inclus avec le descripteur de mise à jour comprend des exemples de fichiers descripteur de mise à jour. Ces derniers comprennent des versions de langage unique et des versions multilingues. Instanciation d’un objet updaterAu terme du chargement de la structure de mise à jour d’AIR dans le code (voir Configuration de l’environnement de développement Flex et Intégration des fichiers de la structure dans une application AIR de type HTML), vous devez instancier un objet updater, comme illustré par l’exemple suivant. Exemple ActionScript : var appUpdater:ApplicationUpdater = new ApplicationUpdater(); Exemple JavaScript : var appUpdater = new runtime.air.update.ApplicationUpdater(); Le code précédent utilise la classe ApplicationUpdater (qui ne fournit pas d’interface utilisateur). Pour faire appel à la classe ApplicationUpdaterUI (qui fournit une interface utilisateur), utilisez le code suivant. Exemple ActionScript : var appUpdater:ApplicationUpdaterUI = new ApplicationUpdaterUI(); Exemple JavaScript : var appUpdater = new runtime.air.update.ApplicationUpdaterUI(); Les autres exemples de code de ce document supposent que vous avez instancié un objet updater nommé appUpdater. Configuration des paramètres de la mise à jourLes classes ApplicationUpdater et ApplicationUpdaterUI peuvent être configurées par l’intermédiaire d’un fichier de configuration fourni avec l’application ou par le code ActionScript ou JavaScript de l’application. Définition des paramètres de la mise à jour dans un fichier de configuration XMLCe fichier de configuration de la mise à jour est un fichier XML. Il peut contenir les éléments suivants :
Le fichier de configuration d’ApplicationUpdaterUI peut contenir l’élément suivant en plus des éléments updateURL et delay :
Voici un exemple de fichier de configuration pour la structure 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>
Voici un exemple de fichier de configuration pour la structure ApplicationUpdaterUI, comprenant une définition de l’élément 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>
Pointez la propriété configurationFile vers l’emplacement du fichier : Exemple ActionScript : appUpdater.configurationFile = new File("app:/cfg/updateConfig.xml");
Exemple JavaScript :appUpdater.configurationFile = new air.File("app:/cfg/updateConfig.xml");
Le répertoire templates de la structure de mise à jour comprend un exemple de fichier de configuration, config-template.xml. Définition des paramètres de mise à jour dans le code ActionScript ou JavaScriptCes paramètres de configuration peuvent également être définis dans le code de l’application, comme dans le code suivant : appUpdater.updateURL = " http://example.com/updates/update.xml"; appUpdater.delay = 1; Les propriétés de l’objet updater sont updateURL et delay. Ces propriétés définissent les mêmes paramètres que les éléments updateURL et delay dans le fichier de configuration : l’URL du fichier descripteur de mise à jour et l’intervalle de vérification des mises à jour. Si vous spécifiez un fichier de configuration et des paramètres dans le code, toutes les propriétés définies à l’aide du code sont prioritaires sur les paramètres correspondants dans le fichier de configuration. Vous devez définir la propriété updateURL, par l’intermédiaire du fichier de configuration ou du script (voir Définition des fichiers descripteurs de mise à jour et ajout du fichier AIR dans le serveur Web), avant d’utiliser l’objet updater (avant d’appeler la méthode initialize() de l’objet updater, décrite à la section Initialisation de la structure de mise à jour). La structure ApplicationUpdaterUI définit les propriétés supplémentaires suivantes de l’objet updater :
Chaque propriété correspond à une ou plusieurs boîtes de dialogue de l’interface utilisateur ApplicationUpdaterUI. Chaque propriété est une valeur booléenne, dont la valeur par défaut est true. Lorsqu’elle est définie sur false, les boîtes de dialogue correspondantes ne s’affichent pas lors de la procédure de mise à jour. Les propriétés de ces boîtes de dialogue remplacent les paramètres du fichier de configuration de mise à jour. Processus de mise à jourLa structure de mise à jour AIR complète le processus de mise à jour selon la procédure suivante :
L’objet updater distribue des événements à la fin de chacune de ces étapes. Dans la version ApplicationUpdater, vous pouvez annuler les événements qui indiquent le succès d’une étape du processus. Si vous annulez l’un de ces événements, l’étape suivante du processus est annulée. Dans la version ApplicationUpdaterUI, le programme de mise à jour affiche une boîte de dialogue qui permet à l’utilisateur d’annuler ou de continuer à chaque étape du processus. Si vous annulez l’événement, vous pouvez appeler les méthodes de l’objet updater pour reprendre le processus. Au fur et à mesure que la version ApplicationUpdater du programme de mise à jour poursuit le processus, l’état en cours est enregistré dans une propriété currentState. Cette propriété est définie sur une chaîne qui peut prendre les valeurs suivantes :
Certaines méthodes de l’objet updater ne s’exécutent que si le programme de mise à jour est dans un certain état. Initialisation de la structure de mise à jourAprès la définition des propriétés de configuration (voir Exemple de base : utilisation de la version ApplicationUpdaterUI), appelez la méthode initialize() pour initialiser la mise à jour : appUpdater.initialize(); Cette méthode effectue les opérations suivantes :
L’appel à cette méthode peut entraîner la distribution des événements suivants par l’objet updater :
Lors de la distribution de l’événement UpdateEvent.INITIALIZED, le processus de mise à jour est terminé. Lorsque vous appelez la méthode initialize(), le programme de mise à jour démarre le processus et effectue toutes les étapes, en fonction du paramètre de délai du minuteur. Toutefois, vous pouvez également démarrer le processus de mise à jour à tout moment en appelant la méthode checkNow() de l’objet updater : appUpdater.checkNow(); Cette méthode n’a aucune incidence si le processus de mise à jour est déjà en cours d’exécution. Sinon, elle démarre le processus de mise à jour. L’objet updater peut distribuer l’événement suivant après un appel à la méthode checkNow() :
Si vous annulez l’événement checkForUpdate, vous pouvez appeler la méthode checkForUpdate() de l’objet updater. (Voir la section suivante.) Si vous n’annulez pas l’événement, le processus de mise jour recherche le fichier descripteur de mise à jour. Gestion du processus de mise à jour dans la version ApplicationUpdaterUIDans la version ApplicationUpdaterUI, l’utilisateur peut annuler le processus via les boutons Annuler des boîtes de dialogue de l’interface utilisateur. De même, vous pouvez annuler par programmation le processus de mise à jour en appelant la méthode cancelUpdate() de l’objet ApplicationUpdaterUI. Vous pouvez définir les propriétés de l’objet ApplicationUpdaterUI ou définir les éléments du fichier de configuration de mise à jour pour spécifier les confirmations de boîtes de dialogue devant être affichées par le programme de mise à jour. Pour plus d’informations, voir Configuration des paramètres de la mise à jour. Gestion du processus de mise à jour dans la version ApplicationUpdaterVous pouvez appeler la méthode preventDefault() des objets d’événements distribués par l’objet ApplicationUpdater pour annuler des étapes du processus de mise à jour (voir Processus de mise à jour). L’annulation du comportement par défaut permet à votre application d’afficher un message à l’utilisateur pour lui demander s’il souhaite continuer. Les sections suivantes montrent comment poursuivre le processus de mise à jour lorsqu’une étape du processus a été annulée. Téléchargement et interprétation du fichier descripteur de mise à jourL’objet ApplicationUpdater distribue l’événement checkForUpdate avant le début du processus de mise à jour, juste avant que le programme de mise à jour ne tente de télécharger le fichier descripteur de mise à jour. Si vous annulez le comportement par défaut de l’événement checkForUpdate, le programme de mise à jour ne télécharge pas le fichier descripteur de mise à jour. Pour reprendre le processus de mise à jour, vous pouvez appeler la méthode checkForUpdate() : appUpdater.checkForUpdate(); L’appel à la méthode checkForUpdate() oblige le programme de mise à jour à effectuer un téléchargement asynchrone et à interpréter le fichier descripteur de mise à jour. À la suite d’un appel à la méthode checkForUpdate(), l’objet updater peut distribuer les événements suivants :
Téléchargement du fichier AIR de mise à jourL’objet ApplicationUpdater distribue l’événement updateStatus dès que le programme de mise à jour à bien téléchargé et interprété le fichier descripteur de mise à jour. Le comportement par défaut consiste à démarrer le téléchargement du fichier de mise à jour lorsque ce dernier est disponible. Si vous annulez le comportement par défaut, vous pouvez reprendre le processus en appelant la méthode downloadUpdate() : appUpdater.downloadUpdate(); L’appel de cette méthode oblige le programme de mise à jour à effectuer un téléchargement asynchrone de la mise à jour du fichier AIR. La méthode downloadUpdate() peut distribuer les événements suivants :
Mise à jour de l’applicationL’objet ApplicationUpdater déclenche l’événement downloadComplete lorsque le téléchargement du fichier de mise à jour est terminé. Si vous annulez le comportement par défaut, vous pouvez reprendre le processus en appelant la méthode installUpdate() : appUpdater.installUpdate(file); Un appel à cette méthode oblige le programme de mise à jour à installer la mise à jour du fichier AIR. La méthode comprend un paramètre, file, correspondant à un objet File qui fait référence au fichier AIR à utiliser en tant que mise à jour. L’objet ApplicationUpdater peut distribuer l’événement beforeInstall à la suite d’un appel à la méthode installUpdate() :
Installation à partir d’un fichier AIR arbitraireVous pouvez appeler la méthode installFromAIRFile() pour installer la mise à jour à partir d’un fichier AIR situé sur l’ordinateur de l’utilisateur : appUpdater.installFromAIRFile(); Cette méthode oblige le programme de mise à jour à installer la mise à jour de l’application à partir du fichier AIR. La méthode installFromAIRFile() peut distribuer les événements suivants :
Annulation du processus de mise à jourPour annuler le processus de mise à jour, vous pouvez appeler la méthode cancelUpdate() : appUpdater.cancelUpdate(); Cette méthode annule tous les téléchargements en attente, en supprimant tous les fichiers partiellement téléchargés, et réinitialise le minuteur de vérification périodique. Cette méthode n’a aucune incidence si le programme de mise à jour est initialisé. Localisation de l’interface ApplicationUpdaterUILa classe ApplicationUpdaterUI fournit une interface utilisateur par défaut pour le processus de mise à jour. Celle-ci comprend des boîtes de dialogue qui permettent à l’utilisateur de démarrer le processus, de l’annuler et d’effectuer d’autres actions associées. L’élément description du fichier descripteur de mise à jour vous permet de définir la description de l’application en plusieurs langues. Utilisez plusieurs éléments text définissant des attributs lang, comme dans l’exemple suivant : <?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>
La structure de mise à jour utilise la description correspondant le mieux au chaînage de localisation de l’utilisateur final. Pour plus d’informations, voir Définition du fichier descripteur de mise à jour et ajout du fichier AIR dans votre serveur Web. Les développeurs Flex peuvent ajouter directement une nouvelle langue dans le regroupement "ApplicationUpdaterDialogs". Les développeurs JavaScript peuvent appeler la méthode addResources() de l’objet updater. Cette méthode ajoute dynamiquement un nouveau regroupement de ressources pour une langue. Le regroupement de ressources définit les chaînes localisées d’une langue. Ces chaînes sont utilisées dans les champs de texte des différentes boîtes de dialogue. Les développeurs JavaScript peuvent utiliser la propriété localeChain de la classe ApplicationUpdaterUI pour définir la chaîne de paramètres régionaux utilisée par l’interface utilisateur. En général, seuls les développeurs JavaScript (HTML) utilisent cette propriété. Les développeurs Flex peuvent utiliser ResourceManager pour gérer la chaîne de paramètres régionaux. Par exemple, le code JavaScript suivant définit des regroupements de ressources pour le roumain et le hongrois : 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;
Pour plus d’informations, voir la description de la méthode addResources() de la classe ApplicationUpdaterUI dans le guide de référence du langage. |
|