我正在尝试为我的 Windows 应用商店应用(Metro 应用)实施应用内购买。我在这里指的是代码示例,但是当我触发该RequestProductPurchaseAsync
方法时,没有任何反应。
当我说什么都没有发生时,它实际上意味着什么都没有。没有返回结果(结果应该是收据,因为我通过了true
for includeReceipt
)。此外,当我重新检查ProductLicences[string].IsActive
标志时,它总是会返回错误。
我该如何正确测试呢?非常感谢!
我正在尝试为我的 Windows 应用商店应用(Metro 应用)实施应用内购买。我在这里指的是代码示例,但是当我触发该RequestProductPurchaseAsync
方法时,没有任何反应。
当我说什么都没有发生时,它实际上意味着什么都没有。没有返回结果(结果应该是收据,因为我通过了true
for includeReceipt
)。此外,当我重新检查ProductLicences[string].IsActive
标志时,它总是会返回错误。
我该如何正确测试呢?非常感谢!
确保应用程序 LicenseInformation.IsTrial 为 false,否则将无法正常工作。应用内产品购买要求应用未处于试用状态。在已发布的应用程序中,用户会看到一条错误消息,指出您无法在试用许可下进行应用内产品购买。模拟器在测试期间不会在应用内购买模拟对话框中显示此警告。
您可以修改模拟的初始状态(请参阅示例以了解如何执行此操作)或在模拟运行期间调用 RequestAppPurchaseAsync(false) 以获得应用程序的完整许可证,然后尝试购买产品。
我们遇到并解决了类似的问题。使用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 调用与购买请求竞争后,购买工作没有问题。
编辑:您应该重新启动(或重新登录)来测试它。一旦购买 UI 中断,它将在您重新启动或重新登录之前不会显示。
有一个细微的差别需要遵循:在提出任何购买请求之前,CurrentAppSimulator
需要先打电话才能购买任何东西。CurrentAppSimulator.RequestAppPurchaseAsync
调用返回的操作完成后,就可以调用成功CurrentAppSimulator.RequestProductPurchaseAsync
了(除非在xml中将LicenseInformation元素中的IsTrial值设置为false)。