13

我的用户SkuType.INAPP从我的应用程序中购买了商品 ( )。

在之前推荐的应用内计费实现中,IabHelper.QueryInventoryFinishedListener返回不包含Inventory他们拥有的项目的一个。

在新的Play Billing Library中,我使用以下方法:

Purchase.PurchasesResult purchasesResult = mBillingClient.queryPurchases(BillingClient.SkuType.INAPP);

假设响应代码成功,我查询:

purchasesResult.getPurchasesList()

对于这一小部分用户,列表是空的。

作为故障保险,对于上述负面结果,我继续尝试:

mBillingClient.queryPurchaseHistoryAsync(BillingClient.SkuType.INAPP, this);

onPurchaseHistoryResponse(final int responseCode, final List<Purchase> purchasesList)

成功详细说明购买。

对此感到困惑,我要求运行这两种实现的受影响用户确认以下内容:

  • 他们在设备上只有一个 Google 帐户
  • 一个账号收到购买确认邮件
  • 这是 Google Play 商店应用程序中的唯一帐户选项
  • Google Play 商店应用“订单历史”详细说明了购买情况

这个线程中得到建议,我要求他们:

  • 从 Google Play 商店应用中清除数据和缓存
  • 重启
  • 重新登录 Google Play 商店
  • 再次打开我的应用

尽管如此,仍然只能queryPurchaseHistoryAsync正确地识别出他们的帐户拥有的物品。

问:为什么?

计费库实现状态:

queryPurchaseHistoryAsync() 返回用户为每个 SKU 进行的最新购买,即使该购买已过期、取消或已消费。尽可能使用 queryPurchase() 方法,因为它使用本地缓存,而不是 queryPurchaseHistoryAsync() 方法。

我已在我的订单管理中确认购买有效且未被取消。我不消费它们,因此它们不会过期

现在我有一个问题

鉴于对于这些用户,我只能通过上述方式识别他们的购买行为,因此我不得不为所有人实施这种故障保护。

除了因必须这样做而感到沮丧之外,这似乎不是什么大问题,直到您再次阅读:

queryPurchaseHistoryAsync() 返回用户为每个 SKU 进行的最近购买,即使该购买已过期、取消或消耗

因此,在我的标准实现中,我需要检查此购买是否仍然有效。

不幸的是,Purchase对象没有这样的方法来检查其有效性。

所以,我可能需要执行外部检查


当我的应用程序启动并且我的逻辑决定是否显示广告时。


帮助。请。

4

0 回答 0