Die im Store veröffentlichten Apps aus Ihrem Code aktualisieren

Ab Windows 10, Version 1607 (Build 14393), ermöglicht Windows 10 Entwicklern eine stärkere Garantie für App-Updates aus dem Store. Dies erfordert einige einfache APIs, erstellt eine konsistente und vorhersagbare Benutzererfahrung und ermöglicht Entwicklern, sich auf das beste Verhalten zu konzentrieren, während Windows die schwere Hebearbeitung ausführen kann.

Es gibt zwei grundlegende Möglichkeiten, wie App-Updates verwaltet werden können. In beiden Fällen ist das Nettoergebnis für diese Methoden identisch – das Update wird angewendet. In einem Fall können Sie jedoch festlegen, dass das System die gesamte Arbeit erledigen kann, während Sie in dem anderen Fall möglicherweise eine tiefere Kontrolle über die Benutzererfahrung haben möchten.

Einfache Updates

In erster Linie ist der sehr einfache API-Aufruf, der dem System angibt, nach Updates zu suchen, sie herunterzuladen und dann die Berechtigung des Benutzers anzufordern, sie zu installieren. Sie verwenden zunächst die StoreContext-Klasse, um StorePackageUpdate-Objekte abzurufen, sie herunterzuladen und zu installieren.

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

An diesem Punkt hat der Benutzer zwei Optionen, aus der er wählen kann: Das Update jetzt anwenden oder das Update zurückstellen. Jede Entscheidung, die der Benutzer vornimmt, wird über das StorePackageUpdateResult Objekt zurückgesendet, sodass Entwickler weitere Aktionen ausführen können, z. B. das Schließen der App, wenn das Update erforderlich ist, um fortzufahren oder einfach zu einem späteren Zeitpunkt erneut zu versuchen.

Feingesteuerte Updates

Für Entwickler, die über eine vollständig angepasste Oberfläche verfügen möchten, werden zusätzliche APIs bereitgestellt, die mehr Kontrolle über den Updateprozess ermöglichen. Mit der Plattform können Sie folgende Aktionen ausführen:

  • Rufen Sie Statusereignisse für einen einzelnen Paketdownload oder das gesamte Update ab.
  • Wenden Sie Updates auf Benutzer- und App-Komfort anstelle eines oder des anderen an.

Entwickler können Updates im Hintergrund herunterladen (während die App verwendet wird), und dann die Benutzerinstallationsupdates anfordern, wenn sie ablehnen, können Sie funktionen, die von dem Update betroffen sind, einfach deaktivieren, wenn Sie dies auswählen.

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

Aktualisierunge installieren

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
}

Obligatorische Aktualisierungen vornehmen

In einigen Fällen ist es möglicherweise wünschenswert, ein Update zu haben, das auf dem Gerät eines Benutzers installiert werden muss – was es wirklich obligatorisch macht (z. B. eine wichtige Lösung für eine App, die nicht warten kann). In diesen Fällen gibt es zusätzliche Maßnahmen, die Sie ergreifen können, um das Update obligatorisch zu machen.

  1. Implementieren Sie die obligatorische Updatelogik in Ihrem App-Code (muss vor dem obligatorischen Update selbst ausgeführt werden).
  2. Stellen Sie während der Übermittlung an das Dev Center sicher, dass das Kontrollkästchen "Dieses Update obligatorisch machen" ausgewählt ist.

Implementieren von App-Code

Um obligatorische Updates vollständig nutzen zu können, müssen Sie einige geringfügige Änderungen am obigen Code vornehmen. Sie müssen das StorePackageUpdate-Objekt verwenden, um festzustellen, ob das Update obligatorisch ist.

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

Anschließend müssen Sie ein benutzerdefiniertes Dialogfeld in der App erstellen, um den Benutzer darüber zu informieren, dass ein obligatorisches Update vorhanden ist und dass er es installieren muss, um die vollständige Verwendung der App fortzusetzen. Wenn der Benutzer das Update ablehnt, kann die App entweder die Funktionalität beeinträchtigen (z. B. den Onlinezugriff verhindern) oder vollständig beenden (z. B. nur Onlinespiele).

Partner Center

Um sicherzustellen, dass das StorePackageUpdate für ein obligatorisches Update "true" angezeigt wird, müssen Sie das Update im Partner Center auf der Seite "Pakete " als obligatorisch markieren.

Ein paar Dinge zu beachten:

  • Wenn ein Gerät wieder online ist, nachdem ein obligatorisches Update durch ein anderes nicht obligatorisches Update ersetzt wurde, wird das nicht obligatorische Update weiterhin auf dem Gerät als obligatorisch angezeigt, wenn das verpasste Update erforderlich war, bevor es obligatorisch war.
  • Entwicklergesteuerte Updates und obligatorische Updates sind derzeit auf den Store beschränkt.