Включение покупки потребляемых продуктов в приложении
Предложить потребляемые продукты в приложении — элементы, которые можно приобрести, использовать и приобрести снова— через платформу магазина для предоставления клиентам возможности покупки, которая является надежной и надежной. Это особенно полезно для таких вещей, как валюта в игре (золото, монеты и т. д.), которые можно приобрести, а затем использовать для приобретения конкретных power ups.
Внимание
В этой статье показано, как использовать члены пространства имен Windows.ApplicationModel.Store для включения потребляемых покупок в приложении. Это пространство имен больше не обновляется с новыми функциями, и мы рекомендуем вместо этого использовать пространство имен Windows.Services.Store . Пространство имен Windows.Services.Store поддерживает последние типы надстроек, такие как управляемые магазином надстройки и подписки, и предназначены для обеспечения совместимости с будущими типами продуктов и функций, поддерживаемых Центром партнеров и Магазином. Пространство имен Windows.Services.Store было введено в Windows 10 версии 1607, и его можно использовать только в проектах, предназначенных для Windows 10 Anniversary Edition (10.0; Сборка 14393) или более поздняя версия в Visual Studio. Дополнительные сведения о включении потребляемых покупок в приложении с помощью пространства имен Windows.Services.Store см . в этой статье.
Необходимые компоненты
- В этом разделе рассматриваются отчеты о покупке и выполнении потребляемых продуктов в приложении. Если вы не знакомы с продуктами в приложении, ознакомьтесь со сведениями о лицензии и правильном перечислении продуктов в приложении в Магазине.
- При первом коде и тестировании новых продуктов в приложении вместо объекта CurrentAppSimulator необходимо использовать объект CurrentAppSimulator. Таким образом вы можете проверить логику лицензии с помощью имитированных вызовов к серверу лицензирования вместо вызова динамического сервера. Для этого необходимо настроить файл с именем WindowsStoreProxy.xml в %userprofile%\AppData\local\packages\<имя>_пакета\LocalState\Microsoft\Windows Store\ApiData. Симулятор Microsoft Visual Studio создает этот файл при первом запуске приложения или также можно загрузить пользовательский в среде выполнения. Дополнительные сведения см. в разделе "Использование файла WindowsStoreProxy.xml с CurrentAppSimulator".
- В этом разделе также приводятся примеры кода, предоставляемые в примере Store. Этот пример — отличный способ получить практический опыт работы с различными вариантами монетизации, предоставляемыми для приложений универсальная платформа Windows (UWP).
Шаг 1. Создание запроса на покупку
Первоначальный запрос на покупку выполняется с помощью RequestProductPurchaseAsync , как и любые другие покупки, сделанные через Магазин. Разница в потребляемых продуктах в приложении заключается в том, что после успешной покупки клиент не может приобрести тот же продукт еще раз, пока приложение не уведомило Магазин о том, что предыдущая покупка была успешно выполнена. Это ответственность вашего приложения за выполнение приобретенных потребляемых материалов и уведомление Магазина о выполнении.
В следующем примере показан запрос на покупку продукта в приложении. Вы заметите примечания кода, указывающие, когда приложение должно выполнять локальное выполнение используемого продукта в приложении для двух разных сценариев— когда запрос выполнен успешно, и когда запрос не выполнен из-за незаполненной покупки этого же продукта.
PurchaseResults purchaseResults = await CurrentAppSimulator.RequestProductPurchaseAsync("product1");
switch (purchaseResults.Status)
{
case ProductPurchaseStatus.Succeeded:
product1TempTransactionId = purchaseResults.TransactionId;
// Grant the user their purchase here, and then pass the product ID and transaction ID to
// CurrentAppSimulator.ReportConsumableFulfillment to indicate local fulfillment to the
// Windows Store.
break;
case ProductPurchaseStatus.NotFulfilled:
product1TempTransactionId = purchaseResults.TransactionId;
// First check for unfulfilled purchases and grant any unfulfilled purchases from an
// earlier transaction. Once products are fulfilled pass the product ID and transaction ID
// to CurrentAppSimulator.ReportConsumableFulfillment to indicate local fulfillment to the
// Windows Store.
break;
}
Шаг 2. Отслеживание локального выполнения потребляемого
При предоставлении клиенту доступа к используемому продукту в приложении важно отслеживать, с каким продуктом выполняется продукт (productId), и с какой транзакцией связана транзакция (transactionId).
Внимание
Ваше приложение отвечает за точное выполнение отчетов в Магазине. Этот шаг необходим для поддержания справедливой и надежной покупки для ваших клиентов.
В следующем примере показано использование свойств PurchaseResults из вызова RequestProductPurchaseAsync на предыдущем шаге, чтобы определить приобретенный продукт для выполнения. Коллекция используется для хранения сведений о продукте в расположении, на которое позже можно ссылаться, чтобы убедиться, что локальное выполнение выполнено успешно.
private void GrantFeatureLocally(string productId, Guid transactionId)
{
if (!grantedConsumableTransactionIds.ContainsKey(productId))
{
grantedConsumableTransactionIds.Add(productId, new List<Guid>());
}
grantedConsumableTransactionIds[productId].Add(transactionId);
// Grant the user their content. You will likely increase some kind of gold/coins/some other asset count.
}
В следующем примере показано, как использовать массив из предыдущего примера для доступа к парам идентификаторов и идентификаторов продукта, которые позже используются при выполнении отчетов в Store.
Внимание
Независимо от методологии, которую ваше приложение использует для отслеживания и подтверждения выполнения, ваше приложение должно продемонстрировать должное усердие, чтобы гарантировать, что ваши клиенты не взимает плату за элементы, которые они не получили.
private Boolean IsLocallyFulfilled(string productId, Guid transactionId)
{
return grantedConsumableTransactionIds.ContainsKey(productId) &&
grantedConsumableTransactionIds[productId].Contains(transactionId);
}
Шаг 3. Создание отчетов о выполнении продукта в Магазине
После завершения локального выполнения приложение должно выполнить вызов ReportConsumableFulfillmentAsync , включающий идентификатор продукта и транзакцию покупки продукта.
Внимание
Не удалось сообщить о выполненных продуктах в приложении в Магазине, что приведет к тому, что пользователь не сможет приобрести этот продукт еще раз, пока не будет сообщено о выполнении предыдущей покупки.
FulfillmentResult result = await CurrentAppSimulator.ReportConsumableFulfillmentAsync(
"product2", product2TempTransactionId);
Шаг 4. Определение невыполненных покупок
Ваше приложение может использовать метод GetUnfulfilledConsumablesAsync , чтобы проверить наличие неподполненных потребляемых продуктов в приложении в любое время. Этот метод следует вызывать регулярно, чтобы проверить наличие незаполненных потребляемых ресурсов, которые существуют из-за непреднамеренных событий приложения, таких как прерывание сетевого подключения или завершение работы приложения.
В следующем примере показано, как getUnfulfilledConsumablesAsync можно использовать для перечисления неподполненных расходных материалов и способов итерации приложения с помощью этого списка для выполнения локального выполнения.
private async void GetUnfulfilledConsumables()
{
products = await CurrentApp.GetUnfulfilledConsumablesAsync();
foreach (UnfulfilledConsumable product in products)
{
logMessage += "\nProduct Id: " + product.ProductId + " Transaction Id: " + product.TransactionId;
// This is where you would pass the product ID and transaction ID to
// currentAppSimulator.reportConsumableFulfillment to indicate local fulfillment to the Windows Store.
}
}
См. также
- Включение покупок продуктов в приложении
- Пример Магазина (демонстрирует пробные версии и покупки в приложении)
- Windows.ApplicationModel.Store