Android Kotlin - 计费订阅 - ConsumerAsync 的目的?

问题描述 投票:0回答:1

我已经遵循了有关使用 Google Billing 实施订阅的教程,但我遗漏了一些方法,但它似乎工作得很好。

这是我遗漏的方法之一:

private fun handelPurchase(purchase: Purchase){
    val consumeParams =
        ConsumeParams.newBuilder()
            .setPurchaseToken(purchase.purchaseToken)
            .build()

    val listener = ConsumeResponseListener { billingResult, s ->

        if(purchase.purchaseState == BillingClient.BillingResponseCode.OK){

        }
    }
    billingClient.consumeAsync(consumeParams, listener)
    if(purchase.purchaseState == Purchase.PurchaseState.PURCHASED){

    }
}

这样做的目的是什么?我还应该实施吗?

这是我迄今为止使用的最后一步:

private fun ackPurchase(purchase: Purchase) {
    if (!purchase.isAcknowledged) {
        val params = AcknowledgePurchaseParams.newBuilder().setPurchaseToken(purchase.purchaseToken).build()
        billingClient.acknowledgePurchase(params) { billingResult ->
            if(billingResult.responseCode == BillingClient.BillingResponseCode.OK){
                premiumActivate()
            }
        }
    }else{
        premiumActivate()
    }
}

那么我需要两者还是只需要其中之一?谷歌文档一如既往地不完整

我发现的唯一类似的其他问题是:

Android应用内计费,如何判断是调用consumeAsync还是acknowledgePurchase?

但没有得到答复

android kotlin android-billing
1个回答
0
投票

基本上有以下几类产品:

  • 订阅 – 自动续订和不可续订(预付费计划)。
  • 非消耗性产品 – 一生中只能购买一次的产品,例如终身高级访问或广告删除。
  • 消耗品 – 需要多次购买的产品,例如硬币。

consumeAsync
仅用于最后一个类别。这意味着确认+将其标记为“已使用”,以便您再次购买。否则,如果您尝试多次购买,您将遇到
ITEM_ALREADY_OWNED
错误。

在 Google Play 中,消费品和非消费品之间没有技术差异(与 App Store 等不同)。因此,是否使用或仅承认它们取决于开发者。

© www.soinside.com 2019 - 2024. All rights reserved.