В приложении Billing getPrice() Android

Я успешно реализовал в приложении биллинг в моем приложении, все работает отлично. Теперь я пытаюсь получить цену предметов (установленных в консоли разработчика), чтобы я мог отражать эти цены в моем приложении без значений жесткого кодирования.

Этот код, очевидно, только собирает цены на предметы, которые уже были приобретены через Inventory, который не является тем, что я ищу:

SkuDetails gasDetails = inventory.getSkuDetails(SKU_FULL);      

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

Я просмотрел docs запрос предметов, доступных для покупки, но пытаясь понять это. Я думал, что класс Helper выполнил бы какой-то метод получения цен.

Итак, мой вопрос: может ли кто-нибудь указать мне в правильном направлении?

Ответ 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

Если вы используете реализацию, предложенную в образце "TrivialDrive" от Google, вы можете получить информацию обо всех skus (даже если они не были приобретены), передав true параметрам "подробности" и "moreSkus" в метод, который запрашивает инвентарь

/**
 * 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 {