Habilitar compras no aplicativo e complementos no aplicativo

Este artigo demonstra como usar membros no namespace Windows.Services.Store para solicitar a compra do aplicativo atual ou um de seus complementos para o usuário. Por exemplo, se o usuário tiver atualmente uma versão de avaliação do aplicativo, você poderá usar esse processo para comprar uma licença completa para o usuário. Como alternativa, você pode usar esse processo para comprar um complemento, como um novo nível de jogo para o usuário.

Para solicitar a compra de um aplicativo ou complemento, o namespace Windows.Services.Store fornece vários métodos diferentes:

Cada método apresenta uma interface do usuário de compra padrão para o usuário e, em seguida, é concluído de forma assíncrona após a conclusão da transação. O método retorna um objeto que indica se a transação foi bem-sucedida.

Observação

O namespace Windows.Services.Store foi introduzido no Windows 10, versão 1607 e só pode ser usado em projetos direcionados ao Windows 10 Anniversary Edition (10.0; Build 14393) ou uma versão posterior no Visual Studio. Se o aplicativo for direcionado a uma versão anterior do Windows 10, você deverá usar o namespace Windows.ApplicationModel.Store em vez do namespace Windows.Services.Store. Para obter mais informações, consulte este artigo.

Pré-requisitos

Este exemplo tem os seguintes pré-requisitos:

  • Um projeto do Visual Studio para um aplicativo da Plataforma Universal do Windows (UWP) direcionado ao Windows 10 Anniversary Edition (10.0; Build 14393) ou uma versão posterior.
  • Você criou um envio de aplicativo no Partner Center e este aplicativo é publicado na Loja. Opcionalmente, você pode configurar o aplicativo para que ele não seja detectável na Store enquanto você o testa. Para obter mais informações, confira nossas diretrizes de teste.
  • Se você quiser habilitar compras no aplicativo para um complemento para o aplicativo, também deverá criar o complemento no Partner Center.

O código neste exemplo pressupõe:

  • O código é executado no contexto de uma Página que contém um ProgressRing denominado workingProgressRing e um TextBlock denominado textBlock. Esses objetos são usados para indicar que uma operação assíncrona está ocorrendo e exibir mensagens de saída, respectivamente.
  • O arquivo de código tem uma instrução using para o namespace Windows.Services.Store.
  • O app seja um app de usuário único executado somente no contexto do usuário que o iniciou. Para obter mais informações, confira Compras e avaliações no aplicativo.

Observação

Se você tiver um aplicativo de área de trabalho que use a Ponte de Desktop, talvez seja necessário adicionar mais um código não mostrado neste exemplo para configurar o objeto StoreContext. Para obter mais informações, confira Como usar a classe StoreContext em um aplicativo da área de trabalho que usa a Ponte de Desktop.

Exemplo de código

Este exemplo demonstra como usar o método RequestPurchaseAsync da classe StoreContext para comprar um aplicativo ou complemento com uma ID da Store conhecida. Para obter um aplicativo de exemplo completo, confira o Exemplo da Store.

private StoreContext context = null;

public async void PurchaseAddOn(string storeId)
{
    if (context == null)
    {
        context = StoreContext.GetDefault();
        // If your app is a desktop app that uses the Desktop Bridge, you
        // may need additional code to configure the StoreContext object.
        // For more info, see https://aka.ms/storecontext-for-desktop.
    }

    workingProgressRing.IsActive = true;
    StorePurchaseResult result = await context.RequestPurchaseAsync(storeId);
    workingProgressRing.IsActive = false;

    // Capture the error message for the operation, if any.
    string extendedError = string.Empty;
    if (result.ExtendedError != null)
    {
        extendedError = result.ExtendedError.Message;
    }

    switch (result.Status)
    {
        case StorePurchaseStatus.AlreadyPurchased:
            textBlock.Text = "The user has already purchased the product.";
            break;

        case StorePurchaseStatus.Succeeded:
            textBlock.Text = "The purchase was successful.";
            break;

        case StorePurchaseStatus.NotPurchased:
            textBlock.Text = "The purchase did not complete. " +
                "The user may have cancelled the purchase. ExtendedError: " + extendedError;
            break;

        case StorePurchaseStatus.NetworkError:
            textBlock.Text = "The purchase was unsuccessful due to a network error. " +
                "ExtendedError: " + extendedError;
            break;

        case StorePurchaseStatus.ServerError:
            textBlock.Text = "The purchase was unsuccessful due to a server error. " +
                "ExtendedError: " + extendedError;
            break;

        default:
            textBlock.Text = "The purchase was unsuccessful due to an unknown error. " +
                "ExtendedError: " + extendedError;
            break;
    }
}