与BillingClient进行应用内结算。 ResponceCode = -1。服务连接已断开]] <<

问题描述 投票:0回答:1
在我的应用程序中,进行了捐赠功能。 (该应用程序内部有购买许可的应用程序可在Google Play中使用,并且在下载的版本中,此功能有效)我使用

anjlab

中的简单库进行了此操作。我开始更新该应用程序,并同时在Kotlin上对其进行了重写。多纳特出于某种原因停止工作。我决定将anjlab库中的代码重做为Google的新计费库。当我尝试进行购买时,会得到
responseCode = -1(服务连接已断开)。

我试图使用startConnection(此)恢复连接,试图更改

gradle

中的版本,并将新版本加载到库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 =“服务连接已断开”
我不知道该怎么办。预先感谢您的帮助

在我的应用程序中,进行了捐赠功能。 (在Google Play中提供了在应用程序内具有购买许可的应用程序,并且在下载的版本中,此功能有效)I ...

android kotlin in-app-billing
1个回答
0
投票
不确定您是否仍然遇到此问题,但是我遇到了问题,调试显示出计费客户端仍在使用一些旧的AIDL东西,而这些东西我尚未从旧的com.android.vending包中删除。一旦删除所有代码并破坏了应用程序对旧内容的支持,我便可以继续购买而没有错误。
© www.soinside.com 2019 - 2024. All rights reserved.