Vérifier la version de son application Windows Phone (en complément de l’article de Julien Dollon)

Il peut être intéressant pour vos applications Windows Phone d’être capable de détecter si une nouvelle version est disponible sur le marketplace.
En effet l’icone du Marketplace indiquant que de nouvelles mises à jours sont disponibles n’est visible que lorsqu’elle est accrochée à la page d’accueil.
Il est alors très facile de passer à coté d’une mise à jour de votre application pourtant essentielle à son bon fonctionnement.

Julien Dollon a écrit un excellent article sur le sujet dont je vous conseille vivement la lecture.

http://julien.dollon.net/post/WP7-Prevenir-vos-utilisateurs-de28099une-nouvelle-version.aspx

Dans l’article, Julien donne l’adresse d’une l’url pointant vers son serveur et qui permet de vérifier si votre appli est bien à jour.
l’url prend en paramètre le pays et l’id de l’application.

Afin d’avoir une connexion plus direct, on va appeler l’url du MarketPlace au lieu de passer par le serveur de Julien.
Cela nous permettra d’être plus indépendant et l’accès sera légérement plus rapide.

L’url a appeler est la suivante pour l’application PurpleCherry du marketplace Français :

http://catalog.zune.net/v3.2/fr-FR/apps/97ce48a0-2241-456f-b4ef-da74d60ddeb9/?version=latest&clientType=WinMobile%207.1&store=Zest

Deux paramètres sont importants :

- L’id de l’application
- Le pays du marketplace

L’id de l’application est généré lors de la certification du Marketplace.
On ne peut donc pas le connaitre lors de la première certification.
Il est tout de même possible de le connaitre lors de sa mise en place pour la certification dans l’apphub (merci Rudy pour l’info).
Il est également stocké dans le fichier WMAppManifest.xml dans l’attribut ProductId du tag App.
On peut donc le récupérer facilement en utilisant une classe XDocument.
Je vous laisse consulter le code du helper pour plus d’information sur le sujet.

Note : Il y a déjà un ProductId dans le tag App lorsque vous créer une nouvelle application Windows Phone. Il sera écrasé par un Id definitif lors du processus de certification.

Obtenir le pays du marketplace est en revanche plus problématique car bien que l’on puisse récupérer facilement la langue utilisée par le télephone, le pays utilisé par le marketplace est lié au téléphone (merci de nouveau Rudy). Il est donc préférable de fixer un pays par défaut qui sera prise en compte par notre application. Dans le helper celui est fixé à « en-US » mais rien n’empeche de le changer en « fr-FR ».

Une fois notre Url complete on va pouvoir l’appeler à l’aide d’un WebClient.
Si tout se passe bien il devrait nous renvoyer un fichier XML (type flux RSS Atom) contenant l’information que l’on recherche : le numéro de version.
On va parser de nouveau avec un XDocument pour obtenir le contenue du tag version.

Pour savoir si le marketplace dispose d’une nouvelle version, il faudra comparer la version du MarketPlace à celle de l’application.
Il y a plusieurs façons d’obtenir le numéro de version de l’application (car il ya plusieurs endroits ou elle est stockée). Julien suggère d’utiliser celui de l’assembly, pour ma part je préfère utiliser l’attribut version du tag App du fichier WMAppManifest.xml (à coté de ProductId donc).

à partir de ces informations j’ai généré un helper de version assez solide :

VersionHelper.CheckForNewVersion(
    (args) =>
    {
        // pas d'erreur
        if (args.Error != null)
            return;

        // Une nouvelle version est détectée
        if (args.IsNewVersionDetected == true)
        {
            // Envoyé vers le detail de l'application sur le marketplace ?
            if( MessageBox.Show("Voulez-vous mettre à jour cette application ?", string.Format("Version {0} disponible !", args.NewVersion), MessageBoxButton.OKCancel) ==  MessageBoxResult.OK )
            {
                VersionHelper.ShowMarketplaceDetail();
            }
        }
    }
);

Les paramètres de pays (« en-US » par défaut), d’ancienne version et d’id de produit peuvent être fournis à la méthode si vous préférez gérer ces informations par vous même.
Le Helper vous permet de récupérer également le ProductId et la Version par le biais des propriétés du même nom.

Vous pouvez télécharger le Helper ici !
es
VersionHelper.cs

PS : Grand merci à Rudy Huyn pour les remarques constructives fournit sur cet article.

5 réponses à Vérifier la version de son application Windows Phone (en complément de l’article de Julien Dollon)

  1.  

    Salut Samuel,

    Merci pour ton article. Je me suis déjà posé cette problématique et j’ai hésité entre l’approche proposé par Julien (mais idem que toi, je trouve ça un peu « lourd » de devoir déployer quelque chose dans Azure pour faire ça) et ton approche (plus « risqué » si le code renvoyé par le market change…

    Au final, j’hésite encore :-) mais ton example de code va peut être faire pencher la balance !

    A+
    Jérémy

  2. Hello Jeremy,

    Je ne pense pas qu’il faille s’inquiéter pour le code renvoyé car l’url possède un numero de version (en cas de changement ils changeront de num de version) et le code renvoyé serait eventuellement facilement extensible en rajoutant un namespace.

     
  3.  

    Samuel,

    L’URL que tu utilises me renvoie « 404 – Resource not found ». Tu as pareil de ton côté ? C’est un problème passager ?

    Jérémy

  4.  
  5.  

    Oui c’est bon en fait désolé l’erreur était de mon côté. J’utilisais l’ID que j’ai côté dev et pas le « vrai » qui est côté marketplace.

    Merci !

leave your comment