我一直在为Monogame上的Windows Phone 8实施IAP时遇到了麻烦。我一直在关注API文档:WP8 In-App Purchase API
由于Monogame/XNA更新与Silverlight应用程序不同,因此我在UI线程上运行IAP。我已经在商店中测试了一个测试版应用程序,并且可以加载Store Front UI并显示我的产品。当我试图购买时,似乎它会使购买,尝试返回到游戏,但崩溃。在此之后,进一步的应用程序加载不会显示商店。
我到处寻找解决方案,这没有运气。如果有人能帮助我,我会很感激。Monogame:Windows Phone 8 IAP(应用内购买)
这里是我的代码示例:
public static void InvokeOnUIThread(Action action)
{
#if WINDOWS8 || OPENGL
action();
#else
var dispatcher = System.Windows.Deployment.Current.Dispatcher;
if (dispatcher.CheckAccess() /*IsUIThread*/)
action();
else
dispatcher.BeginInvoke(action);
#endif
}
我用它来调用InvokeOnUIThread(Part1Purchase);
async void Part1Purchase()
{
ListingInformation li = await CurrentApp.LoadListingInformationAsync();
string pID = li.ProductListings["img.1"].ProductId;
try
{
string receipt = await Windows.ApplicationModel.Store.CurrentApp.RequestProductPurchaseAsync(pID, false);
Part2Fulfillment();
}
catch (Exception ex)
{}
}
public void Part2Fulfillment()
{
var productLicenses = Windows.ApplicationModel.Store.CurrentApp.LicenseInformation.ProductLicenses;
Part3DeliverGold(productLicenses["img.1"], 50);
}
void Part3DeliverGold(ProductLicense license, int goldCount)
{
if (license.IsConsumable && license.IsActive)
{
gold += goldCount;
CurrentApp.ReportProductFulfillment(license.ProductId);
}
}
我也尝试这种方法在UI线程上执行,但有相同的结果(崩溃的购买完成)
private void RestoreTitleDelayed(int delay)
{
ThreadPool.QueueUserWorkItem((object o) =>
{
Thread.Sleep(delay);
System.Windows.Deployment.Current.Dispatcher.BeginInvoke(() =>
{
Part1Purchase();
});
});
}
好极了!您在传递方法中的ReturnFromStoreCallback值时会传递什么内容以开始购买? – xDev
你传递一个定义为System.Action的动作或者只是一个具有string,string,bool参数的方法。购买完成后,此方法将被调用,并且第一个字符串参数将具有productID,第二个字符串将具有收据,第三个bool如果设置为true将意味着存在购买错误。 –