使用我的项目修改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会将其存储在本地缓存中,这样它就不必总是有网络连接才能进行检查。有没有其他人遇到过这个问题?我希望我遗漏了一些显而易见的东西,或者如果这是它应该如何工作的话。
发布于 2013-03-18 15:49:22
我想我可能找到答案了。在接下来的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);然后,我通过打开飞行模式进行了测试,我可以查询我的购买!
发布于 2014-09-25 18:07:52
问题是,在您的第一种方法中,API不知道存在什么SKU,并且根据默认情况(单参数版本)尝试查询该列表。在飞行模式下,这是不可能的-要么是因为它不缓存skus列表,要么是因为有一些内部错误阻止它完成。
您可以发送您想要查询的sku列表(就像您稍后所做的那样),或者您可以直接抑制sku列表的在线查询。
helper.queryInventoryAsync(false, yourListener);致谢对象: jmrmb80
这取决于你是否需要这些信息(即在你的应用程序中显示价格)。
(请参阅该函数的其他重载或已给出的答案。我想你很可能不需要SKU来检查是否进行了购买,所以我选择了jmrmb80 -对我来说,这解决了在飞行模式下无法识别购买的问题
发布于 2014-03-05 13:32:37
mHelper.queryInventoryAsync(false,mGotInventoryListener);
而不是
mHelper.queryInventoryAsync(mGotInventoryListener);
https://stackoverflow.com/questions/15471131
复制相似问题