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
相关产品推荐
相关产品推荐

