我有一个Android应用,用户可以购买一个应用内购买。
根据Google文档,我在启动时运行queryPurchases()
,以检查该应用程序应以免费版还是付费版启动。
这是Google的文档:
在您的代码中至少两次调用queryPurchases():
每次启动应用程序,以便您可以恢复所有购买 自应用程序上次停止以来用户所做的操作。
在您的onResume()中 方法,因为用户可以在您的应用程序位于 背景(例如,在Play商店应用中兑换促销代码)。
本地Google Play服务会缓存用户购买的商品,因此该功能即使在离线模式下也可以使用。
我已经做到了,效果很好。
但是,如果我清除了Google Play应用的缓存,或者在离线模式下等待了8-12个小时,则queryPurchases()
方法会返回错误(该方法无法获取购买信息,因为本地Google Play缓存已过期)。如果我将设备重新连接到网络,那么一切都会恢复正常。
现在,在网上寻找解决方案时,强烈建议不要在应用程序内部存储中本地存储inapp购买,以解决此问题。
我的应用程序打算离线使用,但是我不喜欢在queryPurchases()
失败的情况下将其恢复为免费版本的想法(从用户的角度来看,这很烦人)。如果queryPurchases()
失败(用户可能开始利用此行为),我也不喜欢“给怀疑带来好处”的想法,而是从付费版本开始。
目前,该应用程序仅显示一条弹出错误消息,要求将设备连接到互联网。遇到此问题(设备离线时Google Play缓存无效)的用户抱怨该应用程序不是真正的离线应用程序,因为他们看到一条弹出消息,要求他们连接到互联网,并且正确。 >
我该怎么办?
答案 0 :(得分:1)
自己本地缓存queryPurchases的结果。如果离线,则返回该结果。然后,您唯一的失败案例是有人买东西然后迅速下线,这是一个真正的极端案例(在这种情况下,他们需要连接)。