当前Android IAB参考

当前Android IAB参考,android,in-app-billing,Android,In App Billing,我已经和安卓IAB v3斗争了一段时间了。我让它在我的测试设备上持续工作。然而,我的崩溃报告服务显示了两个反复出现的崩溃:一个是空指针异常,另一个是非法状态异常。我尝试过更新Google示例代码,其中包含Stackoverflow用户提出的许多建议,这些用户面临着类似的问题。我已经经历了几次“阅读崩溃报告,做研究,尝试修复崩溃,提交更新,再次查看相同的崩溃报告”的循环。我认为是时候换一种方式了 如果您现在开始使用Android IAB,您会选择什么作为最新、正确的代码示例、修复、文档等资源? 这

我已经和安卓IAB v3斗争了一段时间了。我让它在我的测试设备上持续工作。然而,我的崩溃报告服务显示了两个反复出现的崩溃:一个是空指针异常,另一个是非法状态异常。我尝试过更新Google示例代码,其中包含Stackoverflow用户提出的许多建议,这些用户面临着类似的问题。我已经经历了几次“阅读崩溃报告,做研究,尝试修复崩溃,提交更新,再次查看相同的崩溃报告”的循环。我认为是时候换一种方式了

如果您现在开始使用Android IAB,您会选择什么作为最新、正确的代码示例、修复、文档等资源?

这不一定是一个单一的资源。任何示例代码、SO帖子中的补丁、博客帖子,甚至“使用Android SDK管理器更新”的组合都会很有帮助。理想情况下,我们可以为刚接触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助手…你可以在这里查看: