我的用户已从我的应用程序中购买了商品(SkuType.INAPP
)。
在之前推荐的implementation of in app billing中,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)
成功详情购买。
对此感到困惑,我要求运行这两种实现的受影响用户确认以下内容:
从this thread那里得到建议,我让他们:
尽管如此,仍然只有queryPurchaseHistoryAsync
才能正确识别其帐户拥有项目。
问题:为什么?
Billing Library implementation州:
queryPurchaseHistoryAsync()返回最近购买的商品 每个SKU的用户,即使该购买已过期,已取消,或 消耗。尽可能使用queryPurchases()方法 本地缓存,优先于queryPurchaseHistoryAsync() 方法
我已在订单管理中确认购买有效且尚未取消。我不消费他们,因此他们不能过期。
现在我遇到了问题
鉴于对于这些用户我只能以上述方式识别他们的购买,我被迫为所有人实施这种故障保护。
除了因为必须这样做而感到沮丧之外,在您再次阅读之前,这似乎不会是一个太大的问题:
queryPurchaseHistoryAsync()返回最近购买的商品 每个SKU的用户,即使该购买已过期,已取消,或 消耗
因此,在我的标准实施中,我需要检查此购买是否仍然有效。
不幸的是,Purchase对象没有这样的方法来检查其有效性。
所以,我可能需要perform an external check。
全部当我的应用开始时,我的逻辑决定是否展示广告。
帮助。请。