我们有一个支持In App Billing v3的Android应用程序.在我们的测试中,其他一切工作正常,但我们发现通过查询库存也可以获得非活动产品.
这就是我们在应用商品库存中查询Google Play的方式:
ArrayList<String> moreSkus = new ArrayList<String>();
moreSkus.add("gas");
moreSkus.add("premium");
mHelper.queryInventoryAsync(true, moreSkus, mGotInventoryListener);
...
IabHelper.QueryInventoryFinishedListener mGotInventoryListener = new IabHelper.QueryInventoryFinishedListener() {
public void onQueryInventoryFinished(IabResult result, final Inventory inventory) {
if(inventory.hasDetails("premium")) {
System.out.println("Inactive product is also visible to app!");
}
}
};
Run Code Online (Sandbox Code Playgroud)
在这两个产品中,"premium"处于非活动状态,但IabHelper.QueryInventoryFinishedListener中的print语句仍然执行!
有没有办法只获得有效产品?
我在Eclipse(Kepler)中使用SDK管理器更新了Android SDK.当我将构建目标更改为Android 5.0 Lollipop时,Eclipse不再构建项目.清理项目后,"gen"文件夹变为空,并且不再生成R.java和其他文件,尽管我已启用"自动构建".手动运行"Build Project"或"Build All"也不起作用.我不认为它是由源代码或资源文件错误引起的,因为当我将构建目标更改为任何较旧的Android版本(20及以下版本)时,它会再次开始构建.
SDK更新几乎包含所有内容,包括最新的构建工具(21.1.1),SDK工具(23.0.5),平台工具(21),当然还有Android 5.0(API 21)本身.我使用的计算机运行Windows Vista Home Premium SP2(32位).我也尝试在我的Mac上编译相同的项目,并没有那样的问题.
任何人都可以看到有什么问题?
2014年11月24日更新:
我在windows中打开了详细记录构建过程 - > Preferences - > Android - > Build - > Build output - verbose.启用"自动构建"并且Android构建目标为5.0(级别21),我只有两行输出:
删除生成的java类.
开始完整的包构建.
但是,当我将构建目标更改为Android 4.4.2(级别19)时,输出非常长.
2014年12月1日更新:
感谢@sagis,我现在可以构建针对Android 5.0的Android项目.起初我只尝试更改"已安装的JRE"和"编译器"首选项,但它不起作用.所以sagis是对的,我不得不卸载现有的JRE(我实际上也卸载了JDK).
我在此过程中遇到的其他问题: