Atualize as aplicações publicadas na Microsoft Store a partir do seu código

A partir do Windows 10, versão 1607 (build 14393), o Windows 10 permite que os desenvolvedores façam garantias mais fortes em relação às atualizações de aplicativos da Loja. Fazer isso requer algumas APIs simples, cria uma experiência de usuário consistente e previsível e permite que os desenvolvedores se concentrem no que fazem melhor, permitindo que o Windows faça o trabalho pesado.

Há duas maneiras fundamentais de gerenciar as atualizações de aplicativos. Em ambos os casos, o resultado líquido para esses métodos é o mesmo - a atualização é aplicada. No entanto, em um caso, você pode optar por deixar o sistema fazer todo o trabalho, enquanto no outro caso, você pode querer ter um nível mais profundo de controle sobre a experiência do usuário.

Atualizações simples

Em primeiro lugar e acima de tudo é a chamada de API muito simples que diz ao sistema para verificar se há atualizações, baixá-las e, em seguida, solicitar permissão do usuário para instalá-las. Você começará usando a classe StoreContext para obter objetos StorePackageUpdate , baixá-los e instalá-los.

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

Neste ponto, o usuário tem duas opções que podem escolher: aplicar a atualização agora ou adiar a atualização. Qualquer escolha que o usuário fizer será retornada através do objeto, StorePackageUpdateResult permitindo que os desenvolvedores tomem outras ações, como fechar o aplicativo se a atualização for necessária para continuar ou simplesmente tentar novamente mais tarde.

Atualizações finamente controladas

Para desenvolvedores que desejam ter uma experiência completamente personalizada, APIs adicionais são fornecidas que permitem mais controle sobre o processo de atualização. A plataforma permite que você faça o seguinte:

  • Obtenha eventos de progresso em um download de pacote individual ou em toda a atualização.
  • Aplique atualizações de acordo com a conveniência do usuário e do aplicativo, em vez de uma ou outra.

Os desenvolvedores são capazes de baixar atualizações em segundo plano (enquanto o aplicativo está em uso) e, em seguida, solicitar que o usuário instale atualizações, se eles recusarem, você pode simplesmente desativar os recursos afetados pela atualização, se desejar.

Baixar atualizações

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

Instalar atualizações

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
}

Tornar as atualizações obrigatórias

Em alguns casos, pode realmente ser desejável ter uma atualização que deve ser instalada no dispositivo de um usuário - tornando-a realmente obrigatória (por exemplo, uma correção crítica para um aplicativo que não pode esperar). Nestes casos, existem medidas adicionais que pode tomar para tornar a atualização obrigatória.

  1. Implemente a lógica de atualização obrigatória no código do seu aplicativo (precisaria ser feita antes da atualização obrigatória em si).
  2. Durante o envio para o Centro de Desenvolvimento, verifique se a caixa Tornar esta atualização obrigatória está selecionada.

Implementando o código do aplicativo

Para aproveitar ao máximo as atualizações obrigatórias, você precisará fazer algumas pequenas modificações no código acima. Você precisará usar o objeto StorePackageUpdate para determinar se a atualização é obrigatória.

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

Em seguida, você precisará criar uma caixa de diálogo personalizada no aplicativo para informar ao usuário que há uma atualização obrigatória e que ele deve instalá-la para continuar o uso completo do aplicativo. Se o utilizador recusar a atualização, a aplicação pode degradar a funcionalidade (por exemplo, impedir o acesso online) ou terminar completamente (por exemplo, jogos apenas online).

Centro de Parceiros

Para garantir que StorePackageUpdate indique "verdadeiro" para uma atualização obrigatória, necessita marcar a atualização como obrigatória no Partner Center na página de Pacotes.

Algumas coisas a observar:

  • Se um dispositivo voltar a ficar online depois de uma atualização obrigatória ter sido substituída por outra atualização não obrigatória, a atualização não obrigatória continuará a aparecer no dispositivo como obrigatória, dada a atualização perdida antes de ser obrigatória.
  • As atualizações controladas pelo programador e as atualizações obrigatórias estão atualmente limitadas à Loja.