Google发布了一个全新的版本来处理Android中的付款,但是搜索了很长时间后,我找不到成功实现该功能的人的单个示例或教程。
该文档非常简短,仅提供了必要代码的一部分:https://developer.android.com/google/play/billing/billing_library_overview
提供的唯一样品是用Kotlin制成的:https://github.com/android/play-billing-samples
似乎他们忘记了Java开发人员...
有人知道在线教程或成功实施了该教程吗?我当前的代码尚无法发布。
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的话,我可以将其删除。