android 当我将Google Play计费库3升级到4时,如何处理代码购买.sku?

cnh2zyt3  于 2022-12-02  发布在  Android
关注(0)|答案(1)|浏览(139)

bounty已结束。回答此问题可获得+50的声望奖励。奖励宽限期将在3小时后结束。HelloCW正在寻找来自声誉良好来源的答案

我在基于官方sample project的应用程序中使用Google Play应用程序内。
代码A用于处理非消耗性产品,当我使用com.android.billingclient:billing-ktx:3.0.3启动它时,它工作得很好。
在我将项目从Google Play计费库3升级到4后,我发现代码purchase.sku不起作用,所以我必须将其替换为purchase.skus
purchase.skus的代码可以编译到com.android.billingclient:billing-ktx:4.0.0,但我无法获得正确的订单,测试购买3分钟后退款,似乎Google Play不承认购买。
当我将Google Play计费库3升级到4时,如何修复代码A?

代码A

private fun processPurchases(purchasesResult: Set<Purchase>) {
        val validPurchases = HashSet<Purchase>(purchasesResult.size)
        purchasesResult.forEach { purchase ->
            if (purchase.purchaseState == Purchase.PurchaseState.PURCHASED) {
                if (purchase.sku.equals(purchaseItem)) {
                //if (purchase.skus.equals(purchaseItem)) {     //sku -> skus  in 4.0
                    if (isSignatureValid(purchase)) {
                        validPurchases.add(purchase)
                    }
                }
            } else if (purchase.purchaseState == Purchase.PurchaseState.PENDING) {
                Log.d(LOG_TAG, "Received a pending purchase of SKU: ${purchase.sku}")
                // handle pending purchases, e.g. confirm with users about the pending
                // purchases, prompt them to complete it, etc.
                mContext.toast(R.string.msgOrderPending)

            } else {
                mContext.toast(R.string.msgOrderError)
            }
        }

        acknowledgeNonConsumablePurchasesAsync(validPurchases.toList())
    }
pjngdqdw

pjngdqdw1#

我不知道改变这种方法的确切原因是什么,但我认为这可能是因为Google Play中的新订阅模式。此外,这种新方法在5.0.0版本中被弃用。
然而,由于purchase.skus变成了一个字符串列表,你可以在其中查找你的purchaseItem。我认为这取决于你的购买设置。假设你的purchaseItem也是一个String,你可以在那里找到你的purchaseItem

if (purchase.skus.any { it == purchaseItem })

或者简单地取第一个进行比较:

if (purchase.skus[0] == purchaseItem)

当然,您应该调试它以检查skus列表中的确切内容,然后选择最佳的方法来修复它。

相关问题