解决方法
我将在这里描述我的发现.我已经在装有全功能GP的AVD(GP Store V3.10.10,GP Services 2.0.12,G Services Framework 4.1.2)上测试了这个,通过拔出主机插头.
>如果可能,getPurchases()方法返回缓存结果(请注意,我们不是在讨论服务之外的缓存,而是直接调用getPurchases).当然,这意味着一个人几乎总是得到一个缓存的结果,除非由于本地数据的丢失而重新初始化服务 – 这种情况不太可能并且通常不需要以特殊方式对待应用水平.
>在假定的内部网络超时为20秒后,consumePurchase()方法将返回整数值6(BILLING_RESPONSE_RESULT_ERROR)(因此添加一些时间直到调用者看到结果代码).尽管BILLING_RESPONSE_RESULT_ERROR在API操作期间被描述为致命错误,但我怀疑这是因为没有其他错误代码在这里有意义;不幸的是,致命一词仍然不适合临时条件,例如超时.
> getSkuDetails()似乎表现得像consumePurchase().更新:现在有证据表明getSkuDetails()也可以访问本地服务中的缓存信息.
>如果服务已知该项,则getBuyIntent()看起来好像没有连接.这就解释了为什么Hartok看到一个空白的GP购买屏幕:没有连接就从IAB V3获得购买意图不是问题.
结论:应用内结算服务V3似乎与内部缓存和服务器连接超时20秒一起使用.对于本地高速缓存无法解析的服务器通信错误,使用响应代码6.