Я изучаю биллинговую библиотеку Google Play для использования в своем приложении для Android. Я продаю монеты в своем приложении в качестве расходных материалов.
Поток такой: пользователь покупает предмет, приложение потребляет предмет, при успешном потреблении увеличивается монета, сохраненная в Firestore.
Я хочу спросить, что, если увеличение монеты, сохраненной в Firestore, не удастся? Допустим, из-за сети или других вещей. Это может вызвать проблемы у пользователей, поскольку наше приложение уже израсходовало предмет, а пользователи не получают свои монеты.
private fun handleConsumablePurchasesAsync(consumables: List<Purchase>) {
Timber.d("handleConsumablePurchasesAsync called")
consumables.forEach { purchase ->
Timber.d("handleConsumablePurchasesAsync foreach it is $purchase")
val params = ConsumeParams
.newBuilder()
.setPurchaseToken(purchase.purchaseToken)
.build()
playStoreBillingClient.consumeAsync(params) { billingResult, purchaseToken ->
when (billingResult.responseCode) {
BillingClient.BillingResponseCode.OK -> {
purchaseToken.apply { disburseConsumableEntitlements(purchase) }
}
else -> Timber.w(billingResult.debugMessage)
}
}
}
}
private fun disburseConsumableEntitlements(purchase: Purchase) {
when (purchase.sku) {
SkuKeys.COINS_5K -> addCoin(5000)
SkuKeys.COINS_10K -> addCoin(10000)
SkuKeys.COINS_100K -> addCoin(100000)
SkuKeys.COINS_500K -> addCoin(500000)
SkuKeys.COINS_1M -> addCoin(1000000)
SkuKeys.COINS_2M -> addCoin(2000000)
}
}
//what if this fails?
private fun addCoin(amount: Long) =
FirestoreRepository.incrementCoins(FirebaseAuthRepository.currentUserId, amount)
Как решить эту проблему? Есть ли лучший подход?