Android 如何一次查询多个应用内产品的(价格)信息?

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应用内计费系统中,是否可以通过一次查询来查询所有产品的(价格)信息?最佳情况下,您可以传入产品ID,它将返回这些ID的信息


我要找的是与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
    的变形变量,您可以在其中进行指示
  • 在监听器中,您将能够迭代您的SKU并查看详细信息
  • 因此,首先

    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);
            }