播放计费库:如果应用程序无法授予权限怎么办



我正在学习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) 

如何解决此问题?有什么更好的方法吗?

我的建议,

只有在成功写入Firebase后才能使用该项目。

当应用程序重新启动,queryPurchases()返回他仍然拥有该项目时,请尝试再次在Firebase中更新

我建议在消费后将购买保存到数据库中,您可以将数据库中的数据同步到firebase。

同步后,您可以从数据库中删除数据。

如果需要,还可以触发工作管理器同步数据。(如果用户杀死应用程序会很有帮助(

这始终是不安全的,因为任何具有root访问权限的人都可以进入数据库并手动操作数据。你可以对数据库进行加密,使其更加安全,但它不会100%防傻。

如果你有一个服务器,那么购买可以在服务器端进行验证,但对你来说,我想不出任何其他解决方案。

相关内容

最新更新