Flutter中如何实现多数量应用内商品购买?
应用内购买积分(支持多数量)的实现方案
可行,但无法通过ProductDetails直接指定购买数量——因为in_app_purchase及底层的App Store/Google Play API均不支持单商品多数量购买。推荐以下两种合规方案:
方案一:创建阶梯式积分套餐(推荐)
这是最符合应用商店政策、实现成本最低的方式:
- 在App Store Connect和Google Play Console中,为不同数量的积分创建独立SKU,例如:
1_credit:1积分/$15_credits:5积分/$510_credits:10积分/$10
- 应用内提供这些套餐选项供用户选择,选中后发起对应SKU的购买请求。
代码示例
- 定义SKU列表并查询商品详情:
const List<String> creditSkuList = ['1_credit', '5_credits', '10_credits']; List<ProductDetails> _creditProducts = []; Future<void> loadCreditProducts() async { final ProductDetailsResponse response = await InAppPurchase.instance.queryProductDetails(creditSkuList.toSet()); if (response.notFoundIDs.isNotEmpty) { // 处理未找到的SKU逻辑 } _creditProducts = response.productDetails; }
- 用户选择套餐后发起购买:
void purchaseCredits(String targetSku) { final ProductDetails? selectedProduct = _creditProducts.firstWhereOrNull((p) => p.id == targetSku); if (selectedProduct == null) return; final PurchaseParam purchaseParam = PurchaseParam(productDetails: selectedProduct); // 积分属于消耗型商品,调用buyConsumable InAppPurchase.instance.buyConsumable(purchaseParam: purchaseParam); }
- 购买成功后,根据SKU给用户增加对应积分:
void handlePurchaseSuccess(PurchaseDetails purchase) { switch(purchase.productID) { case '1_credit': addUserCredits(1); break; case '5_credits': addUserCredits(5); break; case '10_credits': addUserCredits(10); break; } }
方案二:自定义数量购买(仅特殊场景考虑)
若需支持用户输入任意数量积分,需结合服务器验证,但需注意合规风险:
- 仍以1积分的SKU作为基础购买单元
- 用户输入数量N后,引导用户重复购买N次1积分商品(体验较差,不推荐)
- 或通过服务器生成对应金额的订单,但这种方式可能违反应用商店「应用内购买必须使用官方SKU」的政策,需谨慎评估。
内容的提问来源于stack exchange,提问作者porton
相关产品推荐
相关产品推荐

