18

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

4

2 回答 2

1

在移动设备中清除 Google Play 服务应用程序的缓存。它可能对你有用。

于 2014-05-09T07:25:15.433 回答
-1

我确信这种情况表明您的应用程序存在错误,但即使 Google IAP 也是导致问题的因素之一。

考虑这样的情况:用户购买项目,您正在服务器上处理它,然后应用程序在项目被消费之前崩溃。用户返回应用程序,您正尝试再次处理该项目,但 IAP 返回为空Inventory(根本没有购买)。用户单击要购买的项目但收到ITEM_ALREADY_OWNED。那很奇怪 ?!

所以没有购买,但该项目已经拥有,是吧?可以肯定的是,Google IAP 端有本地缓存​​,但导致此问题(应用程序崩溃)的是您的应用程序。您可以等待几个小时,但在大多数情况下,这不会自行解决

有两种可能的解决方案。第一个对开发者有好处,它将清除谷歌 IAP 数据。

adb shell pm clear com.android.vending

几秒钟后,您将能够再次购买该物品。

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

请记住,根本原因是您的应用程序崩溃,这会在商品被消费之前扰乱 IAP 购买流程。修复它,问题将不再发生。

于 2014-11-28T01:26:39.823 回答