【发布时间】:2022-08-09 01:40:57
【问题描述】:
我的一些用户告诉我,我的应用程序时不时会忘记购买的订阅。它可以工作 3-4 天,然后就会忘记它们。这是一个非常重要的问题,因为用户可能会怀疑欺诈。我正在使用计费库 4.0.0,并且按照 Google 的指南实施了计费逻辑。
从我收集到的情况来看,当由于某种原因计费服务连接被中断时,就会发生这种情况。 (例如 Play 商店正在更新)
我设法通过以下方式复制了这种情况
- Disable internet connection
- Clearing Play Store app data
- Fresh launch of my app.
- Call billingClient.startConnection()
onBillingSetupFinished called with responseCode BILLING_UNAVAILABLE
user sees -> The app says \"no subscription purchased\"
- Enable internet connection
- re-initialize BillingClient.
onBillingSetupFinished called with responseCode OK. billingClient.isReady() returns true.
- Call billingClient.queryPurchasesAsync() and billingClient.querySkuDetailsAsync().
onSkuDetailsResponse is called with the skuDetailsList filled with all the proper data. However:
onQueryPurchasesResponse is called with empty purchase list -> Again user sees \"no subscriptions purchased\"
重要的如果此时我打开 Play 商店,它会显示购买的订阅。但该应用程序仍然获得一个空的购买清单。
如果我在大约 10 分钟后的某个时间点继续致电 billingClient.startConnection() 或 billingClient.queryPurchasesAsync(),则一次尝试将成功并返回非空的购买列表。
是否可以告诉 Play 商店为我的应用刷新其订阅数据?有人如何优雅地处理这种情况?
-
您可以尝试将购买状态保存在本地存储中,例如
DataStore或EncryptedSharedPreferences。 -
@DarShan 是的,我考虑过这一点,如果找不到更好的解决方案,我最终可能会这样做。但这基本上是一种绕过应该正常工作但没有正常工作的东西的技巧。正确的解决方案是让计费逻辑工作,因为它应该只依赖于 BillingClient。
-
抱歉不行。我只是手动处理它。当我成功获得购买时,我将它们保存在本地并带有时间戳。当我遇到本地购买不为空但计费客户端返回空列表的情况时,我相信本地数据,只要它们不太旧。到本地数据“过期”时,计费客户端应该已经恢复到工作状态。当检测到这种情况时,我会继续重试每 1 分钟刷新一次购买最多 20 分钟
标签: android in-app-purchase in-app-billing billingclient