通过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存储在本地,在它的缓存,这样,它并不总是必须有一个网络连接,检查后。 有没有其他人遇到了这个问题? 我希望我失去了一些东西完全明显,或者如果这是它如何工作的。
我想我可能已经找到了答案。 在下面的V3的TrivialDriveExample我打电话的mHelper.startSetup(该queryInventoryAsync功能)功能,如下所示:
Log.d(TAG, "Setup successful. Querying inventory.");
mHelper.queryInventoryAsync(mGotInventoryListener);
相反,现在我通过我的单品,我要查询的String数组列表:
List<String> skulist = new ArrayList<String>();
skulist.add("my_sku_name1");
skulist.add("my_sku_name2");
mHelper.queryInventoryAsync(true, skulist, mGotInventoryListener);
然后,我通过打开飞行模式测试,我可以查询我的采购罚款!
问题是,在你的第一种方法,该API不知道什么单品存在,每默认(单PARAM版本)试图查询该列表。 在飞行模式,这是不可能的 - 要么是因为它不缓存的SKU列表,或者有一些内部错误阻止它完成。
您可以在您要查询的SKU列表发送(像你这样以后),也可以只为剿SKU列表中的在线查询。
helper.queryInventoryAsync(false, yourListener);
学分:jmrmb80
如果您需要此信息(即在您的应用程序显示的价格),这取决于更容易。
(看到该函数的其他重载或已经给出的答案最有可能你并不需要的SKU,用于检查购物的行为我想,所以我会去jmrmb80的答案 - 对我来说这解决了这个问题不认识到飞行模式购买
对我来说,以下位工作...
mHelper.queryInventoryAsync(假的,mGotInventoryListener);
代替
mHelper.queryInventoryAsync(mGotInventoryListener);
我发现它在另一个链接一个错误刷新iventory(查询项目的价格)。 (响应:6:错误)
我解决了这个问题远:
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细节,如果没有网络。
文章来源: In-app billing v3 unable to query items without network connection or in airplane/flight mode