Compartir a través de


Obtener información de 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, debe usar el espacio de nombres Windows.ApplicationModel.Store en lugar del espacio de nombres Windows.Services.Store. Para obtener más información, consulta este artículo.

Requisitos previos

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 destinoWindows 10 Anniversary Edition (10.0; Compilación 14393) o una versión posterior.
  • Ha creado un envío de aplicación en el Centro de partners y esta aplicación se publica en la Store. Opcionalmente, puede configurar la aplicación para que no se pueda encontrar en la Store mientras la prueba. Para obtener más información, consulte nuestra guía para prueba.
  • Si quiere obtener información de 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 Página que contiene un objeto ProgressRing denominado workingProgressRing y un objeto 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 using para el espacio de nombres Windows.Services.Store.
  • La aplicación es una de usuario único que se ejecuta solamente en el contexto del usuario que la inició. Para obtener más información, consulte Pruebas y compras desde la aplicación.

Nota:

Si tienes una aplicación de escritorio que usa el Puente de dispositivo de escritorio, es posible que tengas que agregar código adicional no mostrado en estos ejemplos para configurar el objeto StoreContext. Para obtener más información, consulte Usar la clase StoreContext en una aplicación de escritorio que usa el Puente de dispositivo de escritorio.

Obtener información para la aplicación actual

Para obtener información del producto de store 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 del producto de la Tienda para complementos asociados a la aplicación actual y para los que ya conoces los identificadores de la Tienda, usa 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 en su lugar.

En este ejemplo se recupera información de complementos duraderos con los identificadores de la Tienda especificados asociados a 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 del producto de la Tienda para los complementos que están disponibles actualmente para su compra desde 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 usar la paginación para devolver los resultados del complemento.

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 para complementos para la aplicación actual que el usuario ha comprado

Para obtener información del producto store para complementos 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, también puede usar el método GetUserCollectionWithPagingAsync para usar la paginación para devolver los resultados del complemento.

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

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