12

使用我的项目修改 v3 示例文件可以正常工作。但是我的朋友只是通过关闭 wi-fi 并打开飞行模式来测试代码。这似乎导致无法查询应用内库存。

// Listener that's called when we finish querying the items and subscriptions we own
private final IabHelper.QueryInventoryFinishedListener mGotInventoryListener = new IabHelper.QueryInventoryFinishedListener() {
    @Override
    public void onQueryInventoryFinished(IabResult result, Inventory inventory) {

        if (result.isFailure()) {
            // STOPS here and doesn't continue on with no network connection
            return;
        }

        ......
    }
};

我认为在最初成功购买后,v3 将其存储在本地缓存中,这样它就不必总是有网络连接来检查。有没有其他人遇到过这个问题?我希望我遗漏了一些完全明显的东西,或者如果它应该是这样工作的。

4

4 回答 4

8

我想我可能已经找到了答案。在下面的 v3 的 TrivialDriveExample 中,我在 mHelper.startSetup() 函数中调用 queryInventoryAsync 函数,如下所示:

Log.d(TAG, "Setup successful. Querying inventory.");
mHelper.queryInventoryAsync(mGotInventoryListener);

相反,现在我传递了我要查询的 SKU 的字符串数组列表:

List<String> skulist = new ArrayList<String>();
skulist.add("my_sku_name1");
skulist.add("my_sku_name2");
mHelper.queryInventoryAsync(true, skulist, mGotInventoryListener);

然后我通过打开飞行模式进行测试,我能够很好地查询我的购买!

于 2013-03-18T07:49:21.547 回答
2

问题是,在您的第一种方法中,API 不知道存在哪些 SKU,并且默认情况下(单参数版本)正在尝试查询该列表。在飞行模式下这是不可能的 - 要么是因为它没有缓存 skus 列表,要么是因为一些内部错误阻止它完成。

您可以发送您想要查询的 SKU 列表(就像您稍后所做的那样),也可以直接取消在线查询 sku 列表。

helper.queryInventoryAsync(false, yourListener);

学分:jmrmb80

如果您需要此信息(即在您的应用程序中显示价格),则更有可能取决于。

(请参阅该功能的其他重载或已经给出的答案。我认为您很可能不需要 SKU 来检查是否进行了购买,所以我会寻求 jmrmb80 的答案 - 对我来说,这解决了不在飞行模式下识别购买

于 2014-09-25T10:07:51.723 回答
1

For me the following bit worked ...

mHelper.queryInventoryAsync(false, mGotInventoryListener);

instead of

mHelper.queryInventoryAsync(mGotInventoryListener);

I found it in another link a Error refreshing iventory (querying prices of items). (response: 6:Error)

于 2014-03-05T05:32:36.547 回答
1

我解决了这个问题:

final ArrayList<String> iabItemSkus = new ArrayList<String>();
iabItemSkus.add(MyGame.productID_FULLVERSION);

// Disable SKU details if no network connection
boolean checkSkuDetails = isWifiConnected() ? true : false;

Gdx.app.log("IAB", "checkSkuDetails : " + checkSkuDetails);

mHelper.queryInventoryAsync(checkSkuDetails, iabItemSkus, mGotInventoryListener);

如果没有网络,则无法获取 Sku 详​​细信息。

于 2016-06-29T10:09:48.553 回答