我一直在爲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將意味着存在購買錯誤。 –