Я использую приложение 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 3 до 4?
Код А
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
, а затем выбрать лучший способ исправить это.
Вероятно, вам нужно перейти с версии 3 из-за политики обновления игровых магазинов, верно? Если это так, я бы предложил перейти на v5 вместо v4. Потому что с v4 у вас снова возникнет проблема с миграцией довольно скоро (вероятно, к концу следующего года или около того). И некоторые из методов, представленных в v4, уже устарели в v5 ... Возможно, это немного больше работы, но вы пощадите усилия для принудительного перехода с v4 на v5.