此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())
}
1条答案
按热度按时间pjngdqdw1#
我不知道改变这种方法的确切原因是什么,但我认为这可能是因为Google Play中的新订阅模式。此外,这种新方法在5.0.0版本中被弃用。
然而,由于
purchase.skus
变成了一个字符串列表,你可以在其中查找你的purchaseItem
。我认为这取决于你的购买设置。假设你的purchaseItem
也是一个String
,你可以在那里找到你的purchaseItem
:或者简单地取第一个进行比较:
当然,您应该调试它以检查
skus
列表中的确切内容,然后选择最佳的方法来修复它。