CurrentAppSimulator.RequestProductPurchaseAsync симуляция покупки
Я пытаюсь осуществить покупку в приложении для своего приложения для Магазина Windows (приложение Metro). Я имел в виду примеры кода здесь, но когда я вызвал RequestProductPurchaseAsync
метод ничего не происходит.
Когда я говорю, что ничего не происходит, это буквально ничего не значит. Нет возвращаемых результатов (результат должен был быть квитанцией, так как я прошел в true
за includeReceipt
). Кроме того, когда я перепроверил ProductLicences[string].IsActive
флаг это всегда вернет мне ложь.
Как мне проверить это правильно? Большое спасибо!
3 ответа
Убедитесь, что приложение LicenseInformation.IsTrial имеет значение false, иначе оно не будет работать. При покупке продукта в приложении требуется, чтобы приложение не было в пробной версии. В опубликованном приложении пользователь увидит ошибку, в которой говорится, что вы не можете делать покупки в приложении по пробной лицензии. Симулятор не отображает это предупреждение в диалоговом окне симуляции покупки в приложении во время тестирования.
Вы можете либо изменить начальное состояние симуляции (см. Примеры, как это сделать), либо вызвать RequestAppPurchaseAsync (false) во время прогона симуляции, чтобы получить полную лицензию для приложения, а затем попробовать приобрести продукт.
Мы испытали и решили аналогичную проблему. Использование CurrentAppSimulator работало нормально, но отображение реального пользовательского интерфейса покупки с CurrentApp - нет.
В производственном параметре await CurrentApp.RequestProductPurchaseAsync(string,bool), по- видимому, никогда не возвращается (более конкретно, он возвращается только один раз после входа пользователя в систему - последующие вызовы не возвращаются).
Кроме того, после того, как мы попытались вызвать пользовательский интерфейс покупки в нашем приложении, у других приложений, использующих пользовательский интерфейс покупки, возникла та же проблема - пользовательский интерфейс никогда не отображается.
Вот код проблемы:
private async void CommandInvokedHandler(IUICommand command)
{
switch (command.Label)
{
case "Continue":
licenseInformation = CurrentApp.LicenseInformation;
if (!licenseInformation.ProductLicenses[Notes.ProductName].IsActive)
{
try
{
await CurrentApp.RequestProductPurchaseAsync(Notes.ProductName, false);
// The code never steps over
}
Несколько очевидная проблема с приведенным выше кодом заключается в том, что запрос на запуск пользовательского интерфейса покупки в приложении выполняется из модального обработчика команд диалогового окна. Запрос зависает - никогда не возвращается. Неочевидная часть заключается в том, что он также блокирует все последующие запросы от нашего приложения и любого другого приложения (до тех пор, пока сеанс пользователя не будет перезапущен).
После удаления блока try из обработчика команд и обеспечения отсутствия модальных вызовов пользовательского интерфейса, оспаривающих запрос на покупку, покупка прошла без проблем.
РЕДАКТИРОВАТЬ: Вы должны перезагрузить (или повторно войти), чтобы проверить это. После того, как пользовательский интерфейс покупки прервется, он не будет отображаться до тех пор, пока вы не перезапустите или повторно войдите в систему.
Здесь есть небольшой нюанс: возможность покупать что-либо, используя CurrentAppSimulator
нужно позвонить CurrentAppSimulator.RequestAppPurchaseAsync
прежде чем делать какие-либо запросы на покупку. После завершения операции, возвращенной вызовом, вы можете успешно позвонить CurrentAppSimulator.RequestProductPurchaseAsync
(если значение IsTrial в элементе LicenseInformation не установлено равным false в xml).