google-play - 应用内结算 - 当 queryPurchases() 返回一个空列表时,Google Play 给我“您已经拥有此商品”消息
问题描述
我刚刚为某件商品进行了一次测试购买,但由于我的 Wi-Fi 没电了,它失败了,但由于某种原因,Google Play 然后给了我一条消息,说订单正在等待处理或其他什么,我应该在某个链接上检查它(我忘了写下来)。
当我再次尝试进行相同的测试购买时,Google Play 给了我“您已经拥有此项目”的错误。所述购买不在我在 Google Play 仪表板中的订单历史记录中。
这是怎么回事,我该如何解决?
编辑:清除 Google Play 商店缓存、清除 Google 服务框架缓存并重新安装应用程序不起作用。
编辑2:
我设法通过强制停止 Google Play 商店应用程序,清除其数据,然后重新启动它来解决此问题。现在,我只能得出结论,当 Wi-fi 断开连接时进行的购买是在 Play Store 应用程序的数据中,而不是在缓存中。
因此,我的问题变成了:开发人员是否有责任处理这种特殊情况(当解决方案不在应用程序本身时),以及如何处理它?
解决方案
我遇到了完全相同的问题,我收到了我已经拥有这个项目的错误消息,但是 getPurchases 调用返回了一个空列表。如果此列表为空,则最终对我有用的是获取购买历史记录,并获取最后一次购买此特定产品 ID 的购买令牌并将其用于消费:
mService.getPurchaseHistory(version, packageName, "inapp", null, new Bundle());
请记住,历史记录包含该用户最后一次购买每种产品类型的信息,因此请确保将产品 ID 与相关 ID 进行比较。
推荐阅读
- python - python 缓存的脚本文件可以放在哪里,如何刷新它们?
- svg - fabricjs:SVG 的多个路径具有完全相同的渐变的问题
- python - 包含浮点数的变量:如何转换为 Python 中保留尾随零的字符串?
- excel - 删除长度小于 8 个字符的单元格
- python - 来自 csv 的 Python 方法
- php - 从 HTTP GET 接收数据并将其发送到网页
- coldfusion - cfspreadsheet 将两张纸和一张放在上面?
- c# - 如何从我自己的统一应用程序操作应用程序?统一
- mysql - 如何将聚合查询与不同的连接结合起来?
- vue.js - 如何在 vuejs 中创建第一次用户教程?