问题描述
我的应用程序有一个一次性非消耗性 IAP 来关闭广告。我正在尝试为我的应用程序提供“恢复购买”选项。如果用户卸载应用程序或迁移到新设备,他们可以选择恢复他们过去的一次性购买。
我的应用遵循 Google 文档中描述的购买流程 https://developer.android.com/google/play/billing/integrate
我寻找了一些示例来恢复过去购买的不同设备,但我发现的所有示例都已经过时,引用了 AIDL 方法。
我看过方法,BillingClient.queryPurchases()
和 BillingClient.queryPurchaseHistoryAsync()
。 queryPurchaseHistoryAsync()
列出所有过去的购买(包括取消的购买)的 PurchaseHistoryRecord
列表,但不提供购买状态以确定其中是否有已完成或待处理的购买。
相反,queryPurchases()
将提供购买列表及其状态,但仅针对设备。如果用户在不同的设备上创建了 IAP,它会返回一个空列表。
我没有后端,因为我是一个资源有限的独立开发者,所以我的应用必须是自包含的。
感谢任何帮助。谢谢。
解决方法
购买与设备的 Google 帐户相关联,如果用户安装该应用并在第二台设备上使用相同的帐户,那么 BillingClient.queryPurchases()
将返回他拥有购买的 IAP
如果他想使用不同的 Google 帐户,则必须再次购买该商品。
,所以我了解到 queryPurchases()
在您的设备本地缓存,但在您调用 queryPurchaseHistoryAsync()
时更新
我从这个 Stackoverflow 答案中发现了 here
所以我的解决方案是在新设备上恢复购买或全新安装我的应用程序时。调用 queryPurchaseHistoryAsync()
然后在 onPurchaseHistoryResponse()
的回调中调用 queryPurchases()
并在 List<Purchase>
的 PurchasesResult
中查找用户过去购买的任何购买状态。
如果有预期购买,您的应用可以授予他们过去购买的权利。