這幾天在接谷歌的支付,在拉谷歌商品列表的時候轉菊花,長時間不返回(querySkuDetails),一開始以為因為IAP有key不對導致的,查了下發現沒有問題。 再看logcat,發現了這行: 確實IAP商品有23個,解決方案有兩個: 1. https://code.google.com/archi ...
這幾天在接谷歌的支付,在拉谷歌商品列表的時候轉菊花,長時間不返回(querySkuDetails),一開始以為因為IAP有key不對導致的,查了下發現沒有問題。
再看logcat,發現了這行:
Input Error: skusBundle array associated with key ITEM_ID_LIST cannot contain more than 20 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) 還小於總批數,再請求下一批;等於總批數,跳出,做後面的事。。。
設置了一個總的轉菊花時間,一般測試下來網路穩定的話兩批也就兩三秒就拉全了。