queryPurchaseHistoryAsync

queryPurchaseHistoryAsync

IabHelper的QueryInventoryFinishedListener尚未返回过期的订阅项目。

另一方面,Google Play帐单库的PurchaseHistoryResponseListener似乎会收到所有购买的物品,其中包括过期的物品。

在Google Play结算库上,我们必须检查PurchaseHistoryResponseListener的购买日期以及商品的每个到期日期?

最佳答案

queryPurchases与queryPurchaseHistoryAsync

通常,我们应该使用queryPurchases(String skuType),它不返回过期的项目。 queryPurchaseHistoryAsync返回启用和禁用的项目,如您所见,如下所示。

queryPurchases



queryPurchaseHistoryAsync



关于queryPurchaseHistoryAsync

我无法对queryPurchaseHistoryAsync的用例进行镜像。如果需要使用queryPurchaseHistoryAsync,则需要实现检查其是否过期。

  private PurchaseHistoryResponseListener listener = new PurchaseHistoryResponseListener() {
    @Override
    public void onPurchaseHistoryResponse(int responseCode, List<Purchase> purchasesList) {
      for (Purchase purchase : purchasesList) {
        if (purchase.getSku().equals("sku_id")) {
          long purchaseTime = purchase.getPurchaseTime();
          // boolean expired = purchaseTime + period < now
        }
      }
    }
  };

购买对象没有期间信息,因此必须从BillingClient.querySkuDetailsAsync获取以上期间或进行硬编码。以下是使用querySkuDetailsAsync的示例实现。

    List<String> skuList = new ArrayList<>();
    skuList.add("sku_id");
    SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
    params.setSkusList(skuList).setType(BillingClient.SkuType.SUBS);
    billingClient.querySkuDetailsAsync(params.build(), new SkuDetailsResponseListener() {
      @Override
      public void onSkuDetailsResponse(int responseCode, List<SkuDetails> skuDetailsList) {
        if (skuDetailsList == null) {
          return;
        }
        for (SkuDetails skuDetail : skuDetailsList) {
          if (skuDetail.getSku().equals("sku_id")) {
            String period = skuDetail.getSubscriptionPeriod();

          }
        }
      }
    });

07-26 05:09