首页 > 解决方案 > 应用内结算 - 当 queryPurchases() 返回一个空列表时,Google Play 给我“您已经拥有此商品”消息

问题描述

我刚刚为某件商品进行了一次测试购买,但由于我的 Wi-Fi 没电了,它失败了,但由于某种原因,Google Play 然后给了我一条消息,说订单正在等待处理或其他什么,我应该在某个链接上检查它(我忘了写下来)。

当我再次尝试进行相同的测试购买时,Google Play 给了我“您已经拥有此项目”的错误。所述购买不在我在 Google Play 仪表板中的订单历史记录中。

这是怎么回事,我该如何解决?

编辑:清除 Google Play 商店缓存、清除 Google 服务框架缓存并重新安装应用程序不起作用。


编辑2:

我设法通过强制停止 Google Play 商店应用程序,清除其数据,然后重新启动它来解决此问题。现在,我只能得出结论,当 Wi-fi 断开连接时进行的购买是在 Play Store 应用程序的数据中,而不是在缓存中。

因此,我的问题变成了:开发人员是否有责任处理这种特殊情况(当解决方案不在应用程序本身时),以及如何处理它?

标签: google-playin-app-purchasein-app-billing

解决方案


我遇到了完全相同的问题,我收到了我已经拥有这个项目的错误消息,但是 getPurchases 调用返回了一个空列表。如果此列表为空,则最终对我有用的是获取购买历史记录,并获取最后一次购买此特定产品 ID 的购买令牌并将其用于消费:

mService.getPurchaseHistory(version, packageName, "inapp", null, new Bundle());

请记住,历史记录包含该用户最后一次购买每种产品类型的信息,因此请确保将产品 ID 与相关 ID 进行比较。


推荐阅读