Получение сведений о продукте для приложений и надстроек
В этой статье показано, как использовать методы класса 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...
}
}