模拟Win 8应用程序C#的应用内购买

时间:2013-05-31 09:14:59

标签: c# windows-8 in-app-purchase

我一直在尝试在模拟器中的应用程序购买中实施测试,但都是徒劳的。商店示例确实有效,但是当我尝试在我的应用中实现类似行为时,它会以某种方式无法模拟我想要的。我有一个设置页面和所有备注页面,我需要将其作为高级功能。该应用程序默认是免费的。

这是我的xml文件。我已创建为示例应用程序中的那个。我需要,因为我的应用程序默认是免费的吗?

<?xml version="1.0" encoding="utf-8" ?>
<CurrentApp>
  <LicenseInformation>
    <App>
      <IsActive>true</IsActive>
      <IsTrial>false</IsTrial>
    </App>
  <Product ProductId="Settings">
    <IsActive>true</IsActive>
  </Product>
  <Product ProductId="AllNotes">
   <IsActive>false</IsActive>
  </Product>
</LicenseInformation>
</CurrentApp>

其余代码写在“设置”页面的OnNavigatedTo函数上。

protected override async void OnNavigatedTo(NavigationEventArgs e)
{
    base.OnNavigatedTo(e);

    StorageFolder proxyDataFolder = await Package.Current.InstalledLocation.GetFolderAsync("Data");
    StorageFile proxyFile = await proxyDataFolder.GetFileAsync("in-app-purchase.xml");
    LicenseInformation licenseInformation = CurrentAppSimulator.LicenseInformation;
    var productLicense = licenseInformation.ProductLicenses["Settings"];


    if (!productLicense.IsActive)
    {
        var messageDialog = new MessageDialog("You need to buy the Settings option", "Buy");
        messageDialog.Commands.Add(new UICommand("Buy", null, 0));

        var commandChosen = await messageDialog.ShowAsync();

        if ((int)commandChosen.Id == 0)
        {
            await CurrentAppSimulator.RequestProductPurchaseAsync("Settings", true);
            if (licenseInformation.ProductLicenses["Settings"].IsActive)
            {
                InitializeUI();
            }
        }
    }
}

所以即使我试图购买产品等待

CurrentAppSimulator.RequestProductPurchaseAsync("Settings", true); 

该值仍为false。 我遗失的任何东西?

2 个答案:

答案 0 :(得分:0)

我不确定这是否重要,但我将IsTrial == True放入我的xml中。但是我发现,更重要的是,为了能够成功购买任何东西,你应该首先购买应用程序本身呼叫

Windows.ApplicationModel.Store.CurrentAppSimulator.RequestAppPurchaseAsync()

您只需在会话期间执行此操作一次,购买应用程序后,即可购买任何产品。希望这会有所帮助。

答案 1 :(得分:0)

您忘记将proxyFile加载到CurrentAppSimulator中。

await CurrentAppSimulator.ReloadSimulatorAsync(proxyFile);