在设备离线时签入应用程序购买

Check inapp purchases when device is offline

我有一个 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() 方法 returns 会出现错误(该方法无法获取购买,因为本地 Google 播放缓存已过期)。如果我将设备重新连接到网络,一切都会恢复正常。

现在,在网上寻找解决方案,似乎非常不鼓励将应用内购买本地存储在应用内部存储上来解决这个问题。

我的应用程序旨在离线使用,但我不喜欢在 queryPurchases() 失败时将其恢复为免费版本的想法(从用户的角度来看这会非常烦人)。我也不喜欢 "giving the benefit of the doubt" 的想法,如果 queryPurchases() 失败(用户可能会开始利用此行为),则从付费版本开始。

目前,该应用仅显示一条弹出式错误消息,要求将设备连接到互联网。遇到此问题的用户(他们的 Google 播放缓存在他们的设备离线时失效)抱怨该应用程序不是真正的离线应用程序,因为他们看到一条弹出消息要求他们连接到互联网,并且他们是对。

我该怎么办?

自己在本地缓存 queryPurchases 的结果。如果离线,则返回到该结果。那么你唯一的失败案例是如果有人买了东西然后很快就下线了,这是一个真正的极端案例(在这种情况下他们需要连接)。