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

