2014-11-06 2 views
0

Я хотел бы получить цены на мои товары в приложениях прямо из Google Play, а не зашифрован. Я нашел следующую функцию:Извлечь цены из Google Play, покупки в приложениях

public String getPricesDev() throws RemoteException, JSONException{ 

    String packageName = mContext.getPackageName(); 
    ArrayList<String> skuList = new ArrayList<String>(); 
    skuList.add("batforerproven.permanent.cat1"); //Is this correct? Name of products? 
    skuList.add("batforerproven.permanent.cat2"); 

    Bundle querySkus = new Bundle(); 
    querySkus.putStringArrayList("ITEM_ID_LIST", skuList); 

    Bundle skuDetails = mService.getSkuDetails(3,packageName, ITEM_TYPE_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("batforerproven.permanent.cat2")) return price; 

     } 
    } 
    return "Not found"; 
} 

Проблема в том, что я пытаюсь использовать этот код до привязки службы. (MService равно нулю)

В моей OnCreate() я сделать некоторые UI-установки, то я называю

mIabHelper = new IabHelper(this, base64EncodedPublicKey); 

    mIabHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() { 
     public void onIabSetupFinished(IabResult result) 
     { 
      if (!result.isSuccess()) { 
       Toast.makeText(BuyExtras.this, "Feil ved kobling mot Google Play.", Toast.LENGTH_LONG).show(); 
      } else {    
       mIabHelper.queryInventoryAsync(mReceivedInventoryListener); 
      } 
     } 
    }); 

И тогда я пытаюсь вызвать mIabHelper.getPricesDev(), но это приводит к нулевому указателю, из-за mService is null ...

Какие функции я должен позвонить, чтобы настроить услугу?

+0

Вы пишете разрешения на манифест? –

+0

Да, все работает, но теперь у меня есть жестко закодированная цена на кнопках покупки ... Нажатие на кнопки, очевидно, устанавливает сервис (из launchPurchaseFlow()?), Но я хочу получить цены до покупок ... – EirikO

+0

Вот как это работает: вы вызываете mIabHelper.startSetup в onCreate и в слушателе, когда вы написали запрос на инвентаризацию, и только после этого в mReceivedInventoryListener у вас есть инвентарь, и вы можете сделать так, как inventory.getSkuDetails(). GetPrice() и update UI –

ответ

0

Я решил это делать простое изменение в моей exsisting код .. Что я сделал, чтобы изменить

mIabHelper.queryInventoryAsync(mReceivedInventoryListener); 

в

ArrayList<String> additionalSkuList = new ArrayList<String>(); 
additionalSkuList.add(ITEM_CAT_1); 
additionalSkuList.add(ITEM_CAT_2); 
additionalSkuList.add(ITEM_CAT_3); 
additionalSkuList.add(ITEM_PREMIUM); 
mIabHelper.queryInventoryAsync(true, additionalSkuList, mQueryFinishedListener); 

И в слушателе, я добавил

cat1Desc.setText(inventory.getSkuDetails(ITEM_CAT_1).getDescription()); 
cat2Desc.setText(inventory.getSkuDetails(ITEM_CAT_2).getDescription()); 
cat3Desc.setText(inventory.getSkuDetails(ITEM_CAT_3).getDescription()); 
PremiumDesc.setText(inventory.getSkuDetails(ITEM_PREMIUM).getDescription()); 

buyCat1Btn.setText(inventory.getSkuDetails(ITEM_CAT_1).getPrice()); 
buyCat2Btn.setText(inventory.getSkuDetails(ITEM_CAT_2).getPrice()); 
buyCat3Btn.setText(inventory.getSkuDetails(ITEM_CAT_3).getPrice()); 
buyPremiumBtn.setText(inventory.getSkuDetails(ITEM_PREMIUM).getPrice()); 
Смежные вопросы