ストアで公開されたアプリをコードから更新する

Windows 10 バージョン 1607 (ビルド 14393) Windows 10 から、開発者はストアからのアプリの更新に関するより強力な保証を行える。 これを行うには、いくつかの単純な API が必要であり、一貫性のある予測可能なユーザー エクスペリエンスが作成され、開発者は Windows が多くの作業を行う一方で、最善の作業に集中できます。

アプリの更新プログラムを管理するには、2 つの基本的な方法があります。 どちらの場合も、これらのメソッドの結果は同じです。更新プログラムが適用されます。 ただし、1 つのケースでは、システムですべての作業を実行し、もう 1 つのケースでは、ユーザー エクスペリエンスのより深いレベルの制御を行う必要がある場合があります。

単純な更新

まず第一に、非常に単純な API 呼び出しです。これは、更新プログラムを確認し、ダウンロードしてから、それらをインストールするアクセス許可をユーザーに要求するシステムに指示します。 まず 、StoreContext クラスを使用して StorePackageUpdate オブジェクトを取得し、それらをダウンロードしてインストールします。

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

この時点で、ユーザーは 2 つのオプションから選択できます。更新プログラムを今すぐ適用するか、更新プログラムを延期します。 更新を続行する必要がある場合や、後でもう一度試す必要がある場合は、開発者がアプリを閉じるなどの追加のアクションを実行できるように、ユーザーが行った選択は オブジェクトを介して に返されます StorePackageUpdateResult

細かく制御された更新

完全にカスタマイズされたエクスペリエンスを望む開発者には、更新プロセスを細かに制御できる追加の API が用意されています。 プラットフォームを使用すると、次の操作を実行できます。

  • 個々のパッケージのダウンロードまたは更新プログラム全体の進行状況イベントを取得します。
  • どちらか一方ではなく、ユーザーとアプリの利便性で更新プログラムを適用します。

開発者は、バックグラウンドで更新プログラムをダウンロードし (アプリが使用されている間)、ユーザーに更新プログラムのインストールを要求できます。拒否した場合は、選択した場合は、更新プログラムの影響を受ける機能を無効にできます。

更新プログラムのダウンロード

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

の更新プログラムをインストールする

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
}

更新プログラムを必須に設定する

場合によっては、ユーザーのデバイスにインストールする必要がある更新プログラムを実際に使用することが望ましい場合があります。これは、本当に必須です (待機できないアプリに対する重大な修正など)。 このような場合は、更新プログラムを必須にするために実行できる追加のメジャーがあります。

  1. アプリ コードに必須の更新ロジックを実装します (必須の更新プログラム自体の前に行う必要があります)。
  2. アプリケーションへの送信中デベロッパー センター[この更新プログラムを必須にする] ボックスが オンにしてください。

アプリ コードの実装

必須の更新プログラムを完全に活用するには、上記のコードに若干の変更を加える必要があります。 更新が必須かどうかを判断するには 、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;
}

次に、アプリのカスタム ダイアログを作成して、必須の更新プログラムが適用され、アプリを引き続き使用するためにインストールする必要があるという通知をユーザーに表示する必要があります。 ユーザーが更新を拒否した場合、アプリは機能を低下させる (オンライン アクセスを防ぐなど) か、完全に終了する (オンライン専用ゲームなど) 可能性があります。

パートナー センター

必須の更新 プログラムに対して StorePackageUpdate が true と表示されるのを確認するには、[パッケージ] ページの パートナー センターで更新プログラムを必須としてマークする 必要 があります。

次の点に注意してください。

  • 必須の更新プログラムが別の必須ではない更新プログラムに取ってかえされた後にデバイスがオンラインに戻った場合でも、必須ではない更新プログラムは、必須ではない更新プログラムが必須である前に、必須としてデバイスに表示されます。
  • 開発者が管理する更新プログラムと必須の更新プログラムは、現在、ストアに限定されています。