我有一个应用程序,它使用谷歌的应用程序计费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代码,授予用户对进行购买的每个项目的购买权限,并以编程方式解决此购买问题。但这似乎有点夸张。)
发布于 2018-04-19 10:22:47
因为google服务将缓存结果并首先返回缓存值。
购买是在互联网断开之前进行的。因此,在缓存中没有更新购买状态。当您第一次查询getPurchases()时,它返回缓存的值,因此产品不会显示在购买列表中。
在使用命令清理缓存后,它会强制google服务在返回getPurchases()列表之前更新缓存。所以产品就出现了!
因此,我认为您应该处理already_owned代码,而不是通过在本例中调用getPurchases()来检查购买状态。
发布于 2018-04-19 09:53:48
正如文档所说
购买成功后,用户的购买数据将由Google Play的应用程序内计费服务在本地缓存。
我遇到了同样的问题,我发现的唯一解决办法是建议用户首先打开Play Store应用程序(这应该更新内部计费缓存),然后返回到应用程序并完成购买(购买必须在库存中可用)。
https://stackoverflow.com/questions/49772079
复制相似问题