Как запросить (оценить) информацию для нескольких продуктов в приложении одновременно? - PullRequest
20 голосов
/ 06 мая 2011

В Android в биллинге приложения можно каким-то образом запрашивать (цену) информацию для всех продуктов, используя один запрос?Оптимально можно указать идентификаторы продуктов, и они будут возвращать информацию для них.

То, что я ищу, - это эквивалент SKProductsRequest для Android Market.http://developer.apple.com/library/ios/#documentation/StoreKit/Reference/SKProductsRequest/Reference/Reference.html#//apple_ref/occ/cl/SKProductsRequest

Ответы [ 2 ]

14 голосов
/ 05 июня 2011

Теперь возможно с Billing API v3.Вы можете получить информацию с помощью метода getSkuDetails().Пример: здесь .

ArrayList skuList = new ArrayList();
skuList.add("premiumUpgrade"); 
skuList.add("gas");
Bundle querySkus = new Bundle();
querySkus.putStringArrayList("ITEM_ID_LIST", skuList);

Bundle skuDetails = mService.getSkuDetails(3, getPackageName(), "inapp", querySkus);

int response = skuDetails.getInt("RESPONSE_CODE");
if (response == 0) {
    ArrayList 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.equals("premiumUpgrade")) {
            mPremiumUpgradePrice = price;
        } else if (sku.equals("gas")) { 
            mGasPrice = price;
        }
    }
}
0 голосов
/ 03 июня 2019

Фрагменты примера Google (например, https://developer.android.com/google/play/billing/billing_integrate.html#QueryDetails) и другие фрагменты, которые я видел, мне не подходили. Мне нужно либо иметь экземпляр inventory, либо mHelper (который является IAB Helper). как, например, номер ответа на вопрос больше, чем принятый ответ, поэтому я не одинок. Мое использование аналогично примеру TrivialDrive (https://github.com/googlesamples/android-play-billing/blob/master/TrivialDrive/),, поэтому давайте посмотрим на это.

В MainActivity onCreate есть звонок для queryInventoryAsync:

    mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
        public void onIabSetupFinished(IabResult result) {
            Log.d(TAG, "Setup finished.");
            ...

            // IAB is fully set up. Now, let's get an inventory of stuff we own.
            Log.d(TAG, "Setup successful. Querying inventory.");
            try {
                mHelper.queryInventoryAsync(mGotInventoryListener);
            } catch (IabAsyncInProgressException e) {
                complain("Error querying inventory. Another async operation in progress.");
            }
        }
    });

В слушателе у вас будет экземпляр инвентаря.

IabHelper.QueryInventoryFinishedListener mGotInventoryListener = new IabHelper.QueryInventoryFinishedListener() {
    public void onQueryInventoryFinished(IabResult result, Inventory inventory) {
        Log.d(TAG, "Query inventory finished.");
        ...
        Log.d(TAG, "Initial inventory query finished; enabling main UI.");
    }
};

Моя проблема в том, что мои продукты в приложении являются расходными, и я хотел бы сначала запросить подробную информацию о всех моих продуктах, независимо от того, купил ли пользователь уже некоторые или нет. Например, я хочу узнать цену всех продуктов, выраженную в местной валюте, а не только в долларах США, чтобы пользователь был проинформирован перед тем, как уже совершить слишком много покупок. Обычно queryInventory возвращает только то, что пользователь уже приобрел / обработал (расходуемые или не расходуемые продукты, подписки, ...).

Если вы находитесь в одной и той же обуви (хотите знать все детали в начале), вам нужно сделать два раза:

  1. Вам нужно вызвать полиморфный вариант queryInventoryAsync в пределах mHelper.startSetup, где вы можете давать указания.
  2. В слушателе вы сможете перебирать свои SKU и видеть детали.

Итак, первый :

String[] SKUS = { SKU_1, SKU_2, SKU_3, SKU_4, SKU_5 };  // products
...
mHelper.queryInventoryAsync(true, Arrays.asList(SKUS), new ArrayList<String>(), mGotInventoryListener);

Второй параметр здесь - это SKU продукта, третий (я здесь не использую) - это SKU подписки.

Секунда : Затем в QueryInventoryFinishedListener теперь у вас есть все из них в inventory, и вы можете перебирать свои SKU:

        for (String sku: SKUS) {
            SkuDetails skuDetails = inventory.getSkuDetails(sku);
            String price = skuDetails.getPrice();
            ((android.widget.TextView)findViewById( *sku's ID* )).setText(price);
        }

Надеюсь, это поможет. Вскоре мне нужно перейти на решение, не основанное на AIDL.

...