播放结算库 - V3与异步vs同步 - 结果不同

时间:2018-02-22 03:57:07

标签: android in-app-purchase in-app-billing android-billing play-billing-library

我的用户已从我的应用程序中购买了商品(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)

成功详情购买。

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

  • 他们在设备上只有一个Google帐户
  • 一个帐户收到了购买确认电子邮件
  • 这是Google Play商店应用中唯一的帐户选项
  • Google Play商店应用'订单历史记录'详细介绍了购买

this thread那里得到建议,我让他们:

  • 清除数据&amp;来自Google Play商店应用的缓存
  • 重新启动
  • 重新登录Google Play商店
  • 再次打开我的应用

尽管如此,仍然只有queryPurchaseHistoryAsync才能正确识别其帐户拥有项目。

问题:为什么?

Billing Library implementation州:

  

queryPurchaseHistoryAsync()返回最近购买的商品   每个SKU的用户,即使该购买已过期,已取消,或   消耗。尽可能使用queryPurchases()方法   本地缓存,优先于queryPurchaseHistoryAsync()   方法

我已在订单管理中确认购买有效且尚未取消。我不消费他们,因此他们不能过期

现在我遇到了问题

鉴于对于这些用户我只能以上述方式识别他们的购买,我被迫为所有人实施这种故障保护。

除了因为必须这样做而感到沮丧之外,在您再次阅读之前,这似乎不会是一个太大的问题:

  

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

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

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

所以,我可能需要perform an external check

全部当我的应用开始时,我的逻辑决定是否展示广告。

帮助。请。

0 个答案:

没有答案