Поделиться через


Получение сведений о продукте для приложений и дополнений

В этой статье показано, как использовать методы класса StoreContext в пространстве имен Windows.Services.Store для доступа к данным, связанным с Магазином, для текущего приложения или одной из надстроек.

Для полного примера приложения, см. пример магазина .

Замечание

Область имен Windows.Services.Store появилась в Windows 10 версии 1607, и ее можно использовать только в проектах, нацеленных на Windows 10 Anniversary Edition (10.0; Сборка 14393) или более поздние версии в Visual Studio. Если приложение предназначено для более ранней версии Windows 10, необходимо использовать пространство имен Windows.ApplicationModel.Store вместо пространства имен Windows.Services.Store. Дополнительные сведения см. в этой статье.

Предпосылки

В этих примерах имеются следующие предварительные требования:

  • Проект Visual Studio для приложения универсальной платформы Windows (UWP), нацеленного на Windows 10 Anniversary Edition (10.0; сборка 14393) или более поздней редакции.
  • Вы разместили заявку на приложение в Центре партнеров, и это приложение опубликовано в магазине. При необходимости можно настроить приложение, чтобы оно не было обнаружено в Магазине во время его тестирования. Дополнительные сведения см. в руководстве по тестированию .
  • Если вы хотите получить информацию о продукте для надстройки приложения, вам необходимо также создать надстройку в Центре партнеров.

Код в этих примерах предполагает:

  • Код выполняется в контексте страницы , которая содержит ProgressRing с именем workingProgressRing и TextBlock с именем textBlock. Эти объекты используются для указания, что выполняется асинхронная операция и для отображения выходных сообщений соответственно.
  • Файл кода содержит инструкцию с использованием для пространства имен Windows.Services.Store.
  • Приложение — это однопользовательское приложение, которое запускается только в контексте пользователя, запускающего приложение. Дополнительные сведения см. в разделе "Покупки в приложении" и пробные версии.

Замечание

Если у вас есть настольное приложение, использующее Desktop Bridge, может потребоваться добавить дополнительный код, не показанный в этих примерах, чтобы настроить объект StoreContext. Дополнительные сведения см. в статье Использование класса StoreContext в классическом приложении, которое использует мост для настольных компьютеров.

Получение сведений для текущего приложения

Чтобы получить сведения о продукте Store о текущем приложении, используйте метод GetStoreProductForCurrentAppAsync. Это асинхронный метод, который возвращает объект StoreProduct , который можно использовать для получения сведений, таких как цена.

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

Получите информацию о надстройках с известными идентификаторами Магазина, которые связаны с текущим приложением.

Чтобы получить сведения о продуктах Store для надстроек, связанных с текущим приложением, и для которых вы уже знаете идентификаторы магазина, используйте метод GetStoreProductsAsync. Это асинхронный метод, который возвращает коллекцию объектов StoreProduct, представляющих каждую из надстроек. Помимо идентификаторов магазина, необходимо передать список строк в этот метод, для определения типов надстроек. Список поддерживаемых строковых значений см. в свойстве ProductKind.

Замечание

Метод GetStoreProductsAsync возвращает сведения о продукте для указанных надстроек, связанных с приложением, независимо от того, доступны ли надстройки для покупки. Чтобы получить сведения обо всех надстройках для текущего приложения, которые в данный момент можно приобрести, используйте метод GetAssociatedStoreProductsAsync, как описано в следующем разделе, вместо этого.

В этом примере извлекаются сведения о устойчивых надстройках с указанными идентификаторами Магазина, связанными с текущим приложением.

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

Узнать сведения о надстройках, доступных для покупки из текущего приложения

Чтобы получить информацию о продукте в Магазине для надстроек, доступных для покупки из текущего приложения, используйте метод GetAssociatedStoreProductsAsync. Это асинхронный метод, который возвращает коллекцию объектов StoreProduct, представляющих каждую из доступных надстроек. Необходимо передать список строк этому методу, который определяет типы надстроек, которые требуется получить. Список поддерживаемых строковых значений см. в свойстве ProductKind.

Замечание

Если у приложения есть множество надстроек, доступных для покупки, можно также использовать метод GetAssociatedStoreProductsWithPagingAsync, чтобы возвращать результаты надстроек с помощью постраничного отображения.

В следующем примере извлекаются сведения обо всех долговечных надстройках, о потребляемых надстройках, управляемых Магазином, и о потребляемых надстройках, управляемых разработчиком, которые доступны для покупки из текущего приложения.

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

Получение сведений о надстройках для текущего приложения, приобретенного пользователем

Чтобы получить сведения о продукте Store для надстроек, приобретенных текущим пользователем, используйте метод GetUserCollectionAsync. Это асинхронный метод, который возвращает коллекцию объектов StoreProduct, представляющих каждую из надстроек. Необходимо передать список строк этому методу, который определяет типы надстроек, которые требуется получить. Список поддерживаемых строковых значений см. в свойстве ProductKind.

Замечание

Если у приложения много надстроек, можно также использовать метод GetUserCollectionWithPagingAsync, чтобы использовать разбиение по страницам для возврата результатов надстройки.

В следующем примере извлекается информация о постоянных надстройках с указанными идентификаторами магазина .

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