【问题标题】:In App Billing getPrice() Android在应用计费 getPrice() Android
【发布时间】:2013-05-06 08:21:49
【问题描述】:

我已成功在我的应用中实施应用计费,一切正常。我现在正在尝试检索项目的价格(在开发者控制台中设置),以便我可以在我的应用程序中反映这些价格,而无需硬编码值。

很明显,这段代码只收集了已经通过库存购买的商品的价格,这不是我想要的:

SkuDetails gasDetails = inventory.getSkuDetails(SKU_FULL);      

            if (gasDetails != null){
                alert("Gas is " + gasDetails.getPrice());}

我查看了docs 查询可供购买的物品,但很难理解。我认为 Helper 类会实现某种获取价格的方法。

那么,我的问题是:谁能指出我正确的方向?

【问题讨论】:

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


    【解决方案1】:

    好的,我找到了解决方案。我已经破译了开发者文档,里面似乎有错误。

    这是我在 IabHelper 中创建的解决方案:

    public String getPricesDev(String packageName) throws RemoteException, JSONException{
    
    
            ArrayList<String> skuList = new ArrayList<String>();
            skuList.add("full.discount.fetch");
            skuList.add("gas");
        Bundle querySkus = new Bundle();
        querySkus.putStringArrayList("ITEM_ID_LIST", skuList);
    
        Bundle skuDetails = mService.getSkuDetails(3,packageName, "inapp", querySkus);
    
    
        int response = skuDetails.getInt("RESPONSE_CODE");
        if (response == 0) {
           ArrayList<String> responseList 
              = skuDetails.getStringArrayList("DETAILS_LIST");
    
           for (String thisResponse : responseList) {
              JSONObject object = new JSONObject(thisResponse);
              String sku = object.getString("productId");
              String price = object.getString("price");
    
              if(sku.contains("full.discount.fetch")) return price;
    
           }
        } 
        return "Not found";
    
    
    }
    

    【讨论】:

      【解决方案2】:

      如果您使用 Google 在“TrivialDrive”示例中建议的实现,您可以通过将 true 传递给查询库存的方法

      /**
       * Queries the inventory. This will query all owned items from the server, as well as
       * information on additional skus, if specified. This method may block or take long to execute.
       * Do not call from a UI thread. For that, use the non-blocking version {@link #refreshInventoryAsync}.
       *
       * @param querySkuDetails if true, SKU details (price, description, etc) will be queried as well
       *     as purchase information.
       * @param moreItemSkus additional PRODUCT skus to query information on, regardless of ownership.
       *     Ignored if null or if querySkuDetails is false.
       * @param moreSubsSkus additional SUBSCRIPTIONS skus to query information on, regardless of ownership.
       *     Ignored if null or if querySkuDetails is false.
       * @throws IabException if a problem occurs while refreshing the inventory.
       */
      public Inventory queryInventory(boolean querySkuDetails, List<String> moreItemSkus,
                                          List<String> moreSubsSkus) throws IabException {
      

      【讨论】:

        【解决方案3】:

        使用结算 api

        implementation 'com.android.billingclient:billing:1.1' 
        

        使用它来获取 SKU 详细信息

        public void getPrices(){
        
        
                List<String> skuList = new ArrayList<> ();
                skuList.add("id_one"); //These are the product ids in your google console
                skuList.add("id_two");
                skuList.add("id_three");
                SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
                params.setSkusList(skuList).setType(BillingClient.SkuType.INAPP);
                mBillingClient.querySkuDetailsAsync(params.build(),
                        new SkuDetailsResponseListener() {
                            @Override
                            public void onSkuDetailsResponse(int responseCode, List<SkuDetails> skuDetailsList) {
        
                                for (SkuDetails details:
                                     skuDetailsList) {
        
                                   String item = details.getSku();
                                   String price = details.getPrice();
                                   String description = details.getDescription();
                                   String currencyCode = details.getPriceCurrencyCode();
                                   String title = details.getTitle();
        
                                    Toast.makeText(InAppBillingActivity.this, "Finished", Toast.LENGTH_SHORT).show();
        
                                   Log.d("hererereeer- item     ", item);
                                   Log.d("hererereeer- price     ", price);
                                   Log.d("hererereeer- descr     ", description);
                                   Log.d("hererereeer- code     ", currencyCode);
                                   Log.d("hererereeer- title     ", title);
        
                                }
        
                            }
                        });
            }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-07-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-10-19
          • 2012-06-29
          相关资源
          最近更新 更多