Фрагменты примера 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
возвращает только то, что пользователь уже приобрел / обработал (расходуемые или не расходуемые продукты, подписки, ...).
Если вы находитесь в одной и той же обуви (хотите знать все детали в начале), вам нужно сделать два раза:
- Вам нужно вызвать полиморфный вариант
queryInventoryAsync
в пределах mHelper.startSetup
, где вы можете давать указания.
- В слушателе вы сможете перебирать свои 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.