Obter informações do produto para aplicativos e complementos

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

Para obter um app de exemplo completo, consulte o exemplo da Store.

Observação

O namespace Windows.Services.Store foi introduzido no Windows 10, versão 1607 e pode ser usada somente em projetos para Windows 10 Anniversary Edition (10.0; Compilação 14393) ou uma versão posterior no Visual Studio. Se seu aplicativo for direcionado para uma versão anterior do Windows 10, use o namespace ApplicationModel em vez do 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) destinado ao Windows 10 Anniversary Edition (10.0; Build 14393) ou uma versão posterior.
  • Você criou um envio de aplicativo no Partner Center e esse aplicativo é publicado na Loja. Opcionalmente, é possível configurar o app para que ele não possa ser descoberto na Store enquanto você o testa. Para obter mais informações, consulte as diretrizes para 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 nestes exemplos pressupõe que:

  • O código seja executado no contexto de uma Página que contenha um ProgressRing denominado workingProgressRing e um TextBlock denominado textBlock. Esses objetos sejam usados para indicar que uma operação assíncrona está ocorrendo e exibir mensagens de saída, respectivamente.
  • O arquivo de código tenha 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, consulte Compras no aplicativo e avaliações.

Observação

Se você tiver um aplicativo da área de trabalho que utilize a Ponte de Desktop, talvez seja necessário adicionar outro código não mostrado nestes exemplos para configurar o objeto StoreContext. Para obter mais informações, consulte Usando a classe StoreContext em um aplicativo da área de trabalho que usa o Desktop Bridge.

Obter informações para o aplicativo atual

Para obter informações 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 de complementos com IDs da Store conhecidos que estão associados ao app atual

Para obter informações de produto da Store para complementos associados ao app atual e cujas IDs da Store você já conhece, 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 Store, você deve passar uma lista de sequências para esse método que identifiquem os tipos dos complementos. Para obter uma lista dos valores de sequência com suporte, consulte a propriedade ProductKind.

Observação

O método GetStoreProductsAsync retorna informações de produto para os complementos especificados que estão associados ao app, independentemente se os complementos estejam disponíveis para compra atualmente. Para recuperar informações de todos os complementos para o app 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 da Store associadas ao app 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 desde o app atual

Para obter informações da Store sobre os complementos atualmente disponíveis para compra desde o app 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 identifiquem os tipos de complementos que você deseja recuperar. Para obter uma lista dos valores de sequência com suporte, consulte a propriedade ProductKind.

Observação

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

O exemplo a seguir recupera informações para todos os complementos duráveis, complementos consumíveis gerenciados pela Store e complementos consumíveis gerenciados pelo desenvolvedor, disponíveis para compra desde o app 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 app atual que o usuário comprou

Para obter informações de produto da Store 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 identifiquem os tipos de complementos que você deseja recuperar. Para obter uma lista dos valores de sequência com suporte, consulte a propriedade ProductKind.

Observação

Se o aplicativo tiver muitos complementos, uma alternativa é usar o método GetUserCollectionWithPagingAsync para usar paginação e retornar os resultados dos complementos.

O exemplo a seguir recupera informações para complementos duráveis com as IDs da Loja 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...
    }
}