我已经在Android IAB v3上挣扎了一段时间了。我让它在我的测试设备上一直工作。但是,我的崩溃报告服务显示两个重复崩溃:一个用于空指针异常,一个用于非法状态异常。我已尝试更新Google示例代码,其中包含来自面临类似问题的Stackoverflow用户的大量建议。我已经完成了"读取崩溃报告,进行研究,尝试修复崩溃,提交更新,再次查看相同的崩溃报告"循环几次。我认为现在是采用不同方法的时候了。
如果您今天开始使用Android IAB,您会选择哪种代码示例,修复程序,文档等最新,最正确的资源?
这不一定是单一资源。任何示例代码的组合,SO帖子的补丁,博客帖子,甚至是Android SDK Manager"的更新。会有所帮助。理想情况下,我们可以为IAB新手创建一个资源,以防止他们在尝试集成服务时遇到麻烦和困难。
编辑1 :有关崩溃的更多信息
java.lang.IllegalStateException: Can't start async operation (refresh inventory) because another async operation(launchPurchaseFlow) is in progress.
at com.android.vending.billing.IabHelper.flagStartAsync(IabHelper.java:832)
at com.android.vending.billing.IabHelper.queryInventoryAsync(IabHelper.java:623)
at com.android.vending.billing.IabHelper.queryInventoryAsync(IabHelper.java:651)
...
java.lang.NullPointerException
at com.android.vending.billing.IabHelper.launchPurchaseFlow(IabHelper.java:398)
at com.android.vending.billing.IabHelper.launchPurchaseFlow(IabHelper.java:350)
...
这是两个例外。他们并不总是发生在IabHelper的同一个地方。我可能只是修补它们,但这似乎不是解决这个问题的正确方法。此外,它对任何其他人都没有帮助。
我可能会使用Google过时的示例代码。但是,我搜索了很多,而且找不到更新的内容。
答案 0 :(得分:6)
嘿我从10天开始就开始从事InApp购买工作,并且我已成功整合到我现有的应用程序中,并准备好将其投入使用。最初,当我开始这样做时,我已经下载了谷歌InApp计费示例,名为" Trivial Drive"来自here。
但它并没有给我很多帮助,因为它有很多问题和错误,所以我决定自己从头开始使用新的v3 api,你可以找到here。本教程有明确的解释,可以帮助您,如果您有时间查看YouTube视频,谷歌员工已经清楚地解释了如何集成它。
另外,如果您想要快速举例,我可以从this下载一个示例应用。如果您有任何问题,请随时询问。
答案 1 :(得分:2)
第一个IllegalStateException
正在发生,因为先前使用IAB Helper启动的操作尚未完成。
可能的原因:
mHelper.dispose()
活动中致电onDestroy()
。在您的情况下,您正在尝试在已启动launchPurchase时查询库存。
解决方案:
异步操作的状态反映在mAsyncInProgress
中的变量IabHelper
中。您必须将变量的范围更改为public
,默认情况下为包。然后,您可以在查询变量后采用以下两种方法之一:
确保您已在mHelper.dispose()
活动中致电onDestroy()
。
或
flagStartAsync
函数抛出异常。
要确定NullPointerException
的根本原因,您必须使用行号为launchPurchasFlow提供代码。
您应采取的其他预防措施:
为了避免“未设置IAB助手。无法执行操作:在IabHelper设置完成之前调用launchPurchaseFlow
时导致的launchPurchaseFlow。
您可以默认禁用购买按钮。启用IabHelper的onIabSetupFinished
回调按钮。因此,只有在IabHelper设置完成后,该按钮才会起作用。
答案 2 :(得分:1)
您可能正在使用异步操作。目前的IabHelper不是 如果您使用...异步方法,则安全。问题在于任何问题 当一个异步操作正在运行dispose可以在main上调用 线。在这种情况下,您将获得NullPointerExceptions和 IllegalStateExceptions。
尝试使用此克隆studiozanandroid
使用参考 Ans ,download the patch here来避免异步错误。
除此检查外,签名验证问题(例如此pay me lib)尝试使用 OpenIAB 库。
答案 3 :(得分:-1)
无论你做什么都不要使用IabHelper。这是早期版本的应用内结算的剩余部分。版本3不需要这样做,因为它引入了另一个层并且是错误的。
请继续执行结算,如官方文档中所示 - implementing in app billing。
API的V3基本上只包含三种方法,实现起来非常简单。如果您认真考虑应用内计费,那么无论如何您都必须了解这个过程是如何运作的,没有图书馆或帮助者可以帮助您。