Aktualizace aplikací publikovaných ve Storu z kódu

Počínaje Windows 10 verze 1607 (build 14393) umožňuje windows 10 vývojářům zajistit silnější záruky ohledně aktualizací aplikací ze Storu. To vyžaduje několik jednoduchých rozhraní API, vytváří konzistentní a předvídatelné uživatelské prostředí a umožňuje vývojářům soustředit se na to, co dělají nejlépe, a zároveň umožnit systému Windows provádět náročné práce.

Aktualizace aplikací je možné spravovat dvěma základními způsoby. V obou případech je konečný výsledek těmito metodami stejný - aktualizace je aplikována. V jednom případě se ale můžete rozhodnout, že systém udělá celou práci, zatímco v druhém případě budete chtít mít hlubší úroveň kontroly nad uživatelským prostředím.

Jednoduché aktualizace

Především je velmi jednoduché volání rozhraní API, které systému říká, aby zkontroloval aktualizace, stáhl je a pak požádal uživatele o oprávnění k jejich instalaci. Začnete pomocí třídy StoreContext k získání objektů StorePackageUpdate , stažení a instalace.

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();
    }
}

V tomto okamžiku má uživatel dvě možnosti, ze které si může vybrat: použijte aktualizaci nyní nebo odložte aktualizaci. Jakákoli volba, která uživatel provede, se vrátí zpět prostřednictvím objektu StorePackageUpdateResult , který vývojářům umožňuje provádět další akce, jako je zavření aplikace, pokud je potřeba pokračovat nebo jednoduše zkusit znovu později.

Jemně řízené aktualizace

Pro vývojáře, kteří chtějí mít zcela přizpůsobené prostředí, jsou k dispozici další rozhraní API, která umožňují větší kontrolu nad procesem aktualizace. Platforma umožňuje provádět následující akce:

  • Získejte informace o průběhu při stahování jednotlivých balíčků nebo celé aktualizace.
  • Aktualizace nainstalujte kdykoli to vyhovuje jak uživateli, tak aplikaci, ne pouze jednomu nebo druhému.

Vývojáři si můžou stáhnout aktualizace na pozadí (zatímco se aplikace používá) a požádat uživatele o aktualizace instalace, pokud odmítne, můžete funkce ovlivněné aktualizací jednoduše zakázat, pokud zvolíte.

Stažení aktualizací

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
        }
    }
}

Instalace aktualizací

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
}

Povinné provádění aktualizací

V některých případech může být skutečně žádoucí mít aktualizaci, která se musí nainstalovat do uživatelského zařízení, aby byla opravdu povinná (např. kritická oprava aplikace, která nesnese odklad). V těchto případech existují další opatření, která můžete provést, aby byla aktualizace povinná.

  1. Implementujte v kódu aplikace povinnou logiku aktualizace (je potřeba provést před samotnou povinnou aktualizací).
  2. Během odesílání do Dev Center se ujistěte, že je zaškrtnuté políčko Nastavit tuto aktualizaci jako povinné .

Implementace kódu aplikace

Abyste mohli plně využívat povinné aktualizace, budete muset provést drobné úpravy výše uvedeného kódu. K určení, jestli je aktualizace povinná, budete muset použít objekt StorePackageUpdate .

 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;
}

Pak budete muset vytvořit vlastní dialogové okno aplikace, abyste informovali uživatele, že je povinná aktualizace a že ji musí nainstalovat, aby mohli aplikaci dál používat. Pokud uživatel aktualizaci odmítne, může aplikace buď snížit funkčnost (například zabránit online přístupu), nebo úplně ukončit (například online hry).

Partnerské centrum

Pokud chcete zajistit, aby StorePackageUpdate zobrazoval hodnotu true pro povinnou aktualizaci, budete muset tuto aktualizaci označit jako povinnou v Partnerském centru na stránce Balíčky .

Pár věcí, které je potřeba si poznamenat:

  • Pokud se zařízení vrátí zpátky do online režimu, jakmile bude povinná aktualizace nahrazena jinou nepovinnou aktualizací, bude se na zařízení stále zobrazovat jako povinná vzhledem ke zmeškané aktualizaci předtím, než byla povinná.
  • Aktualizace řízené vývojářem a povinné aktualizace jsou aktuálně omezené na Store.