在Android应用程序结算中,是否可以使用一个查询以某种方式查询所有产品的(价格)信息?最理想的情况是,您可以传递产品ID,并返回信息。
我正在寻找的是Android Market的SKProductsRequest等价物。 http://developer.apple.com/library/ios/#documentation/StoreKit/Reference/SKProductsRequest/Reference/Reference.html#//apple_ref/occ/cl/SKProductsRequest
答案 0 :(得分:14)
现在可以使用Billing API v3。您可以使用getSkuDetails()
方法获取信息。示例是here。
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;
}
}
}
答案 1 :(得分:0)
我看到的Google示例代码段(如https://developer.android.com/google/play/billing/billing_integrate.html#QueryDetails)和其他代码段都不适合我的用法。我要么需要一个inventory
实例,要么需要一个mHelper
(这是IAB帮助器)。看起来问题的投票数大于接受的答案的投票数,所以我并不孤单。我的用法类似于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
的多态变体。因此,第一:
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的解决方案。