IABHelper。 queryInventoryAsync不返回任何购买,但启动产品流失败并显示“已拥有的项目”

时间:2013-03-21 08:36:48

标签: android in-app-billing

我使用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版本。

2 个答案:

答案 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购买流程混乱。修复它,问题不再发生。