实施Google Play计费库版本2

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

Google发布了一个全新的版本来处理Android中的付款,但是搜索了很长时间后,我找不到成功实现该功能的人的单个示例或教程。

该文档非常简短,仅提供了必要代码的一部分:https://developer.android.com/google/play/billing/billing_library_overview

提供的唯一样品是用Kotlin制成的:https://github.com/android/play-billing-samples

似乎他们忘记了Java开发人员...

有人知道在线教程或成功实施了该教程吗?我当前的代码尚无法发布。

android in-app-billing android-billing
1个回答
0
投票
class GoPremiumActivity : AppCompatActivity(), PurchasesUpdatedListener, AcknowledgePurchaseResponseListener { private lateinit var billingClient: BillingClient private val skuList = listOf(CStr.PRODUCT_ADS_REMOVE.value) private var skuDetails: SkuDetails? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.go_premium) supportActionBar?.setDisplayHomeAsUpEnabled(true) setupBillingClient() purchaseButton.setOnClickListener { val flowParams = BillingFlowParams.newBuilder() .setSkuDetails(skuDetails) .build() billingClient.launchBillingFlow(this@GoPremiumActivity, flowParams) } } private fun setupBillingClient() { billingClient = BillingClient .newBuilder(this@GoPremiumActivity) .enablePendingPurchases() .setListener(this@GoPremiumActivity) .build() billingClient.startConnection(object : BillingClientStateListener { override fun onBillingSetupFinished(billingResult: BillingResult?) { if (billingResult?.responseCode == BillingClient.BillingResponseCode.OK) { getAvailableProducts() val purchasesResult = billingClient.queryPurchases(BillingClient.SkuType.INAPP) val purchase = purchasesResult.purchasesList.firstOrNull { it.sku == CStr.PRODUCT_ADS_REMOVE.value} if (purchase?.isAcknowledged == true) { Global.prefs.adsRemovalPurchased = true finish() } } else { showGeneralError() } } override fun onBillingServiceDisconnected() { /*DO NOTHING*/ } }) } fun getAvailableProducts() { if (billingClient.isReady) { val params = SkuDetailsParams .newBuilder() .setSkusList(skuList) .setType(BillingClient.SkuType.INAPP) .build() billingClient.querySkuDetailsAsync(params) { responseCode, skuDetailsList -> if (responseCode.responseCode == BillingClient.BillingResponseCode.OK) { skuDetails = skuDetailsList.firstOrNull() skuDetails?.let { purchaseButton.text = String.format("BUY %s", it.price) showSuccessOrError(success = true) } ?: run { showSuccessOrError(success = false) } } else { showGeneralError() } } } else { showGeneralError() } } override fun onPurchasesUpdated(billingResult: BillingResult?, purchases: MutableList<Purchase>?) { if (billingResult?.responseCode == BillingClient.BillingResponseCode.OK && purchases != null) { val purchase = purchases.firstOrNull { it.sku == CStr.PRODUCT_ADS_REMOVE.value} if (purchase?.purchaseState == Purchase.PurchaseState.PURCHASED) { if (!purchase.isAcknowledged) { val acknowledgePurchaseParams = AcknowledgePurchaseParams.newBuilder() .setPurchaseToken(purchase.purchaseToken) .build() billingClient.acknowledgePurchase(acknowledgePurchaseParams, this@GoPremiumActivity) } } } else if (billingResult?.responseCode == BillingClient.BillingResponseCode.ITEM_ALREADY_OWNED) { Global.prefs.adsRemovalPurchased = true finish() } else { Global.prefs.adsRemovalPurchased = false showSuccessOrError(success = true) } } override fun onAcknowledgePurchaseResponse(billingResult: BillingResult?) { if (billingResult?.responseCode == BillingClient.BillingResponseCode.OK) { showThankYouDialog(this@GoPremiumActivity) Global.prefs.adsRemovalPurchased = true } } private fun showSuccessOrError(success: Boolean) { purchaseProgressBar.visibility = View.GONE if (success) { purchaseButton.visibility = View.VISIBLE } else { purchaseUnavailable.visibility = View.VISIBLE } } private fun showGeneralError() { purchaseProgressBar.visibility = View.GONE purchaseUnavailable.visibility = View.VISIBLE } companion object { fun newIntent(context: Context): Intent { return Intent(context, GoPremiumActivity::class.java) } } override fun onSupportNavigateUp(): Boolean { finish() return true } public override fun onDestroy() { super.onDestroy() } override fun onPause() { super.onPause() if (isFinishing) { finish() } } private fun showThankYouDialog(context: Context) { //Show dialog } }

如果您特别想要用Java的话,我可以将其删除。

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