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

Другие вопросы по тегам