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
}
更新を必須にする
場合によっては、実際には、ユーザーのデバイスにインストールする必要がある更新プログラムを用意することが望ましい場合があります。これは本当に必須です (たとえば、待つことができないアプリの重要な修正)。 このような場合は、更新を必須にするために実行できる追加の対策があります。
- 必須の更新ロジックをアプリ コードに実装します (必須の更新自体の前に行う必要があります)。
- デベロッパー センターへの提出時に、[ この更新プログラムを必須 にする] ボックスが選択されていることを確認します。
アプリ コードの実装
必須の更新プログラムを最大限に活用するには、上記のコードに若干の変更を加える必要があります。 更新が必須かどうかを判断するには、 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 であることを確認するには、[ パッケージ ] ページのパートナー センターで更新プログラムを必須としてマークする必要があります。
注意すべき点がいくつかあります。
- デバイスが必須更新プログラムを別の任意更新プログラムに置き換えられた後にオンラインに戻った場合でも、その任意更新プログラムは、欠落していた必須更新プログラムの影響で、デバイス上で必須として表示されます。
- 開発者が管理する更新プログラムと必須の更新プログラムは、現在、ストアに限定されています。