Android 如何一次查询多个应用内产品的(价格)信息?
在Android应用内计费系统中,是否可以通过一次查询来查询所有产品的(价格)信息?最佳情况下,您可以传入产品ID,它将返回这些ID的信息Android 如何一次查询多个应用内产品的(价格)信息?,android,in-app-purchase,google-play,Android,In App Purchase,Google Play,在Android应用内计费系统中,是否可以通过一次查询来查询所有产品的(价格)信息?最佳情况下,您可以传入产品ID,它将返回这些ID的信息 我要找的是与Android Market相当的SKProductsRequest 现在可以使用计费API v3。你可以通过这种方法获得信息。例如 Google示例代码段(如)和我看到的其他代码段不适合我的使用。我需要一个清单实例或一个mHelper(IAB助手)。看起来这个问题的投票数要比被接受答案的投票数大,所以我并不孤单。我的用法类似于triotived
我要找的是与Android Market相当的SKProductsRequest 现在可以使用计费API v3。你可以通过这种方法获得信息。例如
Google示例代码段(如)和我看到的其他代码段不适合我的使用。我需要一个
清单
实例或一个mHelper
(IAB助手)。看起来这个问题的投票数要比被接受答案的投票数大,所以我并不孤单。我的用法类似于triotivedrive示例(),所以让我们看看它
在main活动
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
仅返回用户已购买/处理的内容(耗材或非耗材产品、订阅等)
如果你的处境相同(想一开始就知道所有细节),你需要做两件事:
mHelper.startSetup
中调用queryInventoryAsync
的变形变量,您可以在其中进行指示String[] SKUS = { SKU_1, SKU_2, SKU_3, SKU_4, SKU_5 }; // products
...
mHelper.queryInventoryAsync(true, Arrays.asList(SKUS), new ArrayList<String>(), mGotInventoryListener);
希望这有帮助。很快,我需要升级到一个非基于AIDL的解决方案。非常感谢您的帖子,它很有效!但我有一个问题:getSkuDetails()是返回本地化货币,还是返回开发人员的默认价格集(以美元为单位)?在我看来,它只返回美元,不管我是否将我的系统和google play帐户设置为法国。你知道这将记录在哪里吗?我似乎找不到足够的文档用于此目的。@sammiwei抱歉,我不知道。
price\u currency\u code
提供skuDetails包中的货币
String[] SKUS = { SKU_1, SKU_2, SKU_3, SKU_4, SKU_5 }; // products
...
mHelper.queryInventoryAsync(true, Arrays.asList(SKUS), new ArrayList<String>(), mGotInventoryListener);
for (String sku: SKUS) {
SkuDetails skuDetails = inventory.getSkuDetails(sku);
String price = skuDetails.getPrice();
((android.widget.TextView)findViewById( *sku's ID* )).setText(price);
}