这几天在接谷歌的支付,在拉谷歌商品列表的时候转菊花,长时间不返回(querySkuDetails),一开始以为因为IAP有key不对导致的,查了下发现没有问题。

再看logcat,发现了这行:

Input Error: skusBundle array associated with key ITEM_ID_LIST cannot contain more than  items.

确实IAP商品有23个,解决方案有两个:

1. https://code.google.com/archive/p/marketbilling/issues/123

这个IabHelper的patch分批处理了request。这个patch产生有一段时间了,不知道谷歌是否把这个merge进去了,求知道的告知。

2. 其实也不是第二个解决方案,改IabHelper是从谷歌层修改,由于目前我在开发的游戏之前封装了谷歌层,加了一层自己的Helper,再打成jar包,我又比较懒不想再弄一遍,所以第二个方案就是从业务层分批请求。

业务层分批的时候注意不能在同一帧请求两次或以上,不然只会返回最后一次的请求数据(亲测= =)。

我的做法(简单描述下):

(1) 先计算总批数,有几批

(2) 开始请求第一批,等待第一批返回

(3) 第一批返回,加入商品list,当前批数+1。

(4) 还小于总批数,再请求下一批;等于总批数,跳出,做后面的事。。。

设置了一个总的转菊花时间,一般测试下来网络稳定的话两批也就两三秒就拉全了。

谷歌IAP:skusBundle array associated with key ITEM_ID_LIST cannot contain more than 20 items.的更多相关文章

  1. array group by key javascript

    array group by key javascript calendar Array.reduce https://developer.mozilla.org/en-US/docs/Web/Jav ...

  2. Sublime key bindings使用

    开启vi mode后,可以使用很多的VI快捷方式,所以我的sublime已经不是单纯的st了,st的VI模式不完全支持所有的快捷键.我们来看一段官网的key bindings示例: { "k ...

  3. Hibernate 多表关联映射- Hibernate中使用的集合类型(set,list,array,bag,map)

    Set类型的使用: <hibernate-mapping package="cn.model"> <class name="Department&quo ...

  4. PHP array_key_exists() 函数(判断某个数组中是否存在指定的 key)

    定义和用法 array_key_exists() 函数判断某个数组中是否存在指定的 key,如果该 key 存在,则返回 true,否则返回 false. 语法 array_key_exists(ke ...

  5. PHP 如何向关联数组指定的 Key 之前插入元素

    PHP 关联数组可以通过三种方式插入新元素: $array[$insert_key] = $insert_value; $array = array_merge($array, $insert_arr ...

  6. PJzhang:谷歌在中国大陆可以使用的部分服务

    猫宁!!! 参考链接:https://lusongsong.com/reed/170.html https://www.williamlong.info/archives/2124.html http ...

  7. es6(var,let,const,set,map,Array.from())

    1.变量声明--var,const,let 1.1 var - (全局作用域,局部作用域)会有变量提升 //第一个小例子 <script> var num = 123; function ...

  8. php xml 转array 函数 (原创)

    /** *Author zhudongchang *Date 2015/6/12 原创 *xml 转array 函数 *@param string $xmlStr xml字符串 *@return st ...

  9. JavaScript (六) js的基本语法 - - - Math 及 Date对象、String对象、Array对象

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一.Math 1.Math对象的案例 var result= Math.max(10,20,30,40) ...

随机推荐

  1. 从今天开始学习Java了

    //今天第一天学习了Java的起源兴起和用途,Java的特点和优势,又重新练习了hello world, public class Hello{ public static void main(Str ...

  2. 老李推荐:第1章2节《MonkeyRunner源码剖析》概述:边界

    老李推荐:第1章2节<MonkeyRunner源码剖析>概述:边界   边界 怎么样才算分析清楚一个事物的原理是什么呢?就以前面提到的<LINUX内核源代码情景分析>为例子,分 ...

  3. JavaScript Break 和 Continue 语句

    1.break:终止本层循坏,继续执行本次循坏后面的语句: 当循坏有多层时,break只会跳过一层循坏 2.continue:跳过本次循坏,继续执行下次循坏 对于for循环,continue执行后,继 ...

  4. 如何掌握并提高linux运维技能

    初中级Linux运维人员们系统学习并迅速掌握Linux的运维实战技能.学习路线大纲如下: 入门基础篇 系统运维篇 Web运维篇 数据库运维篇 集群实战篇 运维监控篇 第一篇:Linux入门(安装.配置 ...

  5. 连接greenvpn 公司内网连接

    查看计算机路由表 Route print 跟踪路由表 Tracert ip or dnsname 本次需求,连接greenvpn之后,公司10.130.41.** 网段的机器无法使用.本机ip 10. ...

  6. Twitter数据抓取的方法(二)

    Scraping Tweets Directly from Twitters Search Page – Part 2 Published January 11, 2015 In the previo ...

  7. 卷积神经网络CNN公式推导走读

      0有全连接网络,为什么还需要RNN 图像处理领域的特殊性,      全连接网络缺点:                              RNN解决办法:      1参数太多       ...

  8. 构造函数与普通函数的区别还有关于“new”操作符的一些原理

    有一种创建对象的方法叫做工厂模式,例如: function person(name,age){ var o=new Object(); o.name=name; o.age=age; return o ...

  9. [Android]Gradle 插件 DiscardFilePlugin(class注入&清空类和方法)

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/6732128.html Android Gradle 插件 Di ...

  10. git-ftp 用git管理ftp空间

    ftp管理不能实现版本控制,而且多电脑工作时,同步很成问题. git-ftp可以完美的解决问题 下面是我的趟坑之路,本机的环境是win10,首先你的机器得装有git. git-ftp的地址https: ...