Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Начиная с Windows 10 версии 1607 (сборка 14393), Windows 10 позволяет разработчикам создавать более надежные гарантии вокруг обновлений приложений из Магазина. Это требует нескольких простых интерфейсов прикладного программирования, создает согласованный и предсказуемый пользовательский интерфейс и позволяет разработчикам сосредоточиться на своих сильных сторонах, в то время как Windows выполняет трудную работу.
Существует два основных способа управления обновлениями приложений. В обоих случаях чистый результат для этих методов одинаков — применяется обновление. Однако в одном случае можно разрешить системе выполнять все действия, а в другом случае вам может потребоваться более глубокий уровень контроля над взаимодействием с пользователем.
Простые обновления
Прежде всего, это очень простой вызов 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();
}
}
На этом этапе пользователь может выбрать два варианта: применить обновление сейчас или отложить обновление. В результате выбора пользователя информация будет возвращена через объект 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 для обязательного обновления, необходимо пометить обновление как обязательное в Центре партнеров на странице "Пакеты ".
Несколько вещей, которые следует отметить:
- Если устройство возвращается в режим "в сети" после того, как обязательное обновление было заменено другим необязательным обновлением, оно по-прежнему будет отображаться на устройстве как обязательное, учитывая пропущенное обновление, прежде чем оно было обязательным.
- Управляемые разработчиком обновления и обязательные обновления в настоящее время ограничены Магазином.