【问题标题】:Android: Which response code does in-app billing V3 return upon timeout?Android:应用内计费 V3 超时时返回哪个响应代码?
【发布时间】:2013-02-12 20:47:58
【问题描述】:

Google Play 应用内结算服务{ice,er} V3 将在网络超时条件下返回哪些响应状态代码?这是所有功能中的统一吗?

【问题讨论】:

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


【解决方案1】:

我将在这里描述我的发现。我已经在安装了全功能 GP(GP Store V3.10.10、GP Services 2.0.12、G Services Framework 4.1.2)的 AVD 上通过拔掉主机的插头对此进行了测试。

  • getPurchases() 方法在可能的情况下返回一个缓存结果(请注意,我们不是在此处谈论缓存服务之外,而是一个直接调用 getPurchases)。当然,这意味着几乎总是会得到一个缓存结果,除非由于本地数据丢失而重新初始化服务时——这种情况不太可能并且通常不需要在应用级别。
  • consumePurchase() 方法将在假定的内部网络超时 20 秒后返回整数值 6 (BILLING_RESPONSE_RESULT_ERROR)(因此添加一点时间,直到调用者看到结果代码)。尽管BILLING_RESPONSE_RESULT_ERROR 被描述为Fatal error during the API action,但我还是怀疑这一点,因为这里没有其他错误代码有意义;不幸的是,fatal 这个词对于诸如超时之类的临时情况仍然有些不合适。
  • getSkuDetails() 的行为似乎与 consumePurchase() 一样。 更新:现在有证据表明getSkuDetails() 也可以访问本地服务中的缓存信息。
  • 如果服务已经知道该项目,则看起来getBuyIntent() 在没有连接的情况下也能正常工作。这解释了 Hartok 看到空白 GP 购买屏幕的原因:在没有连接的情况下从 IAB V3 获得购买意图不是问题。

结论:In-App Billing Service V3 似乎可以使用内部缓存和 20 秒的服务器连接超时。对于本地缓存无法解决的服务器通信错误,使用响应代码 6。

【讨论】:

  • 如果我的本地缓存和服务器不同步怎么办?例如,即使 getPurchases 没有返回它说我拥有的项目,我也会一直收到“您已经拥有此项目”对话框?
  • @Vee 您指的是您自己编写的应用程序,对吧?如果是这样,您是否使用 Google 示例代码? (提示:它不可靠。)我不确定“你已经拥有这个”的对话来自哪里;如果它是由 Google Play 在线部分显示的,那么您设备上的 Google Play 服务缓存可能存在问题;删除该服务的本地数据。如果对话源自 Google Play IAB 示例代码,那将是另一回事——据我所知,它会根据有效时间戳进行附加缓存。如果需要,请发布更多详细信息。
  • @Vee One finding regarding the Google Play IAB example code not being robust;它与另一个方面有关,但我不相信不检查如此重要的错误条件的代码。
  • 是的,我根本没有使用 Google 的示例代码,而且我的代码非常健壮。我处理每一个错误,甚至是错误错误(例如在购买期间后台给我一个糟糕的活动结果)但是,正如您所提到的,它是 google play 服务缓存的问题。正确的解决方案是等待或清除该服务的本地数据,但是,我无法在我的应用程序中执行此操作。
  • @Vee 是的。谷歌试图保护他们的服务器免受这种负载,或者不管是什么原因,这有点令人遗憾。尽管有时间戳,但连接性良好时,它们可以每隔一段时间同步一次……这将改善用户体验。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多