我的用户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对象没有这样的方法来检查其有效性。
所以,我可能需要执行外部检查。
当我的应用程序启动并且我的逻辑决定是否显示广告时。
帮助。请。