Android Billing Library v3 - 许可证测试中的帐户,项目停留在已购买

问题描述

在这里搜索 StackOverflow 后,我似乎遇到了一些建议的修复方法都不起作用的问题(除了下面提到的一个)。

使用测试 SKU (android.test.*),但在应用程序的游戏商店控制台中制作了我自己的测试 SKU。我将手机/平板电脑的主要 Google 帐户添加到 Play 管理中心的许可证测试中。此帐户不是我的开发者帐户。 此产品为一次性购买,非消耗品。

我的第一次测试,我开始购买,然后弹出了预期的两张信用卡(“测试卡,总是批准”和“测试卡,总是拒绝”)。选择了批准卡,一切都按预期进行 -

  • 订单出现在我开发者的 Play 管理中心中。
  • 应用程序识别购买,我的代码正确处理了它。 (耶)

现在,当我再次尝试购买时,我收到了代码 ITEM_ALREADY_OWNED。

我所做的一切都是为了解决这个问题 -

  1. 根据this documentation,它说取消/退款购买。所以,我做到了。
  2. 某些报告(例如 StackOverflow 上的此处)建议清除 Play 商店缓存 (adb shell pm clear com.android.vending)。

这些都不允许我再次购买该商品。

我没有做的一件事是添加所有代码来“使用”产品,坦率地说,这似乎对测试适得其反。 (添加可能有问题的代码,然后在成功测试后删除相同的代码,这可能会引入其他问题..)

我主要担心的是,如果我为购买退款,它真的不应该告诉我的应用仍然购买了某件商品 - 因为坦率地说,它不再是:我退款了。

我的第二个担心点是正确测试这一点,而不必临时或永久性地为消耗品 SKU 添加代码

是否有其他方法可以删除我丢失的“已购买”商品?还是我没有正确设置测试帐户或测试许可证条目?

解决方法

一个产品只能购买一次,如果你想让用户再次购买它,你必须先调用billingClient.consumeAsync(),然后billingClient.queryPurchases()会返回用户不拥有该产品项目然后他可以再次购买

您可以仅将 consumeAsync() 用于测试,然后在最终版本中禁用该部分,这是我通常所做的。

您的代码决定了产品是否为消费品。