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

Google Play Billing Library:如何获取消费状态consumptionState?

如何在新版Google Play Billing Library中获取消耗型产品的消费状态

在新版Google Play Billing Library(5.x及以上)中,Purchase类确实移除了consumptionState属性,官方调整了消费状态的判断逻辑,你可以通过以下方式处理:

  • 核心判断逻辑:queryPurchasesAsync返回的消耗型产品即为未消费
    新版库中,Google Play会自动从queryPurchasesAsync的返回结果中移除已成功消费的消耗型产品记录。所以你通过该接口获取到的消耗型产品购买记录,默认就是未被消费的,直接对这些记录发起消费操作即可。

  • 结合Purchase状态做辅助验证
    对于返回的Purchase对象,可通过getPurchaseState()和isAcknowledged()做进一步确认:

    • 当getPurchaseState()返回Purchase.PurchaseState.PURCHASED,且isAcknowledged()为true时,说明购买已确认,但消耗型产品此时仍可能未被消费(确认和消费是两个独立步骤);
    • 若isAcknowledged()为false,需先调用acknowledgePurchaseAsync确认购买,再执行消费。
  • 查询历史购买记录(含已消费)
    如果需要查看包含已消费记录的历史快照,可调用queryPurchaseHistoryAsync接口,返回的PurchaseHistoryRecord对象通过getPurchaseState()能获取状态,但注意该接口返回的是历史数据,无法实时反映最新消费状态,仅适合辅助排查。

  • 消费操作的回调确认
    执行消费时,通过ConsumeResponseListener回调确保操作成功:

    val consumeParams = ConsumeParams.newBuilder()
        .setPurchaseToken(purchase.purchaseToken)
        .build()
    
    billingClient.consumeAsync(consumeParams) { billingResult, _ ->
        if (billingResult.responseCode == BillingClient.BillingResponseCode.OK) {
            // 消费成功,该记录后续不会出现在queryPurchasesAsync结果中
        }
    }
    

另外,针对消费操作中断的场景:即使重复对同一未消费记录调用consumeAsync,Google Play也会返回成功,所以下次启动应用时,直接处理queryPurchasesAsync返回的未消费记录即可,无需额外判断是否已发起过消费。

内容的提问来源于stack exchange,提问作者Andrei Herford

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 01:07:16