在我们为我们的 Android 应用程序设计 InApp Billing 的过程中,我们提出了以下方案;
- 客户拥有植根/可操作设备(因此无法信任市场应用程序 + 我的应用程序)
- 客户购买产品
- 购买状态 0(已购买)被发送到我们的后台(一切都已检查并确定),我们给予积分。
- 客户退款购买
- 客户操纵我们的应用程序或市场应用程序在本地确认退款,从而阻止退款通知到达我们的后台服务器。
这种情况可能吗?我们如何解决这个问题?
自从提出这个问题以来已经 7 年了,但我仍然会提供答案,因为它可能对某些人有用。
您的图表中缺少的部分是您的 BackOfficeServer,用于在向用户授予信用(商品)之前执行服务器端验证。由于客户端上的任何内容都不可信(无论是您的应用程序还是应用程序商店),您唯一的解决方案是将您的 BackOfficeServer 与Google 提供的购买验证 API集成。只有当您收到他们的回复表明购买有效时,您才应授予商品。
这同样适用于退款。如果用户发出退款,您将需要撤销商品。为此,您再次只能信任您的 BackOfficeServer。Google 提供了可以满足该要求的实时开发者通知和Void API 。
第一:如果用户要求退款,您还会收到一封电子邮件。
第二:在应用内结算的购买不能由用户直接退款。如果用户想要退款,他必须与您联系,然后您可以使用您的谷歌钱包帐户手动进行退款。
所以我认为你的情况永远不会发生。
其次,如果可能的话,我建议您使用托管购买,在这种情况下,如果用户要求退款,谷歌市场会记住它,您可以使用 RESTORE_TRANSACTION 检查是否发生了一些退款(但同样:您必须授予退款) .