Obter informações do produto para aplicativos e complementos

Este artigo demonstra como usar métodos da classe StoreContext no namespace Windows.Services.Store para acessar informações relacionadas à Loja para o aplicativo atual ou um de seus complementos.

Para obter um aplicativo de exemplo completo, confira o Exemplo da Store.

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

Esses exemplos têm 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 obter informações do produto para um complemento para o aplicativo, também deverá criar o complemento no Partner Center.

O código nesses exemplos 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 da área de trabalho que usa a Ponte de Desktop, talvez seja necessário adicionar código adicional não mostrado nesses exemplos 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.

Obter informações para o aplicativo atual

Para obter informações do produto da Loja sobre o aplicativo atual, use o método GetStoreProductForCurrentAppAsync . Esse é um método assíncrono que retorna um objeto StoreProduct que você pode usar para obter informações como o preço.

private StoreContext context = null;

public async void GetAppInfo()
{
    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.
    }

    // Get app store product details. Because this might take several moments,   
    // display a ProgressRing during the operation.
    workingProgressRing.IsActive = true;
    StoreProductResult queryResult = await context.GetStoreProductForCurrentAppAsync();
    workingProgressRing.IsActive = false;

    if (queryResult.Product == null)
    {
        // The Store catalog returned an unexpected result.
        textBlock.Text = "Something went wrong, and the product was not returned.";

        // Show additional error info if it is available.
        if (queryResult.ExtendedError != null)
        {
            textBlock.Text += $"\nExtendedError: {queryResult.ExtendedError.Message}";
        }

        return;
    }

    // Display the price of the app.
    textBlock.Text = $"The price of this app is: {queryResult.Product.Price.FormattedBasePrice}";
}

Obter informações para complementos com IDs de loja conhecidos associados ao aplicativo atual

Para obter informações do produto da Loja para complementos associados ao aplicativo atual e para os quais você já conhece as IDs da Loja, use o método GetStoreProductsAsync. Esse é um método assíncrono que retorna uma coleção de objetos StoreProduct que representam cada um dos complementos. Além das IDs da Loja, você deve passar uma lista de cadeias de caracteres para esse método que identificam os tipos de complementos. Para obter uma lista dos valores de cadeia de caracteres com suporte, consulte a propriedade ProductKind .

Observação

O método GetStoreProductsAsync retorna informações do produto para os complementos especificados associados ao aplicativo, independentemente de os complementos estarem disponíveis para compra no momento. Para recuperar informações de todos os complementos do aplicativo atual que podem ser comprados no momento, use o método GetAssociatedStoreProductsAsync, conforme descrito na seção a seguir.

Este exemplo recupera informações para complementos duráveis com as IDs de Loja especificadas associadas ao aplicativo atual.

private StoreContext context = null;

public async void GetProductInfo()
{
    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.
    }

    // Specify the kinds of add-ons to retrieve.
    string[] productKinds = { "Durable" };
    List<String> filterList = new List<string>(productKinds);

    // Specify the Store IDs of the products to retrieve.
    string[] storeIds = new string[] { "9NBLGGH4TNMP", "9NBLGGH4TNMN" };

    workingProgressRing.IsActive = true;
    StoreProductQueryResult queryResult =
        await context.GetStoreProductsAsync(filterList, storeIds);
    workingProgressRing.IsActive = false;

    if (queryResult.ExtendedError != null)
    {
        // The user may be offline or there might be some other server failure.
        textBlock.Text = $"ExtendedError: {queryResult.ExtendedError.Message}";
        return;
    }

    foreach (KeyValuePair<string, StoreProduct> item in queryResult.Products)
    {
        // Access the Store info for the product.
        StoreProduct product = item.Value;

        // Use members of the product object to access info for the product...
    }
}

Obter informações para complementos que estão disponíveis para compra no aplicativo atual

Para obter informações do produto da Store para os complementos que estão disponíveis no momento para compra no aplicativo atual, use o método GetAssociatedStoreProductsAsync . Esse é um método assíncrono que retorna uma coleção de objetos StoreProduct que representam cada um dos complementos disponíveis. Você deve passar uma lista de cadeias de caracteres para esse método que identificam os tipos de complementos que deseja recuperar. Para obter uma lista dos valores de cadeia de caracteres com suporte, consulte a propriedade ProductKind .

Observação

Se o aplicativo tiver muitos complementos disponíveis para compra, você poderá usar o método GetAssociatedStoreProductsWithPagingAsync para usar a paginação para retornar os resultados do complemento.

O exemplo a seguir recupera informações de todos os complementos duráveis, complementos de consumíveis gerenciados pela Loja e complementos de consumíveis gerenciados pelo desenvolvedor que estão disponíveis para compra no aplicativo atual.

private StoreContext context = null;

public async void GetAddOnInfo()
{
    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.
    }

    // Specify the kinds of add-ons to retrieve.
    string[] productKinds = { "Durable", "Consumable", "UnmanagedConsumable" };
    List<String> filterList = new List<string>(productKinds);

    workingProgressRing.IsActive = true;
    StoreProductQueryResult queryResult = await context.GetAssociatedStoreProductsAsync(filterList);
    workingProgressRing.IsActive = false;

    if (queryResult.ExtendedError != null)
    {
        // The user may be offline or there might be some other server failure.
        textBlock.Text = $"ExtendedError: {queryResult.ExtendedError.Message}";
        return;
    }

    foreach (KeyValuePair<string, StoreProduct> item in queryResult.Products)
    {
        // Access the Store product info for the add-on.
        StoreProduct product = item.Value;

        // Use members of the product object to access listing info for the add-on...
    }
}

Obter informações para complementos para o aplicativo atual que o usuário comprou

Para obter informações do produto da Loja para complementos que o usuário atual comprou, use o método GetUserCollectionAsync . Esse é um método assíncrono que retorna uma coleção de objetos StoreProduct que representam cada um dos complementos. Você deve passar uma lista de cadeias de caracteres para esse método que identificam os tipos de complementos que deseja recuperar. Para obter uma lista dos valores de cadeia de caracteres com suporte, consulte a propriedade ProductKind .

Observação

Se o aplicativo tiver muitos complementos, você poderá usar o método GetUserCollectionWithPagingAsync para usar a paginação para retornar os resultados do complemento.

O exemplo a seguir recupera informações para complementos duráveis com as IDs de Repositório especificadas.

private StoreContext context = null;

public async void GetUserCollection()
{
    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.
    }

    // Specify the kinds of add-ons to retrieve.
    string[] productKinds = { "Durable" };
    List<String> filterList = new List<string>(productKinds);

    workingProgressRing.IsActive = true;
    StoreProductQueryResult queryResult = await context.GetUserCollectionAsync(filterList);
    workingProgressRing.IsActive = false;

    if (queryResult.ExtendedError != null)
    {
        // The user may be offline or there might be some other server failure.
        textBlock.Text = $"ExtendedError: {queryResult.ExtendedError.Message}";
        return;
    }

    foreach (KeyValuePair<string, StoreProduct> item in queryResult.Products)
    {
        StoreProduct product = item.Value;

        // Use members of the product object to access info for the product...
    }
}