【问题标题】:How do I revoke an Android in-app non-consumable purchase entitlement after refunding?退款后如何撤销 Android 应用内非消耗性购买权利?
【发布时间】:2020-12-01 01:33:20
【问题描述】:

我目前正在测试我的 Android 应用(许可测试应用内支付),需要多次重复购买和退款来测试它。上次,在发放退款时,我不小心忘记选中 Play 开发者控制台中的“撤销权利”框(由于某种原因默认未选中)。现在,我的应用程序版本始终具有权利,我无法再购买它。

我知道无法通过网站撤销该权利。似乎有一种方法可以通过 API 调用来实现,但我没有应用程序的后端设置,并且无法弄清楚如何通过我的浏览器/curl 成功调用该函数(总是验证错误)。我的应用程序似乎无法区分购买的权利或已退款但未撤销的权利(我的Purchase 对象的getPurchaseState() 调用总是返回Purchase.PurchaseState.PURCHASED),所以我不知道我是否可以通过应用程序的代码库撤销它。

有什么方法可以撤销授权?授权自己进行 API 调用的过程对我来说完全不透明,但如果我能理解的话,这似乎是一条可行的路线。

【问题讨论】:

标签: android google-play google-play-services in-app-billing google-play-developer-api


【解决方案1】:

事实证明,我不得不走通过应用程序消费购买的路线。我通过在“设置”窗格中添加仅限开发人员的Preference(通过根据BuildConfig.Debug 的值以编程方式添加新的首选项)专门用于撤销给定产品来做到这一点。点击后,该应用将:

  1. 获取所有Purchases的列表(通过BillingClient对象的queryPurchases方法)
  2. 找到Purchase 以及我要消费的产品的 SKU(如果存在)。
  3. 调用我的BillingClient 对象的consumeAsync 方法,该方法接受购买令牌(由步骤2 中的Purchase 对象持有)。

完成此操作并经过验证后,该产品会立即使用,并且已授予的权利会被撤销(比通过 Google Play 开发者控制台退款要快得多)。

小心不要让这个选项潜入你的release 构建,因为我认为它会在不退款的情况下撤销权利(对于不使用真钱的许可证测试人员来说不是问题,但会导致愤怒的客户)。

【讨论】:

  • 非常感谢。另一个好处是通过开发者控制台每天有 10 次退款的限制(包括出于某种原因的测试购买)。如果超过此限制,您的退款能力将被阻止 24 小时。
  • 感谢您回答自己的问题,您不必回答,但您仍然回答了,这对我和其他人真的很有帮助,非常感谢您的帮助!
  • 感谢您的这个想法,我也实现了它,并且运行良好。就我而言,我在我的应用程序设置中添加了一个“调试”部分,从位于 debug/res/xml 文件夹中的资源文件加载它,以确保它永远不会在发布时显示。您也可以添加一个额外的if(BuildConfig.Debug) 来保护背后的逻辑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多