已退款的托管商品是否需要消费?

Do refunded managed items need to be consumed?

在我的应用程序中,我通过 托管 购买(只能购买一次)提供高级升级 - 而不是订阅。

当购买退款时,用户似乎无法重新购买升级:

int billingFlowResponseCode = billingClient.launchBillingFlow(activity, flowParams); returns ITEM_ALREADY_OWNED.

This question 此处似乎建议用户在大约 24 小时后应该可以购买商品。然而已经过去了36个多小时,没有运气。

我的问题是:对于已退款或取消的托管商品,我是否需要消费才能再次购买?

还是需要再等一段时间..?

好的,我找到方法了...

需要做的是:

  1. 客户端查询用户的购买情况(我用的是app-billing库)
  2. 客户端使用购买令牌联系服务器,以找出哪些购买仍然有效。
  3. 服务器调用Google的API(https://developers.google.com/android-publisher/api-ref/purchases/products/get)的GET purchase端点,检查购买是否需要消费 和 returns 将此信息发送给客户端。 (如果purchase.purchaseState == 1 && purchase.consumptionState == 0需要消费一次购买)。
  4. 对于那些需要消费的购买,客户端调用BillingClient::consume()

如果 Play 控制台中有一个选项可以将项目标记为 "consumable" 或不标记,那就会容易得多 - 这样就不需要手动消耗 "non-consumable"排在首位。