【问题标题】:Check inapp purchases when device is offline设备离线时签入应用购买
【发布时间】:2019-01-20 18:38:22
【问题描述】:

我有一个 Android 应用,用户可以购买一个应用内购买项目。

根据 Google 文档,我在启动时运行 queryPurchases() 以检查应用应该以免费版还是付费版启动。

这是来自 Google 的文档:

在您的代码中至少调用两次 queryPurchases():

  • 每次您的应用启动时,您都可以恢复任何购买 自应用上次停止后用户所做的。

  • 在你的 onResume() 方法,因为用户可以在您的应用处于 背景(例如,在 Play 商店应用中兑换促销代码)。

本地 Google Play 服务会缓存用户购买的内容,因此该功能即使在离线模式下也能正常工作。

我已经完成了,效果很好。

但是,如果我清除 Google Play 应用程序的缓存或在离线模式下等待 8-12 小时,queryPurchases() 方法会返回错误(该方法无法获取购买,因为本地 Google Play 缓存已过期)。如果我将设备重新连接到网络,一切都会再次正常运行。

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

我的应用程序打算离线使用,但如果queryPurchases() 失败,我不喜欢将其恢复为免费版本的想法(从用户的角度来看,这会很烦人)。如果queryPurchases() 失败(用户可能开始利用这种行为),我也不喜欢“给予怀疑的好处”并开始付费版本的想法。

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

我该怎么办?

【问题讨论】:

  • 你最终是如何实现存储的缓存的?我目前处于类似情况,但也有订阅。
  • 你有没有解决这个问题?我刚刚在这里问了一个类似的问题:stackoverflow.com/questions/62027898/…

标签: android google-play in-app-purchase in-app-billing


【解决方案1】:

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

【讨论】:

  • 好的,谢谢。我的应用实际上是一个 Cordova Android 应用。可以将 queryPurchases() 的结果保存到 window.localStorage 吗?我认为它是应用程序本身的私有持久存储,并不意味着用户可以直接访问。无论当前注册到 Google Play 的 Google 用户如何,该应用都会成功回退,不是吗?
猜你喜欢
  • 1970-01-01
  • 2018-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多