使用 Android BillingClient,如何在重新安装或更改设备后恢复用户的 IAP?

Using Android BillingClient, how to restore a user's IAP after re-installing, or changing their device?

我的应用程序有一个单一的一次性非消耗性 IAP 来关闭广告。我正在尝试为我的应用程序提供“恢复购买”选项。如果用户卸载应用程序或迁移到新设备,他们可以选择恢复他们过去的一次性购买。

我的应用遵循 Google 文档 https://developer.android.com/google/play/billing/integrate

中描述的购买流程

我一直在寻找示例来恢复过去对不同设备的购买,但我发现的所有示例都已过时,引用了 AIDL 方法。

我看过方法 BillingClient.queryPurchases()BillingClient.queryPurchaseHistoryAsync()queryPurchaseHistoryAsync() 列出了 PurchaseHistoryRecord 的列表,其中包含所有过去的购买,包括已取消的购买,但不提供购买状态以确定其中任何一项是已完成还是待定购买。

相比之下,queryPurchases() 将提供购买清单及其状态,但仅限于设备。如果用户在不同的设备上创建 IAP,它 returns 一个空列表。

我没有后端,因为我是一个资源有限的独立开发者,所以我的应用程序必须是独立的。

感谢任何帮助。谢谢。

购买链接到设备 Google 帐户,如果用户安装应用程序并在第二台设备上使用相同的帐户,则 BillingClient.queryPurchases() 将 return 他拥有所购买的内购

如果他想使用不同的 Google 帐户,那么他将不得不重新购买该商品。

所以我了解到 queryPurchases() 在您的设备上本地缓存,但在您调用 queryPurchaseHistoryAsync()

时更新

我从这个 Whosebug 答案中发现 here

所以我的解决方案是,当我想在新设备上恢复购买或重新安装我的应用程序时。调用 queryPurchaseHistoryAsync() 然后在 onPurchaseHistoryResponse() 的回调中调用 queryPurchases() 并在 PurchasesResultList<Purchase> 中查找用户过去购买的任何购买状态。

如果有预期购买,您的应用可以授予他们过去购买的权利。