【问题标题】:Adding multiple products to productlist for queryProductDetailsAsync in android billing 5.0.0在 android billing 5.0.0 中将多个产品添加到 productlist 以进行 queryProductDetailsAsync
【发布时间】:2022-07-16 09:35:19
【问题描述】:

在旧的 android 计费实现中,您将构建一个 sku 列表来查询产品:

List<String> skuList = new ArrayList<>();
        skuList.add(SKU_POTION);
        skuList.add(SKU_SWORD);
        skuList.add(SKU_BOW);
        SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
        params.setSkusList(skuList).setType(BillingClient.SkuType.INAPP);

新的计费实施涉及更多,并且似乎限制您仅将一种产品添加到查询列表:

ImmutableList<QueryProductDetailsParams.Product> productList = ImmutableList.from(QueryProductDetailsParams.Product.newBuilder()
                    .setProductId(SKU_POTION)
                    .setProductType(BillingClient.ProductType.INAPP)
                    .build());
    
            QueryProductDetailsParams params = QueryProductDetailsParams.newBuilder()
                    .setProductList(productList)
                    .build();
    
            billingClient.queryProductDetailsAsync(
            params,
            new ProductDetailsResponseListener() {
                public void onProductDetailsResponse(BillingResult billingResult, List<ProductDetails> productDetailsList) {
                    if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK && productDetailsList != null) {
                        for (ProductDetails skuDetails : productDetailsList) {                    
                            mProductDetailsMap.put(skuDetails.getProductId(), skuDetails);                           
                        }
                    }
                   
                }
            }
    );

它使您可以为开始购买流程所需的 mProductDetailsMap 的 productDetailsList 构建 productList:

puchasestring=SKU_POTION;
initiatePurchaseFlow(mProductDetailsMap.get(puchasestring));

如何将多个产品添加到开始实施的 productList 中?我不想为每个项目重复整个代码段以添加到 mProductDetailsMap,这是我现在使用的 Primitive Pete 方法。

【问题讨论】:

    标签: java android play-billing-library


    【解决方案1】:

    对于多个产品:

    ImmutableList<QueryProductDetailsParams.Product> productList = ImmutableList.from(
    QueryProductDetailsParams.Product.newBuilder()
                        .setProductId(SKU_POTION)
                        .setProductType(BillingClient.ProductType.INAPP)
                        .build(),
    QueryProductDetailsParams.Product.newBuilder()
                        .setProductId(SKU_SWORD)
                        .setProductType(BillingClient.ProductType.INAPP)
                        .build(),
    QueryProductDetailsParams.Product.newBuilder()
                        .setProductId(SKU_BOW)
                        .setProductType(BillingClient.ProductType.INAPP)
                        .build());
    

    【讨论】:

      【解决方案2】:

      您实际上不必使用ImmutableListofficial examples 出于某种原因使用ImmutableList 来构建查询,但这不是必需的。 setProductList 方法只是将 List&lt;Product&gt; 作为输入,所以你可以这样做:

      List<String> skuList = Arrays.asList(SKU_POTION, SKU_SWORD, SKU_BOW);
      
      ArrayList<Product> productList = new ArrayList<>();
      for(String sku : skuList) {
          productList.add(
              Product.newBuilder()
                  .setProductId(sku)
                  .setProductType(BillingClient.ProductType.SUBS)
                  .build()
          );
      }
      
      QueryProductDetailsParams params = QueryProductDetailsParams.newBuilder()
              .setProductList(productList)
              .build();
      
      billingClient.queryProductDetailsAsync(params, new ProductDetailsResponseListener() {
          public void onProductDetailsResponse(BillingResult billingResult, List<ProductDetails> productDetailsList) {
              // handle response
          }
      }
      

      任何实现 List 接口的东西都可以工作 - ArrayListImmutableList 等...

      【讨论】:

        猜你喜欢
        • 2022-12-02
        • 2021-02-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-28
        • 2021-06-28
        相关资源
        最近更新 更多