.NET 8 MAUI中InAppBillingPlugin购消耗品Windows端purchase为null的解决办法
解决.NET 8 MAUI Windows平台InAppBillingPlugin购买消耗品返回null的问题
1. 检查微软商店配置与关联
- 确认应用已关联到微软商店后台,且消耗品内购项已创建并发布至测试环境(无需正式发布,但需确保状态为可测试)。
- 核对代码中使用的产品ID与商店后台配置的完全一致(Windows平台对Product ID大小写敏感)。
- 检查
Package.appxmanifest,确保已启用Internet (Client)权限——内购流程需要网络连接验证。
2. 使用正确的测试账户
- 必须使用微软商店的测试账户进行内购测试,普通微软账户无法访问未正式发布的内购项。
- 确保测试账户已添加到应用后台的「测试人员」列表,且Windows系统已切换至该测试账户。
3. 修正购买逻辑代码
Windows平台的内购流程对调用时机和异常处理有特殊要求,以下是优化后的代码示例:
var billing = CrossInAppBilling.Current; try { // 先确认与商店的连接状态 var isConnected = await billing.ConnectAsync(); if (!isConnected) { Debug.WriteLine("Failed to connect to Windows Store"); return; } // 传入正确的消耗品ID,指定ItemType为Consumable var purchase = await billing.PurchaseItemAsync("your_consumable_product_id", ItemType.Consumable); if (purchase != null) { // 消耗品必须调用Consume才能再次购买 var consumed = await billing.ConsumePurchaseAsync(purchase.PurchaseToken); if (consumed) { // 发放游戏生命等逻辑 } } else { Debug.WriteLine("Purchase returned null - likely user cancelled or product unavailable"); } } catch (InAppBillingPurchaseException ex) { // 捕获购买相关异常,比如用户取消、产品不存在、权限不足等 Debug.WriteLine($"Purchase failed: {ex.Message}, Error Code: {ex.PurchaseError}"); } catch (Exception ex) { Debug.WriteLine($"Unexpected error: {ex.Message}"); } finally { // 确保断开连接 await billing.DisconnectAsync(); }
4. 处理Windows平台特殊逻辑
- 确保购买操作在UI线程执行——Windows的内购弹窗需要绑定到UI上下文,否则可能无响应或返回null。
- 初始化
InAppBilling时,可显式指定Windows平台配置:
var options = new InAppBillingOptions { WindowsStoreOptions = new WindowsStoreInAppBillingOptions { // 可选:指定测试环境,默认已适配测试模式 } }; var billing = CrossInAppBilling.Current; await billing.ConnectAsync(options);
5. 调试与日志排查
- 在关键步骤添加日志,记录连接状态、产品ID、返回结果及异常信息,定位具体失败原因。
- 检查Windows事件查看器中的应用日志,是否有商店相关的错误提示。
内容的提问来源于stack exchange,提问作者Enrico
相关产品推荐
相关产品推荐

