Android 我的助手。queryInventoryAsync不返回任何购买,但启动产品流失败,返回“0”;“已拥有的物品”;

Android 我的助手。queryInventoryAsync不返回任何购买,但启动产品流失败,返回“0”;“已拥有的物品”;,android,in-app-billing,Android,In App Billing,我在使用谷歌提供的IABHelper时遇到了应用内计费版本3的间歇性问题 在启动新购买之前,我使用queryInventoryAsync检查未使用的购买。如果发现我消费了任何未消费的商品并开始了新的交易,如果没有,直接开始新的交易。99%的时间它工作正常 有时,当queryInventoryAsync没有返回任何未使用的购买时,以下launchPurchaseFlow会失败,并给出响应:7:物品已拥有 INFO [IABHelper] Starting async operation: r

我在使用谷歌提供的IABHelper时遇到了应用内计费版本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版本。

在手机上清除Google Play Service应用程序的缓存。它可能对你有用。

我确信这种情况表明你的应用程序存在缺陷,但即使谷歌IAP也是导致问题的因素之一

考虑这样的情况:用户购买物品,您的服务器正在处理它,然后应用程序在物品被消费之前崩溃。用户返回应用程序时,您试图再次处理该项目,但IAP返回空的
库存
(根本没有购买)。用户单击要购买的商品,但收到已拥有的
商品
。真奇怪

所以没有购买,但物品已经拥有了,是吗?谷歌IAP端的本地缓存肯定有问题,但造成这个问题的是你的应用程序(应用程序崩溃)您可以等待数小时,但在大多数情况下,这无法自行解决

有两种可能的解决办法。第一个对开发者来说是好的,这将清除Google IAP数据

adb shell pm clear com.android.vending
几秒钟后,您将能够再次购买该物品

第二种解决方案对开发人员或最终用户都不好。您必须重新启动设备。重新启动后,等待20到5分钟,您的商品将可再次购买。如果客户的设备出现这种情况,请他/她手动从设置中清除播放存储数据或重新启动设备


请记住根本原因是应用程序崩溃,这会在物品消费前扰乱IAP购买流程。修复它,问题将不再出现。

我也有同样的问题。你解决了这个问题吗。这可能是由google local Caching引起的这也会发生在您在进行消费呼叫之前有一个超时的情况下:商品已购买,但来自google的确认从未返回到应用程序(超时):应用程序不知道它需要消费购买,除非queryInventoryAsync返回一些东西,由于缓存的原因,它只会在很久以后才会这样做。真是一个笑话。他们删除了unmanaged,说“你认为他们是托管的”。好吧,但为什么愚蠢的GooglePlay服务在几个小时后清除了缓存,仍然说我没有购买?在我的情况下,问题与缓存无关-清除缓存没有任何帮助。不,你错了。谷歌播放IAP再次被打破。谷歌在其文档中表示,如果您购买了但未消费产品,则在查询您的库存时,该产品将被退回。开玩笑的是谷歌又毁了一切——我在几台设备上进行了测试,它继续说我没有购买,而我有2台,不能再购买了。他们杀了IAP!那些混蛋。@Tertium我想你的应用程序可能有一个bug,因为它可以按预期为其他人工作。在你责怪谷歌的错误之前,请检查一下你糟糕的代码,这样也许它就可以按照文档中的描述开始工作了。我从2009年开始使用android(如果你不想黑客攻击,而是想创建一个可以工作的应用程序,那将是一场噩梦),使用它的IAPs-来自v2 api。我在android、ios和windows应用商店上使用IAP,而且我开发了安全服务器后端,所以我知道我在说什么。谷歌几乎从未修复过它的错误,它只是关闭一个服务,打开另一个,甚至不试图保存一个接口继承。我总是写一些变通方法来摆脱谷歌的bug。拥有最新lib和iabhelper的谷歌根本没有做它应该做的事情!我的应用程序中的哪种错误会阻止购买?