Kotlin Billing 2.0.3 Купить товар более одного раза. W / BillingClient: невозможно купить товар, код ответа об ошибке: 7 - PullRequest
0 голосов
/ 04 октября 2019

Я реализую Биллинг 2.0.3 с kotlin. Все работает хорошо, но если я покупаю продукт, я не могу купить его снова. У меня есть продукты, которые можно купить несколько раз.

Когда я пытался купить снова, у меня "W / BillingClient: Невозможно купить товар, Код ответа об ошибке: 7" в журнале и не могу купить его,Только говорит, что я купил его раньше, и я не могу купить его снова.

Как я могу это сделать?

Это мой код:


import android.app.Activity
import com.android.billingclient.api.*

class BillingAgent(val activity: Activity, val callBack: BillingCallback) : PurchasesUpdatedListener {

    private var billingClient = BillingClient.newBuilder(activity).setListener(this).enablePendingPurchases().build()
    private val productsSKUList = listOf("product1", "product2", "product3")
    private val productsList = arrayListOf<SkuDetails>()

    init {
        billingClient.startConnection(object : BillingClientStateListener {
            override fun onBillingServiceDisconnected() {
            }

            override fun onBillingSetupFinished(billingResult: BillingResult?) {
                if (billingResult?.responseCode == BillingClient.BillingResponseCode.OK) {
                    getAvailableProducts()
                }
            }

        })
    }


    fun onDestroy() {
        billingClient.endConnection()
    }

    override fun onPurchasesUpdated(billingResult: BillingResult?, purchases: MutableList<Purchase>?) {
        checkProduct(billingResult, purchases)

    }

    fun checkProduct(billingResult: BillingResult?, purchases: MutableList<Purchase>?) {
        purchases?.let {
            var token: String? = null
            if (billingResult?.responseCode == BillingClient.BillingResponseCode.OK && purchases.size > 0) {
                token = purchases.get(0).purchaseToken
            } else if (billingResult?.responseCode == BillingClient.BillingResponseCode.ITEM_ALREADY_OWNED) {
                val purchasesList = billingClient.queryPurchases(BillingClient.SkuType.INAPP).purchasesList
                if (purchasesList.size > 0) {
                    token = purchasesList[0].purchaseToken
                }
            }

            token?.let {
                val params = ConsumeParams
                        .newBuilder()
                        .setPurchaseToken(token)
                        .setDeveloperPayload("Token consumed")
                        .build()
                billingClient.consumeAsync(params) { billingResult, purchaseToken ->
                    if (billingResult.responseCode == BillingClient.BillingResponseCode.OK) {
                        callBack.onTokenConsumed()
                    }
                }
            }
        }
    }

    fun getAvailableProducts() {
        if (billingClient.isReady) {
            val params: SkuDetailsParams = SkuDetailsParams
                    .newBuilder()
                    .setSkusList(productsSKUList)
                    .setType(BillingClient.SkuType.INAPP)
                    .build()
            billingClient.querySkuDetailsAsync(params) { billingResult: BillingResult, skuDetailList: MutableList<SkuDetails> ->
                productsList.clear()
                productsList.addAll(skuDetailList)
            }
        }
    }

    fun purchaseView(id: Int) {
        if(productsList.size > 0) {
            val billingFlowParams = BillingFlowParams
                    .newBuilder()
                    .setSkuDetails(productsList[id])
                    .build()
            billingClient.launchBillingFlow(activity, billingFlowParams)
        }
    }
}

Спасибо всовет!

...