You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中如何通过in_app_purchase一次性购买同个应用内产品的多份?

解决方案

in_app_purchase库以及底层的苹果App Store、谷歌Play商店规则,都不支持为非续期订阅(Non-Renewing Subscription)、非消耗品类商品设置单次购买数量,单次购买请求只能购买1份对应商品。

实现多份购买的两种可行方案

方案1:配置多档位商品(推荐)

  • 直接在应用商店后台创建对应份数的非续期订阅商品,比如1设备份、2设备份、3设备份,定价分别对应原价、2倍价、3倍价
  • 用户选择需要的设备数量时,直接加载对应档位的商品发起购买即可,原有购买逻辑不需要修改,只要传入对应档位的ProductDetails参数就行
  • 优势是完全符合商店规则,购买流程更顺畅,不会出现多笔购买并发导致的异常

方案2:循环发起多次购买

非续期订阅本身支持重复购买,你可以在用户选择多份后,依次发起多次购买请求,自己在服务端累计用户的购买份数:

// 示例代码,需要自行实现购买完成的等待逻辑
Future<void> purchaseItemWithCount({
  required ProductDetails productDetails,
  required int count
}) async {
  // 先恢复历史购买记录,避免重复购买超出有效期的商品
  await InAppPurchase.instance.restorePurchases();
  for(int i = 0; i < count; i++) {
    final PurchaseParam purchaseParam = PurchaseParam(productDetails: productDetails);
    await InAppPurchase.instance.buyNonConsumable(purchaseParam: purchaseParam);
    // 等待当前笔购买完成/失败后再发起下一笔,需自行监听PurchaseUpdate流实现该方法
    await _waitPurchaseFinished();
  }
}
  • 优势是不需要在后台配置多个商品,灵活调整份数规则
  • 注意需要自行处理购买中断、部分购买成功的异常场景,避免用户付了钱但没有拿到对应份数的服务

注意事项

非续期订阅的有效期、设备可用数量、购买凭证校验都需要你自己的服务端维护,应用商店不会存储和管理这类业务数据,每笔购买完成后必须把凭证传到自有服务端校验,再更新用户的服务权益。

内容的提问来源于stack exchange,提问作者Abd Alrahman Alhayek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 01:06:08