Я реализую Биллинг 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)
}
}
}
Спасибо всовет!