gpt4 book ai didi

android - 使用 BillingClient 进行应用内计费。响应代码 = -1。服务连接断开

转载 作者:行者123 更新时间:2023-12-05 00:00:02 26 4
gpt4 key购买 nike

在我的应用程序中,进行了捐赠功能。 (在应用程序内有购买权限的应用程序在google play和下载版本中可用,此功能有效)我使用的easy库完成了它anjlab .我开始更新应用程序,并在 上同时重写它 Kotlin .多纳特由于某种原因停止了工作。我决定重做 中的代码anjlab 库到谷歌的新计费库。当我尝试购买时,我得到

responseCode = -1 (service connection is disconnected).



我尝试使用 startConnection 恢复连接(this), 试图更改 中的版本毕业 ,将新版本加载到库中 APK .旧的和新的都不起作用(如果你从 google play 下载,已经发布的那个,它可以工作)。根据 Google 的指南编写的代码。我测试在真实设备上签名的应用程序

SettingsFramgent.kt (只有圣礼代码)
package *

import android.content.Intent
import androidx.preference.PreferenceFragmentCompat
import android.os.Bundle
import android.widget.Toast
import androidx.preference.Preference

import com.starikov.datecalc.R

class SettingsFragment : PreferenceFragmentCompat(), SettingsContract.View {

private lateinit var presenter: SettingsContract.Presenter

override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.preferences, rootKey)

presenter = SettingsPresenter(activity!!)
presenter.attachView(this)

val makeDonatePref: Preference = findPreference(MAKE_DONATE_KEY)!!

makeDonatePref.setOnPreferenceClickListener { presenter.makeDonateClicked(); true }

presenter.viewIsReady()
}

override fun showToast(resId: Int) {
Toast.makeText(activity, resId, Toast.LENGTH_LONG).show()
}

override fun startActivity(intent: Intent) {
activity!!.startActivity(intent)
}

override fun onDestroy() {
super.onDestroy()
presenter.detachView()
if (activity!!.isFinishing) {
presenter.destroy()
}
}

companion object {
private const val MAKE_DONATE_KEY = "make_donate"
}
}


SettingsPresenter.kt
package *

import android.app.Activity
import android.content.ActivityNotFoundException
import android.content.Intent
import android.net.Uri
import com.android.billingclient.api.*

import com.starikov.datecalc.common.PresenterBase
import com.android.billingclient.api.BillingClient
import com.android.billingclient.api.SkuDetailsParams
import com.android.billingclient.api.BillingFlowParams
import com.starikov.datecalc.R
import java.util.*


internal class SettingsPresenter internal constructor(private val activity: Activity)
: PresenterBase<SettingsContract.View>(), SettingsContract.Presenter {
private lateinit var billingClient: BillingClient
private var skuDetailsMap: HashMap<String, SkuDetails> = HashMap()

override fun makeDonateClicked() {
initBillingProcessor()
launchBilling(DONATE_PRODUCT_ID)
}

override fun destroy() {
billingClient.endConnection()
}

override fun viewIsReady() {}

private fun initBillingProcessor() {
billingClient = BillingClient.newBuilder(activity)
.enablePendingPurchases()
.setListener {
billingResult, purchases ->
if (billingResult?.responseCode == BillingClient.BillingResponseCode.OK && purchases != null) {
//purchase done
view!!.showToast(R.string.thanks_for_donate)
}
}.build()

billingClient.startConnection(object : BillingClientStateListener {
override fun onBillingSetupFinished(billingResult: BillingResult?) {
if (billingResult?.responseCode == BillingClient.BillingResponseCode.OK) {
// **place of logs**
querySkuDetails()
}
}

override fun onBillingServiceDisconnected() {
//if wrong
}
})
}

private fun launchBilling(skuId: String) {
val billingFlowParams = BillingFlowParams.newBuilder()
.setSkuDetails(skuDetailsMap[skuId])
.build()
billingClient.launchBillingFlow(activity, billingFlowParams)
}

private fun querySkuDetails() {
val skuDetailsParamsBuilder = SkuDetailsParams.newBuilder()
val skuList = ArrayList<String>()
skuList.add(DONATE_PRODUCT_ID)
skuDetailsParamsBuilder.setSkusList(skuList).setType(BillingClient.SkuType.INAPP)
billingClient.querySkuDetailsAsync(skuDetailsParamsBuilder.build()) { billingResult, skuDetailsList ->
if (billingResult?.responseCode == BillingClient.BillingResponseCode.OK) {
for (skuDetails in skuDetailsList!!) {
skuDetailsMap[skuDetails.sku] = skuDetails
}
}
}
}

companion object {
private const val DONATE_PRODUCT_ID = "donate"
}
}


在“ 日志位置 ”中,我检查了 billingResult.responseCode = -1; debugMessage = "服务连接断开"

我不知道该怎么做。在此先感谢您的帮助

最佳答案

不确定您是否仍然遇到此问题,但我遇到了,调试显示计费客户端仍在使用我尚未在旧 com.android.vending 包中删除的一些旧 AIDL 内容。一旦我删除了所有代码并取消了我的应用程序对旧东西的支持,我就可以继续购买而不会出错。

关于android - 使用 BillingClient 进行应用内计费。响应代码 = -1。服务连接断开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56648645/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com