我相信這裏的問題是您需要區分測試和生產。除非您在商店中發佈,否則您無法使用生產模式。請參閱CurrentApp和CurrentAppSimulator。
從CurrentAppSimiulator
頁:
備註
直到應用從Windows應用商店已經上市,CurrentApp對象將不會在應用程序工作。使用CurrentAppSimulator在開發應用程序時測試應用程序的許可和應用程序內產品。在測試應用程序之後,在將其提交到Windows應用商店之前,必須用CurrentApp替換CurrentAppSimulator的實例。如果使用CurrentAppSimulator,您的應用程序將無法通過認證。
這是我如何解決這個問題在我的應用程序與我的測試/生產改變的#define,那CurrentApp和CurrentAppSimulator之間切換,使我的其他代碼的眼睛更容易的代理類。
App.xaml.cs,應用程序()
//
// configure in-app purchasing
//
#if false
#warning WARNING: You are using CurrentAppProxy in TEST MODE!
CurrentAppProxy.SetTestMode(true); // true for test, false for production
#else
CurrentAppProxy.SetTestMode(false); // true for test, false for production
CurrentAppProxy.cs
public static class CurrentAppProxy
{
static bool? testmode = null;
public static async void SetTestMode(bool mode)
{
testmode = mode;
if (mode)
{
var file = await Package.Current.InstalledLocation.GetFileAsync("WindowsStoreProxy.xml");
if (file != null)
{
await CurrentAppSimulator.ReloadSimulatorAsync(file);
}
}
}
public static LicenseInformation LicenseInformation
{
get
{
if (testmode == null) throw new NotSupportedException();
else if (testmode.Value) return CurrentAppSimulator.LicenseInformation;
else return CurrentApp.LicenseInformation;
}
}
public static IAsyncOperation<IReadOnlyList<UnfulfilledConsumable>> GetUnfulfilledConsumablesAsync()
{
if (testmode == null) throw new NotSupportedException();
else if (testmode.Value) return CurrentAppSimulator.GetUnfulfilledConsumablesAsync();
else return CurrentApp.GetUnfulfilledConsumablesAsync();
}
public static IAsyncOperation<ListingInformation> LoadListingInformationAsync()
{
if (testmode == null) throw new NotSupportedException();
else if (testmode.Value) return CurrentAppSimulator.LoadListingInformationAsync();
else return CurrentApp.LoadListingInformationAsync();
}
public static IAsyncOperation<FulfillmentResult> ReportConsumableFulfillmentAsync(string productId, Guid transactionId)
{
if (testmode == null) throw new NotSupportedException();
else if (testmode.Value) return CurrentAppSimulator.ReportConsumableFulfillmentAsync(productId, transactionId);
else return CurrentApp.ReportConsumableFulfillmentAsync(productId, transactionId);
}
public static IAsyncOperation<PurchaseResults> RequestProductPurchaseAsync(string productId)
{
if (testmode == null) throw new NotSupportedException();
else if (testmode.Value) return CurrentAppSimulator.RequestProductPurchaseAsync(productId);
else return CurrentApp.RequestProductPurchaseAsync(productId);
}
}
在我的應用程序使用...
private async Task RefreshInAppOffers()
{
// in-app offers
List<KeyValuePair<string, ProductListing>> products = null;
UnfulfilledConsumable unfulfilledConsumable = null;
InAppOffers.Children.Clear();
try
{
var listinginfo = await CurrentAppProxy.LoadListingInformationAsync();
products = listinginfo.ProductListings.ToList();
products.Sort((p1, p2) => p1.Value.FormattedPrice.CompareTo(p2.Value.FormattedPrice));
CurrentAppProxy是他們在這裏的關鍵。如果它適用於模擬器,它應該適用於您的生產項目。你只需要爲所有各種條件準備好所有其他部分。一些測試在調試器中最容易實現。
我有一個消耗品顯示爲IAPs溢價和標籤是溢價和我使用的密鑰也溢價。所以可能會使用點和其他符號在某個地方有一個錯誤,誰知道 –
@JuanPabloGarciaCoello如果我只能在將應用程序提交到商店之前進行可靠的測試,那麼我相信商店會修改軟件包以包含應用程序內購買信息 – JBernardo
在我的案例中,此消息'選擇另一個項目'在IAP項目認證後的幾天內顯示。但後來,錯誤消息已經消失。 – pnp0a03