Google应用内结算:无法查询订阅详情

Google In-app billing: Can't query subscription details

我有一个关于 Google 应用内结算 API 的奇怪问题。

我想获取可用订阅的详细信息,以在 UI 上显示其本地化价格。我正在使用 IabHelper 查询我指定的 SKU 的详细信息,但结果不包含任何产品,但在我购买订阅后它可以正常工作,即使我随后取消订阅并重新安装应用程序也是如此。

这是我的代码:

    List<String> additionalSkus = new ArrayList<>();

    for (Subscription subscription : subscriptions) {
        additionalSkus.add(subscription.getSku());
    }

    iabHelper.queryInventoryAsync(true, additionalSkus, new IabHelper.QueryInventoryFinishedListener() {
        @Override
        public void onQueryInventoryFinished(IabResult result, Inventory inv) {
            if (iabHelper == null || result.isFailure()) {
                Log.i("subs", result.getMessage());
            }

            for (Subscription subscription : subscriptions) {
                SkuDetails skuDetails = inv.getSkuDetails(subscription.getSku());

                if (skuDetails != null) {
                    subscription.setLocalizedPrice(skuDetails.getPrice());
                    Log.i("subs", subscription.getLocalizedPrice());
                }

            }
        }
    });

我已正确设置应用内结算流程的所有内容。我的产品处于活动状态,我有一个已发布的测试版 APK,我什至可以获取我的托管产品的详细信息,并购买托管产品和订阅,但这不起作用。

如果您使用的是最新版本的 IabHelper class,您应该注意与要查询的其他 SKU 相关的函数参数被拆分为 moreItemSkusPRODUCT 库存单位)和 moreSubsSkusSUBSCRIPTIONS 库存单位)。

public void queryInventoryAsync(final boolean querySkuDetails, final List<String> moreItemSkus,
        final List<String> moreSubsSkus, final QueryInventoryFinishedListener listener)

在你的情况下,你的电话应该是

iabHelper.queryInventoryAsync(true, null, additionalSkus, new IabHelper.QueryInventoryFinishedListener() ...