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:
- Se você souber a ID da Store do aplicativo ou complemento, poderá usar o método RequestPurchaseAsync da classe StoreContext.
- Se você já tiver um objeto StoreProduct, StoreSku ou StoreAvailability que represente o aplicativo ou complemento, poderá usar os métodos RequestPurchaseAsync desses objetos. Para obter exemplos de diferentes maneiras de recuperar um StoreProduct em seu código, confira Obter informações do produto para aplicativos e complementos.
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 denominadotextBlock
. 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;
}
}