我有一个使用Google的应用内结算API进行应用内购买的应用。这通常很有效,即使在购买之后互联网连接丢失,这使得产品显示为未消费的购买。然而,在一些涉及开启wifi的边缘情况下&在购买过程中关闭几次,有时会发生购买处理(即已支付款项),但尚未在应用中消费。
使用getPurchases()方法时,即使文档说明该产品,也不会将此产品作为未消费的购买退回。但是,当您再次尝试购买此产品时,API会返回代码BILLING_RESPONSE_RESULT_ITEM_ALREADY_OWNED
因此,此产品 标记为未消费。
有趣的是,在我的终端中运行命令adb shell pm clear com.android.vending
后,此产品会显示在getPurchases()
返回的列表中。
此处发生的情况是,产品在运行终端命令后才会显示为未消耗的产品?如何在getPurchases调用中显示此产品?
(如果无法解决此问题,也许我可以在加载可以进行购买的视图时,模拟"每个项目的购买过程,检查它是否返回BILLING_RESPONSE_RESULT_ITEM_ALREADY_OWNED
代码,授予用户购买每个项目的购买和以编程方式解决此购买。但这似乎有点夸张。)
答案 0 :(得分:1)
因为Google Play服务会缓存结果并首先返回缓存值。
在互联网断开之前进行购买。因此,购买状态不会在缓存中更新。当您第一次查询getPurchases()时,它会返回缓存的值,因此产品不会显示在购买列表中。
使用命令清理缓存后,它会强制google play service更新缓存,然后返回getPurchases()列表。所以产品出现了!
因此,我认为您应该处理已经拥有的代码,而不是在这种情况下通过调用getPurchases()来检查购买状态。
答案 1 :(得分:0)
正如docs所说
成功购买后,Google Play的应用内结算服务会在本地缓存用户的购买数据
我遇到了同样的问题,我找到的唯一解决方法是建议用户先打开Play商店应用(这应该更新内部结算缓存),然后返回到您的应用并完成购买(购买)必须在库存中提供)