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


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

В этой статье показано, как использовать методы класса 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 Эти объекты используются для указания, что выполняется асинхронная операция и для отображения выходных сообщений соответственно.
  • Файл кода содержит инструкцию using для пространства имен Windows.Services.Store .
  • Приложение — это однопользовательское приложение, которое запускается только в контексте пользователя, запускающего приложение. Дополнительные сведения см. в разделе "Покупки в приложении" и пробные версии.

Примечание.

Если у вас есть классическое приложение, использующее мост для классических приложений, может потребоваться добавить дополнительный код, не показанный в этих примерах, чтобы настроить объект 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}";
}

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

Чтобы получить сведения о продукте Магазина для надстроек, связанных с текущим приложением и для которых вы уже знаете идентификаторы Магазина, используйте метод 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...
    }
}