我已经编写了使用 In App Purchase (WP8) 和 MarketPlace(对于 WPF 和 WP8)购买免费试用应用程序的代码。我只是想确保我的代码在提交到 Marketplace 进行最终处理之前是否完美。
这个方法我用它来验证许可证。iSettings.IsAppPurchased 是用于保存或从 IsolatedStorageSettings 中获取值的属性。如果产品是购买的,它将返回 true,否则返回 false。
internal static void CheckLicense()
{
if (iSettings.IsAppPurchased)
{
return;
}
//Check license of Marketplace
LicenseInformation licInfo = new LicenseInformation();
//It always return false from device and emulator.
if (!licInfo.IsTrial())
{
iSettings.IsAppPurchased = true;
return;
}
else
{
iSettings.IsAppPurchased = false;
}
MyStore.InitializeStore();
// Return true if target device is WP8 else False
if (MyStore.IsStoreEnabled)
{
//Overload Method
CheckLicense(MyStore.Store);
}
}
如果使用 In App Purchase 购买应用程序,这是检查许可证的重载方法。
internal static void CheckLicense(StoreBase store)
{
var productLicenses = store.LicenseInformation.ProductLicenses;
if (productLicenses != null && productLicenses.Count > 0)
{
ProductLicenseBase lic = productLicenses["In_App_Product_ID"];
if (lic.IsActive)
{
iSettings.IsAppPurchased = true;
store.ReportProductFulfillment(lic.ProductId);
}
else
{
iSettings.IsAppPurchased = false;
}
}
}
最后一个是使用应用内购买功能购买应用程序。
internal static void PurchaseIfTrial()
{
MyStore.InitializeStore();
if (!MyStore.IsStoreEnabled)
{
MarketplaceDetailTask task = new MarketplaceDetailTask();
task.ContentType = MarketplaceContentType.Applications;
task.ContentIdentifier = null;
task.Show();
}
else
{
CheckLicense();
if (!iSettings.IsAppPurchased)
{
MyStore.Store.RequestProductPurchaseAsync("In_App_Product_ID", false);
CheckLicense(MyStore.Store);
}
}
}
我在启动应用程序事件时调用方法 CheckLicense。
我已经在设备和模拟器上测试了这段代码,但 IsTrial() 方法总是返回 false。是不是因为beta版。
我从此链接获得了应用内购买代码。
如果我做错了什么,请建议我。
谢谢