jjzjj

android - 当前的 Android IAB 引用

coder 2023-12-10 原文

一段时间以来,我一直在为 Android IAB v3 苦苦挣扎。我让它在我的测试设备上始终如一地工作。但是,我的崩溃报告服务显示了两次重复发生的崩溃:一次是空指针异常,一次是非法状态异常。我尝试根据面临类似问题的 Stackoverflow 用户的大量建议更新 Google 示例代码。我经历了几次“阅读崩溃报告、进行研究、尝试修复崩溃、提交更新、再次查看相同的崩溃报告”循环。我认为是时候采用不同的方法了。

如果您今天开始使用 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)
   ...

这是两个异常(exception)。它们并不总是发生在 IabHelper 中的相同位置。我可能只是修补它们,但这似乎不是解决这个问题的正确方法。此外,它对其他任何人都没有帮助。

我使用的可能是来自 Google 的过时示例代码。但是,我搜索了很多,找不到更新的内容。

最佳答案

嘿,从 10 天开始,我还致力于 InApp Purchase,我已经成功地集成到我现有的应用程序中,并准备好让它上线。最初,当我开始这样做时,我从 here 下载了名为“Trivial Drive”的 Google InApp Billing Example。 .

但它对我没有太大帮助,因为它有很多问题和错误,所以我决定使用新的 v3 api 从头开始​​自己做,你可以找到 here .本教程有清晰的解释,可以帮助您,如果您有时间,请参阅 this youtube 视频,其中谷歌员工清楚地解释了如何集成它。

此外,如果您想要快速示例,我有一个示例应用程序,您可以从 here 下载.如果您有任何问题,请随时提出。

关于android - 当前的 Android IAB 引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26185808/

有关android - 当前的 Android IAB 引用的更多相关文章

  1. ruby - 一个 YAML 对象可以引用另一个吗? - 2

    我想让一个yaml对象引用另一个,如下所示:intro:"Hello,dearuser."registration:$introThanksforregistering!new_message:$introYouhaveanewmessage!上面的语法只是它如何工作的一个例子(这也是它在thiscpanmodule中的工作方式。)我正在使用标准的ruby​​yaml解析器。这可能吗? 最佳答案 一些yaml对象确实引用了其他对象:irb>require'yaml'#=>trueirb>str="hello"#=>"hello"ir

  2. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

  3. ruby - 如何找到调用当前方法的方法 - 2

    如何找到调用此方法的位置?defto_xml(options={})binding.pryoptions=options.to_hifoptions&&options.respond_to?(:to_h)serializable_hash(options).to_xml(options)end 最佳答案 键入caller。这将返回当前调用堆栈。文档:Kernel#caller.例子[0]%rspecspec10/16|===================================================62=====

  4. ruby - Chef LW 资源属性默认值如何引用另一个属性? - 2

    我正在尝试将一个资源属性的默认值设置为另一个属性的值。我正在为我正在构建的tomcat说明书定义一个资源,其中包含以下定义。我想要可以独立设置的“名称”和“服务名称”属性。当未设置服务名称时,我希望它默认为为“名称”提供的任何内容。以下不符合我的预期:attribute:name,:kind_of=>String,:required=>true,:name_attribute=>trueattribute:service_name,:kind_of=>String,:default=>:name注意第二行末尾的“:default=>:name”。当我在Recipe的新block中引用我

  5. ruby - 以毫秒为单位获取当前系统时间 - 2

    在Ruby中,以毫秒为单位获取自纪元(1970)以来的当前系统时间的正确方法是什么?我试过了Time.now.to_i,好像不是我想要的结果。我需要结果显示毫秒并且使用long类型,而不是float或double。 最佳答案 (Time.now.to_f*1000).to_iTime.now.to_f显示包含十进制数字的时间。要获得毫秒数,只需将时间乘以1000。 关于ruby-以毫秒为单位获取当前系统时间,我们在StackOverflow上找到一个类似的问题:

  6. ruby - 在 Ruby 中,为什么 Array.new(size, object) 创建一个由对同一对象的多个引用组成的数组? - 2

    如thisanswer中所述,Array.new(size,object)创建一个数组,其中size引用相同的object。hash=Hash.newa=Array.new(2,hash)a[0]['cat']='feline'a#=>[{"cat"=>"feline"},{"cat"=>"feline"}]a[1]['cat']='Felix'a#=>[{"cat"=>"Felix"},{"cat"=>"Felix"}]为什么Ruby会这样做,而不是对object进行dup或clone? 最佳答案 因为那是thedocumenta

  7. ruby - 引用具有指定索引的枚举器值 - 2

    假设我有一个可枚举对象enum,现在我想获取第三个项目。我知道一种通用方法是转换成数组,然后使用索引访问,如:enum.to_a[2]但这种方式会创建一个临时数组,效率可能很低。现在我使用:enum.each_with_index{|v,i|breakvifi==2}但这非常丑陋和多余。执行此操作最有效的方法是什么? 最佳答案 你可以使用take剥离前三个元素,然后剥离last从take给你的数组中获取第三个元素:third=enum.take(3).last如果您根本不想生成任何数组,那么也许:#Ifenumisn'tanEnum

  8. ruby - 当前的 Ruby 方法是通过 super 调用的吗? - 2

    在运行时的方法中,有没有办法知道该方法是否已通过子类中的super调用?例如moduleSuperDetectordefvia_super?#whatgoeshere?endendclassFooincludeSuperDetectordefbarvia_super??'super!':'nothingspecial'endendclassFu"nothingspecial"Fu.new.bar#=>"super!"我如何编写via_super?,或者,如果需要,如何编写via_super?(:bar)? 最佳答案 可能有更好的方法

  9. ruby-on-rails - 获取当前时间的单元测试代码 - 2

    为获取当前时间的代码编写单元测试的最佳方法是什么?例如,某些对象可能仅在工作日创建,其他对象在检查执行某些操作的权限时会考虑当前时间等。我想我应该模拟Date.today和Time.now。这是正确的做法吗?更新:两种解决方案(a)Time.is和(b)Time.stubs(:now).returns(t)都有效。(a)是非常好的方法,但(b)解决方案将与其他测试代码更加一致。在此question作者要求一个通用的解决方案。对于Ruby,在我的选项中,上述两个解决方案是simpler因此比提取获取当前日期/时间的代码更好。顺便说一句,我建议使用Chronic获得所需的时间,例如requ

  10. ruby - 在多个线程中引用类方法会导致自动加载循环依赖崩溃 - 2

    代码:threads=[]Thread.abort_on_exception=truebegin#throwexceptionsinthreadssowecanseethemthreadseputs"EXCEPTION:#{e.inspect}"puts"MESSAGE:#{e.message}"end崩溃:.rvm/gems/ruby-2.1.3@req/gems/activesupport-4.1.5/lib/active_support/dependencies.rb:478:inload_missing_constant':自动加载常量MyClass时检测到循环依赖稍加研究后,

随机推荐