java queryPurchases()与queryPurchaseHistoryAsync()是为了“恢复”功能?
我使用Play Billing Library来触发和管理购买,从而解锁应用程序中的额外功能。这部分工作正常
然而,“恢复”购买的最佳方式是什么。比如说,买了应用的人买了一部新手机。登录Play Store,下载我的应用程序,然后发现正在显示“升级”的付款屏幕。iOS对此有一个特定的方法,但我不知道Android有一个方法
我的想法是查询Play Store并确认该帐户之前是否已成功购买该物品,如果是,则我将调用应用程序中的本地升级功能
似乎有两种类似的方法。但是在这个场景中我应该使用哪一个呢?用户擦过手机还是买了新手机
queryPurchases()
?或者queryPurchaseHistoryAsync()
# 1 楼答案
你应该使用
queryPurchases
。这将为您提供每个SKU的所有当前活动(未消费、未取消、未过期)购买queryPurchaseHistoryAsync
不会满足您的需求,因为它只会为您提供每个SKU的最新采购清单。它们可能已经过期、被取消或已被消费,而且无从得知。因此,此响应不能用于告诉你的应用程序中要应用哪些购买就我所见,
queryPurchaseHistoryAsync
唯一有效的用法是向用户提供他们的购买历史记录列表。这有点奇怪另外请注意:
queryPurchases
是同步的,所以在大多数情况下,它需要在某种后台工作线程中运行。在我的矿里跑# 2 楼答案
我知道有点晚了,但我自己才发现。分享我的答案,让他人受益
所以我了解到
queryPurchases()
在您的设备上本地缓存,但在您调用queryPurchaseHistoryAsync()
时会更新我从这个答案中发现here
因此,我的解决方案是,当想要在新设备上恢复购买,或重新安装我的应用程序时。调用
queryPurchaseHistoryAsync()
,然后在回调中onPurchaseHistoryResponse()
调用queryPurchases()
,并在PurchasesResult
的List<Purchase>
中查看用户过去任何购买的购买状态如果有预期的购买,你的应用程序可以授予他们过去购买的权利
# 3 楼答案
根据文档
queryPurchases
使用Play Store应用缓存获取结果,而queryPurchaseHistoryAsync
实际检查购买AP以获取最近的购买。因此,在您的例子中,您应该检查Async
方法queryPurchases
queryPurchaseHistoryAsync
另外,一定要检查文档。它建议
Cache purchase details on your servers
。 https://developer.android.com/google/play/developer-api.html#practices