测试应用内结算第3版已经因Google Play应用缓冲来自Google Play服务器的数据而无法预测,并且缓存过程没有详细记录.特别是,如果在用户的某个设备上进行购买,则可能无法在同一用户拥有的其他设备上立即看到它.
建议的做法是让应用程序在启动时检查所有已购买产品的库存.但有时此检查使用的缓冲数据由于在不同设备上通过同一应用程序进行的更新而已经过时,或者通过Google Checkout(例如,退款或已取消的订单).
在未启动此更新的设备上运行的Google Play应用中,在Google Play服务器上购买数据所做的更改是什么情况?
具体来说,如何在测试期间确保使用queryInventoryAsync()(TrivialDrive示例应用程序提供的IabHelper类的方法)检查返回的数据反映了目前Google Play服务器上的内容,而不是可能过时的缓冲数据?
我有很多帖子和 Google 文档,但我仍然不清楚如何判断应用内购买已退款。我小心红了In-App Billing v3 - 不检测退款,Google Play In-App Billing Version 3 支持退款吗?.
我相信我在不久前通过复制和粘贴从 Google 官方文档中记下了以下笔记:
purchaseState:订单的购买状态。可能的值为 0(已购买)、1(已取消)或 2(已退款)。
现在,官方文档有以下内容:
-> purchaseState:订单的购买状态。它总是返回 0-
(购买)。
更具体地说,如果 IAB 购买被退款或取消,那是否仍在 mHelper.queryInventoryAsync(mGotInventoryListener) 获取的用户库存中?如果是这样,如何判断购买已被取消或退款?
更新 [2019-12-12]:
我已经测试了很多次并确认了以下几点:
如果订单在退款后被取消,它将从getPurchasesList返回的结果中消失。发生这种情况所需的时间各不相同。可能是几分钟到 10 多个小时。我认为这取决于 Google Play 何时刷新其缓存。似乎可以打开 Google Play 来刷新其缓存。在一种情况下,getPurchasesList在退款 10 多个小时后仍然返回了已退款的购买,但在 Google Play 一打开它就停止了退货。