在应用程序购买中,WinRT,C#

时间:2016-02-12 07:31:51

标签: c# windows-runtime windows-phone-8.1 in-app-purchase windows-8.1

我正在尝试使用C#将IaP实现到我的应用程序(WinRT平台)中,我找不到任何好的教程甚至文档(只有docum。我发现是针对Silverlight的......)。

我已经为它创建了一个测试版应用程序和一个免费的IaP。我已在本地测试它(使用CurrentAppSimulator)并且一切正常,但现在在测试版中(我发现创建beta只是如何使用真实的CurrentApp实例测试它)我甚至无法获得我的ListingInformation(它似乎是空洞的,甚至是空的 - 不能说,因为我无法调试它。)

我有这个ini方法:

    private async void ini()
        {
#if DEBUG
            StorageFolder proxyDataFolder = await Package.Current.InstalledLocation.GetFolderAsync("Data");
            StorageFile proxyFile = await proxyDataFolder.GetFileAsync("WindowsStoreProxy.xml");
            await CurrentAppSimulator.ReloadSimulatorAsync(proxyFile);

            listing = await CurrentAppSimulator.LoadListingInformationAsync();
#else
            listing = await CurrentApp.LoadListingInformationAsync();
#endif
        }

列表被声明为全局。 但后来我称之为没有任何东西出现(emply sb,emplty dialog)。

private async void btnListAllProducts_Click_1(object sender, RoutedEventArgs e)
    {
        StringBuilder sb = new StringBuilder();

        foreach (var product in listing.ProductListings)
        {
            sb.AppendLine(string.Format("{0}, {1}, {2}",
              product.Key,
              product.Value.Name,
              product.Value.FormattedPrice));
        }

        var messageDialog = new MessageDialog(sb.ToString());
        await messageDialog.ShowAsync();
    }

在一些较旧的Silverlight教程中,我发现有一些appmanifest连接(复制一些ID),但我无法找到它,所以我跳过这一步(可能是我的原因" bug&# 34。??)

无论如何,我还有其他一些问题。当我在CurrentAppSimulator中测试时,它从未储存起来,因此在重新启动我的应用程序后,我又能够再次购买该项目。我是否必须在某处保存一些许可信息?

我的购买方式如下:

async private void btnBuySuperMap_Click_1(object sender, RoutedEventArgs e)
        {
            var newMapItem =
            listing.ProductListings.FirstOrDefault(p => p.Value.ProductId == "11111" && p.Value.ProductType == ProductType.Durable);

            string receipt;
            bool licInfo;
#if DEBUG
            licInfo = CurrentAppSimulator.LicenseInformation.ProductLicenses[newMapItem.Value.ProductId].IsActive;
#else
            licInfo = CurrentApp.LicenseInformation.ProductLicenses[newMapItem.Value.ProductId].IsActive;
#endif
            try
            {
                if (licInfo)
                {
                    var messageDialog = new MessageDialog("You already own this Map!");
                    await messageDialog.ShowAsync();
                }
                else
                {
#if DEBUG
                    receipt = await CurrentAppSimulator.RequestProductPurchaseAsync(newMapItem.Value.ProductId, true);
#else
                    receipt = await CurrentApp.RequestProductPurchaseAsync(newMapItem.Value.ProductId, true);
#endif
                    txtBoughtSW.Visibility = Visibility.Visible;
                    txtBoughtSW.Text = "You own the Super Map Now!";
                }
            }
            catch (Exception ex)
            {
                var messageDialog = new MessageDialog(ex.ToString());
                messageDialog.ShowAsync();
            }
        }

最后我想说的是,它是第一个,简单的测试外观。在这项工作之后,当然,我会更好地实施它。 :)

提前感谢任何建议!

PS:有人知道一些很好的教程吗?如果没有,我可能会为其他人创建自己的(有一些帮助)。

编辑:目前它的Windows(平板电脑)版本(WinRT,Universal)。接下来是WindowsPhone实现(成功实现之后)(也许是共享类?不知道)。

1 个答案:

答案 0 :(得分:1)

已经完成了。我在开发中心编辑了该IaP项目的一些信息,现在它正在运行。提示:如果您不填写描述等所有(甚至是可选的)信息,有时它不会起作用,语言描述必须(可能)适用于您的应用支持的所有语言(即使MS说它&#39 ; s也可以选择)..