从Google Play购买价格,应用内购买
问题描述:
我想直接从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为null)
在我的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为空...
我应该调用哪些函数来设置服务?
答
我解决了这个在我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());
您是否向清单写入权限? – 2014-11-06 10:00:24
是的,一切正常,但现在我在购买按钮上有硬编码的价格... 点击按钮显然设置了服务(从launchPurchaseFlow()?),但我想在购买前获取价格... – EirikO 2014-11-06 13:27:38
以下是它的工作方式:您在onCreate和listener中调用mIabHelper.startSetup,就像您在查询库存时一样,只有在mReceivedInventoryListener中有库存后,才能像inventory.getSkuDetails()。getPrice()和更新UI – 2014-11-06 13:39:32