我有一个 Android 应用,用户可以购买一项应用内购买。
根据 Google 文档,我在启动时运行 queryPurchases()
以检查应用程序应该以免费版本还是付费版本启动。
这是来自 Google 的文档:
Call queryPurchases() at least twice in your code:
Every time your app launches so that you can restore any purchases that a user has made since the app last stopped.
In your onResume() method because a user can make a purchase when your app is in the background (for example, redeeming a promo code in Play Store app).
本地 Google Play 服务缓存用户购买,因此该功能即使在离线模式下也能正常工作。
我已经做到了,效果很好。
但是,如果我清除 Google Play 应用的缓存或在离线模式下等待 8-12 小时,queryPurchases()
方法会返回错误(该方法无法获取购买,因为本地 Google Play 缓存已过期)。如果我将设备重新连接到网络,一切都会恢复正常。
现在,在网上寻找解决方案,似乎非常不鼓励将应用内购买本地存储在应用内部存储上来解决这个问题。
我的应用程序旨在离线使用,但我不喜欢在 queryPurchases()
失败时将其恢复为免费版本的想法(从用户的角度来看这会非常烦人) ).如果 queryPurchases()
失败(用户可能会开始利用此行为),我也不喜欢“给予怀疑的好处”并开始付费版本的想法。
目前,该应用程序仅显示一条弹出式错误消息,要求将设备连接到互联网。遇到此问题的用户(他们的 Google Play 缓存在他们的设备离线时失效)提示该应用程序不是真正的离线应用程序,因为他们看到一条弹出消息要求他们连接到互联网,他们是对的。
我该怎么办?
最佳答案
自己在本地缓存 queryPurchases 的结果。如果离线,则返回到该结果。那么你唯一的失败案例是如果有人买了东西然后很快就下线了,这是一个真正的极端案例(在这种情况下他们需要连接)。
关于android - 在设备离线时 checkin 应用程序购买,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54279698/