Compartir a través de


Obtener información del producto para aplicaciones y complementos

En este artículo se muestra cómo usar métodos de la clase StoreContext en el espacio de nombres Windows.Services.Store para acceder a la información relacionada con la Tienda para la aplicación actual o uno de sus complementos.

Para obtener una aplicación de ejemplo completa, consulte el ejemplo de Store.

Nota:

El espacio de nombres Windows.Services.Store se introdujo en Windows 10, versión 1607, y solo se puede usar en proyectos que tienen como destino Windows 10 Anniversary Edition (10.0; Compilación 14393) o una versión posterior en Visual Studio. Si la aplicación tiene como destino una versión anterior de Windows 10, debes usar el espacio de nombres Windows.ApplicationModel.Store en lugar del espacio de nombres Windows.Services.Store. Para obtener más información, consulte este artículo.

Prerrequisitos

Estos ejemplos tienen los siguientes requisitos previos:

  • Un proyecto de Visual Studio para una aplicación para la Plataforma Universal de Windows (UWP) que tiene como objetivo la Edición de Aniversario de Windows 10 (10.0; Compilación 14393) o una versión posterior.
  • Has creado un envío de aplicación en el Centro de Partners y esta aplicación está publicada en la Microsoft Store. Opcionalmente, puedes configurar la aplicación para que no se pueda detectar en la Tienda mientras la pruebas. Para obtener más información, consulte nuestra guía de pruebas de .
  • Si quiere obtener información del producto para un complemento para la aplicación, también debe crear el complemento en el Centro de partners.

En el código de estos ejemplos se supone:

  • El código se ejecuta en el contexto de una Page que contiene un ProgressRing denominado workingProgressRing y un TextBlock denominado textBlock. Estos objetos se usan para indicar que se está produciendo una operación asincrónica y mostrar mensajes de salida, respectivamente.
  • El archivo de código tiene una instrucción mediante para el espacio de nombres Windows.Services.Store.
  • La aplicación es una aplicación de usuario único que solo se ejecuta en el contexto del usuario que inició la aplicación. Para obtener más información, consulte compras dentro de la aplicación y versiones de prueba.

Nota:

Si tienes una aplicación de escritorio que usa el Puente de escritorio, es posible que tengas que agregar código adicional que no se muestra en estos ejemplos para configurar el objeto StoreContext . Para obtener más información, consulta "Cómo utilizar la clase StoreContext en una aplicación de escritorio que utiliza el Desktop Bridge".

Obtener información para la aplicación actual

Para obtener información del producto de la Tienda sobre la aplicación actual, usa el método GetStoreProductForCurrentAppAsync. Este es un método asincrónico que devuelve un objeto StoreProduct que puedes usar para obtener información como el precio.

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

Obtener información para complementos con identificadores conocidos de la Tienda que están asociados a la aplicación actual

Para obtener información de productos de la Tienda para los complementos asociados con la aplicación actual y para los cuales ya conoces los identificadores de Store, utiliza el método GetStoreProductsAsync. Se trata de un método asincrónico que devuelve una colección de objetos StoreProduct que representan cada uno de los complementos. Además de los identificadores de la Tienda, debes pasar una lista de cadenas a este método que identifiquen los tipos de los complementos. Para obtener una lista de los valores de cadena admitidos, consulte la propiedad ProductKind .

Nota:

El método GetStoreProductsAsync devuelve información del producto para los complementos especificados asociados a la aplicación, independientemente de si los complementos están disponibles actualmente para su compra. Para recuperar información de todos los complementos de la aplicación actual que se pueden comprar actualmente, use el método GetAssociatedStoreProductsAsync como se describe en la sección siguiente.

Este ejemplo recupera información de complementos duraderos con los identificadores de la Tienda especificados que están asociados con la aplicación actual.

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

Obtener información sobre los complementos que están disponibles para su compra desde la aplicación actual

Para obtener información de producto de la Tienda para los complementos que están disponibles actualmente para comprar en la aplicación actual, usa el método GetAssociatedStoreProductsAsync. Este es un método asincrónico que devuelve una colección de objetos StoreProduct que representan cada uno de los complementos disponibles. Debe pasar una lista de cadenas a este método que identifique los tipos de complementos que desea recuperar. Para obtener una lista de los valores de cadena admitidos, consulte la propiedad ProductKind .

Nota:

Si la aplicación tiene muchos complementos disponibles para su compra, también puede usar el método GetAssociatedStoreProductsWithPagingAsync para emplear la paginación y devolver los resultados de los complementos.

En el ejemplo siguiente se recupera información de todos los complementos duraderos, complementos consumibles administrados por la Tienda y complementos consumibles administrados por el desarrollador que están disponibles para su compra desde la aplicación actual.

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

Obtener información sobre extensiones para la aplicación actual que el usuario ha comprado

Para obtener información del producto de la Tienda para extensiones que ha comprado el usuario actual, usa el método GetUserCollectionAsync. Se trata de un método asincrónico que devuelve una colección de objetos StoreProduct que representan cada uno de los complementos. Debe pasar una lista de cadenas a este método que identifique los tipos de complementos que desea recuperar. Para obtener una lista de los valores de cadena admitidos, consulte la propiedad ProductKind .

Nota:

Si la aplicación tiene muchos complementos, puede usar alternativamente el método GetUserCollectionWithPagingAsync para devolver los resultados de los complementos mediante paginación.

En el ejemplo siguiente se recupera información de complementos duraderos con los identificadores especificados de la Tienda .

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