如何办理码购.当我将Google Play Billing Library 3升级到4时怎么办? &g



我在基于官方示例项目的应用程序中使用Google Play。

代码A是处理非消耗性产品,当我使用com.android.billingclient:billing-ktx:3.0.3启动它时效果很好。

在我将项目从Google Play Billing Library 3升级到4之后,我发现代码purchase.sku不起作用,所以我必须用purchase.skus替换它。

purchase.skus的代码可以在com.android.billingclient:billing-ktx:4.0.0中编译,但是我无法得到正确的顺序,测试购买3分钟后退款,似乎Google Play不承认购买。

当我升级Google Play Billing Library 3到4时,如何修复代码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())
}

我不确定改变这种方法的确切原因,但我认为这可能是因为Google Play的新订阅模式。此外,这个新方法在5.0.0版本中已被弃用。

然而,由于purchase.skus变成了字符串列表,您可以检查其中的purchaseItem。我认为这取决于你的购买设置。假设您的purchaseItem也是String,您可以在那里找到purchaseItem:

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

或者直接取第一个进行比较:

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

当然,你应该调试它来检查skus列表里面到底有什么,然后选择最好的方法来修复它。

最新更新