android - Play In-app Billing v3 - 我应该保存购买 token 吗?

标签 android in-app-billing

所以我正在编写一个带有特殊应用内货币的 Android 应用。您可以通过应用程序内结算以 1、5、10 等包的形式购买这种货币。以下是我的实现方式:

  1. 使用托管产品(当应用程序启动时,我使用 IabHelper 查询购买的产品)

  2. 购买完成后立即消费

  3. 消费完成后,向服务器发送购买token
  4. 服务器通过play API检查,然后为账户提供币种

我的问题是,如果第 3 步失败怎么办?如果连接被切断或其他原因,购买 token 将永远不会到达我的服务器。在那种情况下,用户将支付货币,但他们的帐户不会得到它。当我的应用再次启动并运行 1a 时,它不会找到购买的商品,也不会重新使用它。

这个推理正确吗?如果是这样,我是否需要在 android 端存储购买 token ?然后,如果出现问题,我会不断重试直到成功?看起来有点乱……我还想做一个“我的购买页面”,在那里你可以看到你所有的购买,如果第 3 步由于某种原因失败了,然后点击它们来兑换它。

最佳答案

您应该在后端保留 purchaseToken。这样做有两个原因:

  • 阻止重复购买
  • 跟踪消费情况

消费购买的场景应该是这样的:

  1. 将购买发送到您的后端
  2. 保存purchaseToken
  3. 增加用户余额(虚拟货币)
  4. 发回有关成功操作的信息

一旦您收到后端的成功响应,您应该在 Android 端使用该项目。如果您已经在后端添加了虚拟货币(没有消耗元素),您还应该返回成功的响应,以便在不增加用户余额的情况下消耗元素。

请记住,重复相同购买非常容易,即使它已经被消费过,所以purchaseToken必须每次都验证你的后端。如果它已经存在于您的数据库中,请不要增加虚拟货币。

关于android - Play In-app Billing v3 - 我应该保存购买 token 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28004319/

相关文章:

android - 在 Eclipse 中重新定位 AndroidManifest.xml 对 ADT 插件的支持的可能性

android - 当html有地址时,即使没有 anchor ,如何阻止Android浏览器打开 map

android - Google Play 游戏初始化时如何隐藏 Android 标题栏?

android - 当我在 google play 上有 'Unpublished production track' 时如何在应用计费中测试

android - InAppBilling V3 - 购买订阅项目时 "purchaseData"和 "dataSignature"为空

java - 为什么 getCurrentInterruptionFilter BroadcastReceiver 在快速设置中起作用,但在设置中不起作用?

iphone - 手机计步器应用程序

in-app-purchase - 检测当前订阅是否在试用 Google Play 商店?

java - 升级到 billingclient :billing:2. 1.0 后,IabHelper 不再导入 android.vending.billing.IInAppBillingService