我使用Google提供的IABHelper在In App Billing Version 3中遇到间歇性问题。
在启动新购买之前,我使用queryInventoryAsync检查未使用的购买。如果发现我消耗任何未消耗的购买并开始新的交易,如果不是直接开始新的交易。 99%的时间它工作正常。
有时,当queryInventoryAsync未返回未使用的购买时,以下launchPurchaseFlow将失败并显示响应:7:项目已拥有。
INFO [IABHelper] Starting async operation: refresh inventory
INFO [IABHelper] Querying owned items, item type: inapp
INFO [IABHelper] Package name: jp.co.mycompany.myapp
INFO [IABHelper] Calling getPurchases with continuation token: null
INFO [IABHelper] Owned items response: 0
INFO [IABHelper] Continuation token: null
INFO [IABHelper] Querying SKU details.
INFO [IABHelper] queryPrices: nothing to do because there are no SKUs.
INFO [IABHelper] Querying owned items, item type: subs
INFO [IABHelper] Package name: jp.co.mycompany.myapp
INFO [IABHelper] Calling getPurchases with continuation token: null
INFO [IABHelper] Owned items response: 0
INFO [IABHelper] Continuation token: null
INFO [IABHelper] Querying SKU details.
INFO [IABHelper] queryPrices: nothing to do because there are no SKUs.
INFO [IABHelper] Ending async operation: refresh inventory
INFO [IABHelper] Constructing buy intent for jp.co.mycompany.myapp.myitem, item type: inapp
INFO [IABHelper] Launching buy intent for jp.co.mycompany.myapp.myitem Request code: 1001
INFO [IABHelper] Ending async operation: launchPurchaseFlow
INFO [IABHelper] Purchase canceled - Response: 7:Item Already Owned
queryInventoryAsync表示用户不拥有该项,但是launchPurchaseFlow表示用户没有。
在等待(有时几分钟,有时甚至更多)后奇怪地解决了问题。
有没有人经历过类似的事情?
作为参考,我使用的是3月15日最新更新的IABHelper版本。
答案 0 :(得分:1)
在移动版中清除Google Play服务应用的缓存。它可能适合你。
答案 1 :(得分:-1)
我确定这种情况表明您的应用中存在错误,但即使Google IAP也是导致此问题的因素之一。
考虑这种情况:用户购买商品,您正在服务器上处理它,然后应用程序在商品被消费之前崩溃。用户返回应用,您尝试再次处理该项目,但IAP返回空Inventory
(根本没有购买)。用户点击要购买的商品但收到ITEM_ALREADY_OWNED
。那很奇怪?!
所以没有购买,但该物品已经拥有,是吧?它肯定会在Google IAP方面进行本地缓存,但它是导致此问题的应用程序(应用程序崩溃)。 您可以等待数小时,但在大多数情况下,这不会解决问题。
有两种可能的解决方案。第一个对开发人员有利,它将清除Google IAP数据。
adb shell pm clear com.android.vending
几秒钟后,您将能够再次购买该物品。
第二种解决方案对开发者或最终用户都不好。您必须重新启动设备。重启后等待20到5分钟,您的商品将再次购买。如果客户的设备出现这种情况,请他/她从设置中手动清除Play商店数据或重启设备。
请记住根本原因是您的应用程序崩溃在使用该项目之前与IAP购买流程混乱。修复它,问题不再发生。