首页 > 解决方案 > 如何在android中查询应用内购买的产品状态?

问题描述

我有一个问题,我尝试了很多方法,但结果并不像我预期的那样。

我想将应用内购买添加到我的应用中。假设,我有一个按钮,我可以通过直接通过应用程序购买列表中的东西来升级到从 1 到 10 的每个级别。

我已经到了购买和处理阶段,但是我无法让购买的产品知道当前购买的级别以显示当前级别信息。我尝试了多种方法,但我似乎无法弄清楚如何让购买的产品知道当前购买的级别以显示当前级别信息。

我把那些购买的产品的ID保存到了firebase实时数据库中,但是如果买家要求退款,我不知道,显示的信息会不正确。

那么,有没有办法直接从谷歌检索应用内购买历史以确定该产品的状态(用户购买、取消、确定、退款)?

我使用了计费版本 v4.0.0: implementation 'com.android.billingclient:billing:4.0.0'

产品清单:

 private val skuListProduct = listOf(
    "10000001", "10000002", "10000003", "10000004", "10000005",
    "10000006", "10000007", "10000008", "10000009", "10000010"
)

计费客户:

private var mBillingClient: BillingClient? = null    
mBillingClient =
            BillingClient.newBuilder(this).enablePendingPurchases().setListener(this).build()

OnPurchaseUpdate:

  override fun onPurchasesUpdated(result: BillingResult, purchases: MutableList<Purchase>?) {
    if (result.responseCode == BillingClient.BillingResponseCode.OK && purchases != null) {
        for (purchase in purchases) {
            Logger.d("MainActivity", "onPurchasesUpdated ------  $purchases")
            handlePurchase(purchase)
        }
    } else if (result.responseCode == BillingClient.BillingResponseCode.USER_CANCELED) {
        // Handle an error caused by a user cancelling the purchase flow.
    } else {
        // Handle any other error codes.
    }
}

private fun handlePurchase(purchase: Purchase) {
    //For non-consumables
    if (purchase.purchaseState === Purchase.PurchaseState.PURCHASED) {
        if (!purchase.isAcknowledged) {
            val param: AcknowledgePurchaseParams = AcknowledgePurchaseParams.newBuilder()
                .setPurchaseToken(purchase.purchaseToken).build()
            val acknowledgeListener =
                AcknowledgePurchaseResponseListener { billingResult ->
                    if (billingResult.responseCode == BillingClient.BillingResponseCode.OK) {
                        Logger.d("Main_handlePurchase", "Purchase Acknowledged")
                        val productID = StringBuilder(purchase.skus.toString())
                        productID.deleteCharAt(productID.length - 1)
                        productID.deleteCharAt(0)
                        FirebaseDatabaseManager(keyId).pushData(productID.toString())
                    }
                }
            mBillingClient?.acknowledgePurchase(param, acknowledgeListener)
        }
    }
}

查询历史:

 mBillingClient?.queryPurchaseHistoryAsync(BillingClient.SkuType.INAPP,
        object : PurchaseHistoryResponseListener {
            override fun onPurchaseHistoryResponse(
                result: BillingResult, historyRecord: MutableList<PurchaseHistoryRecord>?
            ) {
                if (historyRecord != null) {
                    for (record in historyRecord) {
                        Logger.d("Main_History", "Record --- $record")
                    }
                }
            }
        })

谢谢你的帮助。!

标签: androidin-app-purchasein-app-billing

解决方案


推荐阅读