当前Android IAB参考
我已经和安卓IAB v3斗争了一段时间了。我让它在我的测试设备上持续工作。然而,我的崩溃报告服务显示了两个反复出现的崩溃:一个是空指针异常,另一个是非法状态异常。我尝试过更新Google示例代码,其中包含Stackoverflow用户提出的许多建议,这些用户面临着类似的问题。我已经经历了几次“阅读崩溃报告,做研究,尝试修复崩溃,提交更新,再次查看相同的崩溃报告”的循环。我认为是时候换一种方式了 如果您现在开始使用Android IAB,您会选择什么作为最新、正确的代码示例、修复、文档等资源? 这不一定是一个单一的资源。任何示例代码、SO帖子中的补丁、博客帖子,甚至“使用Android SDK管理器更新”的组合都会很有帮助。理想情况下,我们可以为刚接触IAB的人创建一个资源,以避免他们在尝试集成服务时感到头痛和挣扎当前Android IAB参考,android,in-app-billing,Android,In App Billing,我已经和安卓IAB v3斗争了一段时间了。我让它在我的测试设备上持续工作。然而,我的崩溃报告服务显示了两个反复出现的崩溃:一个是空指针异常,另一个是非法状态异常。我尝试过更新Google示例代码,其中包含Stackoverflow用户提出的许多建议,这些用户面临着类似的问题。我已经经历了几次“阅读崩溃报告,做研究,尝试修复崩溃,提交更新,再次查看相同的崩溃报告”的循环。我认为是时候换一种方式了 如果您现在开始使用Android 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)
...
这是两个例外。它们并不总是发生在世界的同一个地方。我可能只是修补它们,但这似乎不是解决这个问题的正确方法。而且,这对其他任何人都没有帮助
有可能我使用的是来自Google的过时示例代码。然而,我已经搜索了很多次,没有找到比这更新的东西
您可能正在使用异步操作。当前辅助对象不是
在使用…异步方法的情况下是安全的。问题是在任何情况下
异步操作运行时,可以在主服务器上调用dispose
线在这种情况下,您将得到NullPointerException和
非法的例外情况
尝试使用此克隆
使用ref this可以避免异步错误
除此之外,请尝试使用libs.任何不使用的签名验证问题。这是早期版本的应用内计费的遗留问题。这在版本3中是不需要的,因为它引入了另一个层,并且有缺陷 只需按照官方文件所示实施计费即可
API的V3基本上只包含三种方法,实现起来非常简单。如果您认真对待应用内计费,那么您必须了解这个过程是如何工作的,没有库或帮助程序会帮助您。第一个
非法状态异常发生,因为之前使用IAB帮助程序启动的操作尚未完成
可能原因:
忘记在活动的ondestory()
中调用mHelper.dispose()
如果您正在启动“按按钮购买”,快速双击某些设备上的按钮将导致崩溃
在您的情况下,您正在尝试查询库存,而启动采购正在进行中
解决方案:
异步操作的状态反映在IabHelper
中的变量mAsyncInProgress
中。您必须将变量的范围更改为public
,默认情况下它是一个包。查询变量后,可以采用以下两种方法之一:
确保已在活动的ondestory()
中调用了mHelper.dispose()
取消当前操作并启动新操作忽略
或
当前请求(如果正在运行任何操作)
异常在flagStartAsync
函数中抛出
要找出NullPointerException
的根本原因,您必须提供带有行号的launchPurchasFlow代码
您应采取的其他预防措施:
为避免“IAB helper未设置。无法执行操作:在IAB helper设置完成之前调用launchPurchaseFlow
时导致的launchPurchaseFlow”
默认情况下,您可以禁用buy按钮。在IABHeloper的回调上启用按钮。因此,该按钮仅在IABHeloper设置完成时才起作用。嘿,我从10天起就一直在进行InApp购买,我已经成功地集成到我现有的应用程序中,并准备将其投入使用。最初,w当我开始这么做的时候,我已经从谷歌下载了名为“普通驱动器”的谷歌InApp计费示例
但这对我没有多大帮助,因为它有很多问题和bug,所以我决定使用新的v3 api从头开始做。本教程有明确的解释,可以帮助你,如果你有时间看youtube视频,谷歌员工已经清楚地解释了如何集成它
另外,如果您想快速了解示例,我提供了一个示例应用程序,您可以从中下载。如果您有任何问题,请随时提问。我绝对支持您的想法。如果您能提供有关上述两次崩溃的更多信息,那将是一件非常棒的事情。因此,这里不是提出此类问题的地方,而是应该在其他地方提出。确实是这样拥有这样一个资源是个好主意,它不是一个好地方。@MByD Stackoverflow经常出现在许多使用Anroid IAB v3有问题的开发人员那里。因此,我认为它是解决这个问题的理想地方。@MByD不再支持wiki风格的问题了,所以?我会尝试两件事。第一个非法状态执行可能是由重复的Requee引起的sts和一个简单的静态布尔值isRefreshInventoryProcessing可以解决这个问题。在刷新库存之前,第二次检查interweb是可用的。因为您的测试是在坚如磐石的互联网上完成的,我的经验告诉我,在google api中一次只能有一个请求是开发人员的责任。祝您在购买应用程序时好运//这是我们的任务所以我正在研究它。你提到的官方文件也在使用IAB助手…你可以在这里查看: