queryPurchases()vs queryPurchaseHistoryAsync()以便"恢复"功能?

lau*_*rie 14 java android restore play-billing-library

我正在使用Play Billing Library来触发和管理购买,从而解锁了应用中的额外功能.这部分正在运作.

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

我的想法是查询Play商店并确认该帐户以前是否已成功购买该商品,如果是,那么我将在应用程序内调用本地升级功能.

看来有两种类似的方法.但是我应该在这种情况下使用哪一个?用户要么擦了手机还是买了新手机?

queryPurchases()?还是queryPurchaseHistoryAsync()?

Hug*_*otl 11

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

queryPurchaseHistoryAsync不会做你需要的,因为它只会给你一个每个SKU 最近购买的清单.他们可能已经过期,被取消或被消费,而且无法分辨.因此,此响应不能用于说明在您的应用中应用哪些购买.

据我所知,唯一有效的用途queryPurchaseHistoryAsync是为用户提供他们的购买历史列表.这有点奇怪.

另请注意:queryPurchases是同步的,因此在大多数情况下,它需要在某种后台工作线程中运行.我跑了一个AsyncTask.

  • 或者,如果queryPurchaseHistoryAsync可以告诉您购买是否已过期,取消或消费了,那就太好了。 (4认同)
  • @HughHughTeotl与Google文档的许多部分一样,对于这些方法的作用尚不明确。在queryPurchases的描述中没有任何地方说它将返回当前活动的购买。它被描述为“获取应用内购买的所有商品的购买详细信息”,这听起来很像queryPurchaseHistory将返回什么。我也阅读了所有这些文档,但是我想知道您是否找到了有关应如何使用这两种方法的任何明确的描述或示例。 (3认同)
  • “ queryPurchases”还不够。用户尝试购买,获取了“ ITEM_ALREADY_OWNED”,所以我调用了“ queryPurchases”,但是它使用的是没有商品的缓存。 (2认同)
  • 我认为 querypurchases 返回 Play 商店应用程序中缓存的内容。如果清理应用程序缓存和存储会怎样?你什么也没得到吗? (2认同)

kra*_*ado 8

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

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

我从这里的Stackoverflow 答案中发现

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

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


小智 6

每个文档queryPurchases使用Play商店应用缓存来获取结果,同时queryPurchaseHistoryAsync实际检查购买AP是否有最新购买。因此,您应该检查一下Async方法。

queryPurchases

获取您在应用内购买的所有商品的购买详细信息。此方法使用Google Play商店应用的缓存,而无需启动网络请求。

queryPurchaseHistoryAsync

返回用户对每个SKU的最近购买,即使该购买已过期,取消或已使用。

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