谷歌IAP:skusBundle array associated with key ITEM_ID_LIST cannot contain more than 20 items.

时间:2024-11-08 19:35:26

这几天在接谷歌的支付,在拉谷歌商品列表的时候转菊花,长时间不返回(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) 还小于总批数,再请求下一批;等于总批数,跳出,做后面的事。。。

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