update Flex

L’auto-update en Flex, c’est facile !

Quel bonheur de pouvoir mettre à jour son application sans se déplacer. C’est encore mieux lorsque ce genre de fonctionalité est facile à intégrer à son application. C’est justement le cas pour Flex et en voici la preuve.

Le principe

D’un côté, l’application AIR et de l’autre, le serveur sur lequel se trouve la nouvelle version de l’application AIR ainsi qu’un fichier update.xml qui décrit cette nouvelle version. Périodiquement, l’application AIR va vérifier sur le serveur la présence d’une nouvelle version et dans un tel cas, la télécharge et l’installe. Ainsi, mettre à jour un parc informatique devient simple et rapide.

L’application AIR

La première chose à faire est d’importer les librairies nécessaires à la mise à jour automatique :

import air.update.ApplicationUpdaterUI;
import air.update.events.UpdateEvent;

Ensuite, il vous faut une méthode qui vérifie si la version présente sur le serveur est plus récente que la version actuelle. Cette méthode peut par exemple être appelée dans votre méthode init() (creationComplete=’init()’).

// Création de la variable appUpdater - merci Blindheit
public var appUpdater:ApplicationUpdaterUI = new ApplicationUpdaterUI();
public function checkForUpdates():void
{
    appUpdater.addEventListener(UpdateEvent.INITIALIZED, updateCheckNow);
    appUpdater.updateURL = "http://server/update.xml";
    appUpdater.delay = 0.1;
    appUpdater.isCheckForUpdateVisible = false;
    appUpdater.initialize();
}

Quelques petites explications supplémentaires :

  • updateURL est l’url du fichier update.xml qui se trouve sur le serveur
  • le delay est l’interval de temps (en jours) séparant deux vérifications de la version sur le seveur
  • isCheckForUpdateVisible permet d’activer ou de désactiver la fenêtre qui demande à l’utilisateur si il veut en effet regarder si une mise à jour existe. Ici, elle est désactivée parce que je la trouve superflue. Il existe également d’autres options permettant de jouer avec l’affichage des fenêtres.
  • initialize() active le processus
  • Enfin, grâce à l‘addEventListener, la méthode updateCheckNow est appelée au retour de initialize. Ceci permet, grâce à la fonction checkNow(), de forcer un appel au serveur lors du lancement initial de l’application.
public function updateCheckNow(event:UpdateEvent):void
{
    appUpdater.checkNow();
}

Voilà pour l’application AIR.

Côté serveur

Sur le serveur vous devez mettre l’application AIR et un fichier update.xml qui décrit la nouvelle version de l’application. Au niveau de l’application, vous devez mettre à jour le numéro de version qui se trouve dans le fichier nomxxx-app.xml. Ensuite ce numéro de version doit se retrouver dans le fichier update.xml :

<update xmlns="http://ns.adobe.com/air/framework/update/description/1.0">
    <version>0.2</version>
    <url>http://server/nomxxx.air</url>
    <description>
        Nouvelle version 0.2 de nomxxx
    </description>
</update>

Il ne reste plus qu’à installer votre version 0.1 sur votre ordinateur, à déposer la version 0.2 sur le serveur et lorsque vous lancez la version 0.1, elle ira automatiquement vérifier le fichier update.xml qui se trouve sur le serveur et la mise à jour se fera ensuite automatiquement.

Remarque :

  • Vérifier bien que l’application qui ouvre par défaut vos fichiers AIR est bien la bonne. Dans le cas contraire, la mise à jour plantera au moment de l’installation de la nouvelle version puisqu’elle ne pourra pas se lancer automatiquement.

Voilà, bon devs !

Be Sociable, Share!

related articles

comments

  1. Sans oublier de déclarer la variable appUpdater ;-)

    public var appUpdater:ApplicationUpdaterUI = new ApplicationUpdaterUI();

    Cordialement,
    Blindheit.

  2. Très juste ;-)
    Merci et joli site de photos.

  3. Arrêtez de parler de mise à jour automatique quand elle ne l’est pas. Il faut bien un humain derrière son écran qui clique sur “télécharger la mise à jour”.
    Et pour les interfaces sans utilisateurs … ?

  4. Bonjour,

    Je trouve votre tuto très intéressant ce pendant j’aurai une petite question concernant

    ” Ensuite, il vous faut une méthode qui vérifie si la version présente sur le serveur est plus récente que la version actuelle. Cette méthode peut par exemple être appelée dans votre méthode init() (creationComplete=’init()’). ”

    Dois-je faire appel à la fonction exemple : creationComplete=”{checkForUpdates()}” car je n’ai pas de fonction init() déclaré dans mon application.

    salutations.
    Robin

    Flash builder 4.6
    sdk 4.5.1
    air 2.6

add a comment: