有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java queryPurchases()与queryPurchaseHistoryAsync()是为了“恢复”功能?

我使用Play Billing Library来触发和管理购买,从而解锁应用程序中的额外功能。这部分工作正常

然而,“恢复”购买的最佳方式是什么。比如说,买了应用的人买了一部新手机。登录Play Store,下载我的应用程序,然后发现正在显示“升级”的付款屏幕。iOS对此有一个特定的方法,但我不知道Android有一个方法

我的想法是查询Play Store并确认该帐户之前是否已成功购买该物品,如果是,则我将调用应用程序中的本地升级功能

似乎有两种类似的方法。但是在这个场景中我应该使用哪一个呢?用户擦过手机还是买了新手机

queryPurchases()?或者queryPurchaseHistoryAsync()


共 (3) 个答案

  1. # 1 楼答案

    你应该使用queryPurchases。这将为您提供每个SKU的所有当前活动(未消费、未取消、未过期)购买

    queryPurchaseHistoryAsync不会满足您的需求,因为它只会为您提供每个SKU的最新采购清单。它们可能已经过期、被取消或已被消费,而且无从得知。因此,此响应不能用于告诉你的应用程序中要应用哪些购买

    就我所见,queryPurchaseHistoryAsync唯一有效的用法是向用户提供他们的购买历史记录列表。这有点奇怪

    另外请注意:queryPurchases是同步的,所以在大多数情况下,它需要在某种后台工作线程中运行。在我的矿里跑

  2. # 2 楼答案

    我知道有点晚了,但我自己才发现。分享我的答案,让他人受益

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

    我从这个答案中发现here

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

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

  3. # 3 楼答案

    根据文档queryPurchases使用Play Store应用缓存获取结果,而queryPurchaseHistoryAsync实际检查购买AP以获取最近的购买。因此,在您的例子中,您应该检查Async方法

    queryPurchases

    Get purchases details for all the items bought within your app. This method uses a cache of Google Play Store app without initiating a network request.

    queryPurchaseHistoryAsync

    Returns the most recent purchase made by the user for each SKU, even if that purchase is expired, canceled, or consumed.

    另外,一定要检查文档。它建议Cache purchase details on your servershttps://developer.android.com/google/play/developer-api.html#practices