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

使用in_app_purchase包时,如何获取多实例内购的购买数量?

多实例内购获取购买数量的解决方案

针对你使用的in_app_purchase: ^3.2.0和in_app_purchase_android: ^0.3.6+8版本,获取多实例内购(消耗型商品)的购买数量可按以下步骤操作:

1. 确认商品配置

先确保你的内购商品在Google Play Console中设置为消耗型商品(Consumable),这类商品支持重复购买,购买数量会被正确记录。

2. 从购买详情中提取数量

用户完成购买后,PurchaseDetails对象携带了购买数量信息,可通过以下代码获取:

// 监听购买流
final purchaseStream = InAppPurchase.instance.purchaseStream;
final subscription = purchaseStream.listen((purchaseDetailsList) {
  for (var purchase in purchaseDetailsList) {
    if (purchase.status == PurchaseStatus.purchased || purchase.status == PurchaseStatus.restored) {
      // 获取当前购买的数量,默认值设为1避免空指针
      final int buyCount = purchase.quantity ?? 1;
      // 这里可以将数量同步到本地存储或后端服务
      print("本次购买数量:$buyCount");

      // 消耗型商品必须调用此方法,否则用户无法再次购买
      if (purchase.status == PurchaseStatus.purchased) {
        InAppPurchase.instance.consumePurchase(purchase);
      }
    }
  }
});

// 页面销毁时取消订阅,避免内存泄漏
@override
void dispose() {
  subscription.cancel();
  super.dispose();
}

3. 恢复购买时统计累计数量

用户重装应用或换设备后,恢复购买时需要汇总所有历史购买的数量:

Future<void> restoreAllPurchases() async {
  bool isAvailable = await InAppPurchase.instance.isAvailable();
  if (!isAvailable) return;

  await InAppPurchase.instance.restorePurchases();
  // 后续在purchaseStream的监听中,累加所有restored状态的purchase.quantity值
}

关键注意事项

  • 若商品未设置为消耗型,quantity始终为1,且无法重复购买,这是核心前提。
  • 调用consumePurchase是允许重复购买的必要操作,消耗后Google Play才会允许用户再次下单。
  • 数量统计建议结合后端验证,防止客户端本地数据被篡改。

内容的提问来源于stack exchange,提问作者JiaYi Xu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 00:12:41