我正在将应用内购买IAP
添加到我的UWP
应用中,但在测试过程时,它会导致应用崩溃,但只有在购买已通过调用时显示的测试对话框:
await CurrentAppSimulator.RequestProductPurchaseAsync(
IAPs.CoreFeatures, false);
以下是我的ViewModel中包含的完整功能:
private async void UnlockFeaturesNow()
{
LicenseInformation licenseInformation = App.LicenseInformation;
if (!licenseInformation.ProductLicense[IAPs.CoreFeatures].IsActive)
{
try
{
// The customer doesn't own this feature, so show the purchase dialog.
await CurrentAppSimulator.RequestProductPurchaseAsyn(
IAPs.CoreFeatures, false);
//Check the license state to determine if the in-app purchase was successful.
if (!licenseInformation.ProductLicenses[IAPs.CoreFeatures].IsActive)
{
await this._messageBoxService.Show("features were not purchased.",
"Features");
}
else
{
await this._messageBoxService.Show("features were purchased
successfully.", "Features");
//Remove the purchase button from splitview popup menu.
SectionModel unlockFeatureSection = this.Sections.FirstOrDefault
(m => m.PageName == PageNameEnum.UnlockFeaturesPage);
if (unlockFeatureSection != null)
{
this.Sections.Remove(unlockFeatureSection);
unlockFeatureSection = null;
}
}
}
catch (Exception ex)
{
// The in-app purchase was not completed because an error occurred.
await this._messageBoxService.Show("Failed to purchase the features for
the following reason: " + ex.Message, "Features");
}
}
else
{
// The customer already owns this feature.
}
}
如果我取消了“IAP测试对话框”,我的应用永远不会崩溃。或者如果我选择除OK之外的任何其他选项。
如果我选择确定,它会告诉我我的IAP已成功购买,并且取决于我在我的应用中的位置,它按预期工作但第二次点击我的汉堡菜单,它会显示我的{{1} }菜单如果我点击我的应用程序上的任何其他地方它只是崩溃并显示以下错误:
SplitView
我查看了我的事件查看器以获取更多信息,这是我发现的:
"A debugger is attached to myApp.exe but not configured to debug
this unhandled exception. To debug this exception, detach the current
debugger."
所以看起来Combase.dll崩溃了,但是我不知道这个.dll是什么用的,为什么在选择' OK'之后它才会崩溃。而不是其他选择。
我刚刚尝试了使用Faulting application name: MyApp.exe, version: 1.0.0.0, time stamp: 0x563304b4
Faulting module name: combase.dll, version: 10.0.10586.103, time stamp: 0x56a84cbb
Exception code: 0xc000027b
Fault offset: 0x00166d7e
Faulting process ID: 0x2138
Faulting application start time: 0x01d17a76e526db18
Faulting application path: C:\MyFolder\MyApp\bin\x86\Debug\AppX\MyApp.exe
Faulting module path: C:\WINDOWS\SYSTEM32\combase.dll
Report ID: bb041374-507f-4927-84b8-75bf7cb6df63
Faulting package full name: MyApp1.1.25.0_x86__z2199h13vtehs
Faulting package-relative application ID: App
的{{1}}提供的UWP Store
示例,并提供了相同的IAP(方案2)选项我使用和何时使用我在购买' IAP测试'上选择了Microsoft
。对话框,一切都按预期工作,所以它会让你认为它与我的代码有关,但我很确定它不是因为应用程序在使用时永远不会崩溃,并且当它不会崩溃时除非我选择“确定”,否则将显示IAP测试对话框。选项。
我将继续调查明天,因为我的应用和Microsoft示例之间的一个重大区别是我使用SplitView
并且此代码位于我的OK
而不是{{1}来自XAML Page。
如果您遇到此问题,并且管理层解决了问题,您能告诉我吗?
感谢。
答案 0 :(得分:1)
我刚刚通过侥幸找到了我的问题的答案,我仍然无法相信.NET的处理能力有多差。
成功购买Listbox
后,罪魁祸首是从SplitView
菜单中的IAP
删除“购买”选项。与CurrentApp
或CurrentAppSimulator
:
//Remove the purchase button from splitview popup menu.
SectionModel unlockFeatureSection = this.Sections.FirstOrDefault
(m => m.PageName == PageNameEnum.UnlockFeaturesPage);
if (unlockFeatureSection != null)
{
this.Sections.Remove(unlockFeatureSection);
unlockFeatureSection = null;
}
没有刷新绑定到Listbox
菜单中SplitView
的项目的列表(此实例中的部分)。所以现在,当删除项目时,我确保通过mvvmlight
引发一个事件,这将在我的MainViewModel中重建我的列表。
在我的MainViewModel中,我在构造函数中有以下内容:
Messenger.Default.Register<bool>(this,
Tokens.LicenseInformationChanged, (value) =>
{
InitializeSections();
});
我现在已将我的章节从List
更改为ObservableCollection
:
private void InitializeSections()
{
this.Sections = (this.Sections
?? new ObservableCollection<SectionModel>());
this.Sections.Clear();
.... Add sections (or not!)
}
但同样,.NET
处理这个问题的可怕方式!轰炸我的应用程序抛出错误而没有抛出适当的异常只是可怕!
希望这有助于其他人。
答案 1 :(得分:0)
我认为它崩溃是因为您应该将此代码用于 licenseInformation
print id.text
print id.get_attribute("id")