Mettre à jour les applications publiées par le Store à partir de votre codeUpdate Store-published apps from your code

À compter de Windows 10, version 1607 (Build 14393), Windows 10 permet aux développeurs de renforcer les garanties relatives aux mises à jour d’applications à partir du Store.Starting in Windows 10, version 1607 (build 14393), Windows 10 allows developers to make stronger guarantees around app updates from the Store. Cela nécessite quelques API simples, crée une expérience utilisateur cohérente et prévisible et permet aux développeurs de se concentrer sur ce qu’ils font le mieux tout en permettant à Windows de faire le gros du travail.Doing this requires a few simple APIs, creates a consistent and predictable user experience and lets developers to focus on what they do best while allowing Windows to do the heavy lifting.

Il existe deux façons fondamentales de gérer les mises à jour d’application.There are two fundamental ways that app updates can be managed. Dans les deux cas, le résultat net de ces méthodes est le même : la mise à jour est appliquée.In both cases, the net result for these methods is the same - the update is applied. Toutefois, dans un cas, vous pouvez choisir de laisser le système faire tout le travail dans le cas où vous souhaiteriez avoir un niveau plus élevé de contrôle sur l’expérience utilisateur.However, in one case, you can choose to let the system do all the work while in the other case you might want to have a deeper level of control over the user experience.

Mises à jour simplesSimple updates

Tout d’abord, il s’agit de l’appel d’API très simple qui indique au système de rechercher les mises à jour, de les télécharger, puis de demander l’autorisation à l’utilisateur de les installer.First and foremost is the very simple API call that tells the system to check for updates, download them and then request permission from the user to install them. Vous allez commencer par utiliser la classe StoreContext pour récupérer des objets StorePackageUpdate , les télécharger et les installer.You'll start by using the StoreContext class to get StorePackageUpdate objects, download and install them.

using Windows.Services.Store;

private async void GetEasyUpdates()
{
    StoreContext updateManager = StoreContext.GetDefault();
    IReadOnlyList<StorePackageUpdate> updates = await updateManager.GetAppAndOptionalStorePackageUpdatesAsync();

    if (updates.Count > 0)
    {
        IAsyncOperationWithProgress<StorePackageUpdateResult, StorePackageUpdateStatus> downloadOperation = 
            updateManager.RequestDownloadAndInstallStorePackageUpdatesAsync(updates);
        StorePackageUpdateResult result = await downloadOperation.AsTask();
    }
}

À ce stade, l’utilisateur a le choix entre deux options : appliquer la mise à jour maintenant ou différer la mise à jour.At this point the user has two options they can choose from: apply the update now or defer the update. Le choix de l’utilisateur sera renvoyé à via l’objet, StorePackageUpdateResult ce qui permet aux développeurs d’effectuer d’autres actions, telles que la fermeture de l’application si la mise à jour est nécessaire pour continuer ou simplement essayer plus tard.Whatever choice the user makes will be returned back to via the StorePackageUpdateResult object allowing developers to take further actions such as closing down the app if the update is required to continue or simply trying again later.

Mises à jour contrôlées avec précisionFine-controlled updates

Pour les développeurs qui souhaitent bénéficier d’une expérience entièrement personnalisée, des API supplémentaires sont fournies, qui permettent de mieux contrôler le processus de mise à jour.For developers who want to have a completely customized experience, additional APIs are provided which enable more control over the update process. La plateforme vous permet d’effectuer les opérations suivantes :The platform enables you to do the following:

  • Obtient des événements de progression sur un téléchargement de package individuel ou sur la mise à jour entière.Get progress events on an individual package download or on the whole update.
  • Appliquez des mises à jour à la commodité de l’utilisateur et de l’application plutôt qu’à l’un ou l’autre.Apply updates at the user's and app's convenience rather than one or the other.

Les développeurs sont en mesure de télécharger les mises à jour en arrière-plan (pendant que l’application est en cours d’utilisation), puis demandent à l’utilisateur d’installer les mises à jour, s’ils refusent, vous pouvez simplement désactiver les fonctionnalités affectées par la mise à jour si vous le souhaitez.Developers are able to download updates in the background (while app is in use) then request the user install updates, if they decline, you can simply disable capabilities affected by the update if you choose.

Télécharger les mises à jourDownload updates

private async void DownloadUpdatesAsync()
{
    StoreContext updateManager = StoreContext.GetDefault();
    IReadOnlyList<StorePackageUpdate> updates = await updateManager.GetAppAndOptionalStorePackageUpdatesAsync();

    if (updates.Count > 0)
    {
        IAsyncOperationWithProgress<StorePackageUpdateResult, StorePackageUpdateStatus> downloadOperation =
            updateManager.RequestDownloadStorePackageUpdatesAsync(updates);

        downloadOperation.Progress = async (asyncInfo, progress) =>
        {
            // Show progress UI
        };

        StorePackageUpdateResult result = await downloadOperation.AsTask();
        if (result.OverallState == StorePackageUpdateState.Completed)
        {
            // Update was downloaded, add logic to request install
        }
    }
}

Installer les mises à jourInstall updates

private async void InstallUpdatesAsync()
{
    StoreContext updateManager = StoreContext.GetDefault();
    IReadOnlyList<StorePackageUpdate> updates = await updateManager.GetAppAndOptionalStorePackageUpdatesAsync();    

    // Save app state here

    IAsyncOperationWithProgress<StorePackageUpdateResult, StorePackageUpdateStatus> installOperation =
        updateManager.RequestDownloadAndInstallStorePackageUpdatesAsync(updates);

    StorePackageUpdateResult result = await installOperation.AsTask();

    // Under normal circumstances, app will terminate here

    // Handle error cases here using StorePackageUpdateResult from above
}

Rendre des mises à jour obligatoiresMaking updates mandatory

Dans certains cas, il peut être souhaitable de disposer d’une mise à jour qui doit être installée sur l’appareil d’un utilisateur, ce qui la rend véritablement obligatoire (par exemple, un correctif critique pour une application qui ne peut pas attendre).In some cases, it might actually be desirable to have an update that must be installed to a user's device - making it truly mandatory (e.g. a critical fix to an app that can't wait). Dans ce cas, il existe des mesures supplémentaires que vous pouvez prendre pour rendre la mise à jour obligatoire.In these cases, there are additional measures that you can take to make the update mandatory.

  1. Implémentez la logique de mise à jour obligatoire dans le code de votre application (doit être effectuée avant la mise à jour obligatoire).Implement the mandatory update logic in your app code (would need to be done before mandatory update itself).
  2. Pendant la soumission au centre de développement, assurez-vous que la case rendre cette mise à jour obligatoire est cochée.During submission to the Dev Center, ensure the Make this update mandatory box is selected.

Implémentation du code de l’applicationImplementing app code

Pour tirer pleinement parti des mises à jour obligatoires, vous devez apporter quelques modifications mineures au code ci-dessus.In order to take full advantage of mandatory updates, you'll need to make some slight modifications to the code above. Vous devez utiliser l' objet StorePackageUpdate pour déterminer si la mise à jour est obligatoire.You'll need to use the StorePackageUpdate object to determine if the update is mandatory.

 private async bool CheckForMandatoryUpdates()
{
    StoreContext updateManager = StoreContext.GetDefault();
    IReadOnlyList<StorePackageUpdate> updates = await updateManager.GetAppAndOptionalStorePackageUpdatesAsync();

    if (updates.Count > 0)
    {
        foreach (StorePackageUpdate u in updates)
        {
            if (u.Mandatory)
                return true;
        }
    }
    return false;
}

Vous devez ensuite créer une boîte de dialogue d’application personnalisée pour informer l’utilisateur qu’une mise à jour est obligatoire et qu’elle doit l’installer pour continuer à utiliser pleinement l’application.Then you'll need to create a custom in app dialog to inform the user that there is a mandatory update and that they must install it to continue full use of the app. Si l’utilisateur refuse la mise à jour, l’application peut soit dégrader les fonctionnalités (par exemple, empêcher l’accès en ligne), soit terminer complètement (par exemple, les jeux en ligne uniquement).If the user declines the update, the app could either degrade functionality (for example, prevent online access) or terminate completely (for example, online-only games).

Espace partenairesPartner Center

Pour vous assurer que le StorePackageUpdate affiche la valeur true pour une mise à jour obligatoire, vous devez marquer la mise à jour comme étant obligatoire dans l’espace partenaires dans la page packages .To ensure the StorePackageUpdate shows true for a mandatory update, you will need to mark the update as mandatory in the Partner Center in the Packages page.

Voici quelques points à noter :A couple of things to note:

  • Si un appareil revient en ligne après qu’une mise à jour obligatoire a été remplacée par une autre mise à jour non obligatoire, la mise à jour non obligatoire s’affiche toujours sur l’appareil comme obligatoire, étant donné que la mise à jour n’est pas obligatoire.If a device comes back online after a mandatory update has been superseded with another non-mandatory update, the non-mandatory update will still show up on the device as mandatory given the missed update before it was mandatory.
  • Les mises à jour contrôlées par le développeur et les mises à jour obligatoires sont actuellement limitées au magasin.Developer-controlled updates and mandatory updates are currently limited to the Store.