目前的Android IAB参考

时间:2014-10-03 19:50:47

标签: android in-app-billing

我已经在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过时的示例代码。但是,我搜索了很多,而且找不到更新的内容。

4 个答案:

答案 0 :(得分:6)

嘿我从10天开始就开始从事InApp购买工作,并且我已成功整合到我现有的应用程序中,并准备好将其投入使用。最初,当我开始这样做时,我已经下载了谷歌InApp计费示例,名为" Trivial Drive"来自here

但它并没有给我很多帮助,因为它有很多问题和错误,所以我决定自己从头开始使用新的v3 api,你可以找到here。本教程有明确的解释,可以帮助您,如果您有时间查看YouTube视频,谷歌员工已经清楚地解释了如何集成它。

另外,如果您想要快速举例,我可以从this下载一个示例应用。如果您有任何问题,请随时询问。

答案 1 :(得分:2)

第一个IllegalStateException正在发生,因为先前使用IAB Helper启动的操作尚未完成。

可能的原因:

  1. 忘记在mHelper.dispose()活动中致电onDestroy()
  2. 如果您在点击按钮时启动购买,请快速双击某个设备上的按钮将导致崩溃。
  3. 在您的情况下,您正在尝试在已启动launchPurchase时查询库存。

    解决方案: 异步操作的状态反映在mAsyncInProgress中的变量IabHelper中。您必须将变量的范围更改为public,默认情况下为包。然后,您可以在查询变量后采用以下两种方法之一:

    确保您已在mHelper.dispose()活动中致电onDestroy()

    1. 取消当前操作并开始新操作忽略
      1. 当前请求是否正在运行任何操作。
      2. 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基本上只包含三种方法,实现起来非常简单。如果您认真考虑应用内计费,那么无论如何您都必须了解这个过程是如何运作的,没有图书馆或帮助者可以帮助您。