【问题标题】:CurrentAppSimulator.RequestProductPurchaseAsync purchasing simulationCurrentAppSimulator.RequestProductPurchaseAsync 购买模拟
【发布时间】:2012-09-08 06:12:03
【问题描述】:

我正在尝试为我的 Windows 应用商店应用(Metro 应用)实施应用内购买。我指的是代码示例here,但是当我触发RequestProductPurchaseAsync 方法时,什么也没有发生。

当我说什么都没有发生时,它实际上意味着什么都没有。没有返回结果(结果应该是收据,因为我为true 传递了includeReceipt)。此外,当我重新检查 ProductLicences[string].IsActive 标志时,它总是会返回 false。

我该如何正确测试呢?非常感谢!

【问题讨论】:

    标签: microsoft-metro windows-store


    【解决方案1】:

    确保应用 LicenseInformation.IsTrial 为 false,否则将无法运行。应用内产品购买要求应用未处于试用状态。在已发布的应用程序中,用户会看到一条错误消息,指出您无法在试用许可下进行应用内产品购买。模拟器在测试期间不会在应用内购买模拟对话框中显示此警告。

    您可以修改模拟的初始状态(请参阅示例了解如何操作)或在模拟运行期间调用 RequestAppPurchaseAsync(false) 以获得应用的完整许可,然后尝试购买产品。

    【讨论】:

    • 感谢您的详细解释。似乎对我有用,非常感谢!
    • 为了让它工作,我必须将 WindowsStoreProxy.xml 文件中的 IsActive 和 IsTrial 都设置为 true。如果 IsActive 为 false,则它不会工作。
    【解决方案2】:

    我们遇到并解决了类似的问题。 使用 CurrentAppSimulator 效果很好,但使用 CurrentApp 调出真正的购买 UI 却不行。

    在生产设置中 await CurrentApp.RequestProductPurchaseAsync(string,bool) 似乎永远不会返回(更具体地说,它只在用户登录后返回一次——后续调用没有返回)。

    此外,在我们尝试在我们的应用中调出购买 UI 后,其他应用使用购买 UI 时遇到了同样的问题 - UI 永远不会显示。

    问题代码如下:

        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
                        }
    

    上面的代码有点明显的问题是,调出应用内购买 UI 的请求是在模式对话框命令处理程序中发出的。请求挂起——永不返回。不太明显的部分是它还会阻止来自我们的应用程序和所有其他应用程序的所有后续请求(直到用户的会话重新启动)。

    将“try”块移出命令处理程序并确保没有模态 UI 调用与购买请求竞争后,购买工作没有问题。

    编辑:您应该重新启动(或重新登录)来测试它。购买界面一旦中断,在您重新启动或重新登录后才会显示。

    【讨论】:

    • 谢谢。根据您的回答,使用自定义模式对话框是罪魁祸首。
    【解决方案3】:

    有一个细微的差别:要能够使用CurrentAppSimulator 购买任何东西,需要在提出任何购买请求之前致电CurrentAppSimulator.RequestAppPurchaseAsync。调用返回的操作完成后,即可成功调用CurrentAppSimulator.RequestProductPurchaseAsync(除非xml中LicenseInformation元素中的IsTrial值设置为false)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-13
      • 2018-02-27
      • 2014-03-26
      • 2014-01-15
      • 2021-11-29
      • 2015-12-07
      • 1970-01-01
      • 2013-12-11
      相关资源
      最近更新 更多