所以我正在编写一个带有特殊应用内货币的 Android 应用。您可以通过应用程序内结算以 1、5、10 等包的形式购买这种货币。以下是我的实现方式:
使用托管产品(当应用程序启动时,我使用 IabHelper 查询购买的产品)
购买完成后立即消费
- 消费完成后,向服务器发送购买token
- 服务器通过play API检查,然后为账户提供币种
我的问题是,如果第 3 步失败怎么办?如果连接被切断或其他原因,购买 token 将永远不会到达我的服务器。在那种情况下,用户将支付货币,但他们的帐户不会得到它。当我的应用再次启动并运行 1a 时,它不会找到购买的商品,也不会重新使用它。
这个推理正确吗?如果是这样,我是否需要在 android 端存储购买 token ?然后,如果出现问题,我会不断重试直到成功?看起来有点乱……我还想做一个“我的购买页面”,在那里你可以看到你所有的购买,如果第 3 步由于某种原因失败了,然后点击它们来兑换它。
最佳答案
您应该在后端保留 purchaseToken
。这样做有两个原因:
- 阻止重复购买
- 跟踪消费情况
消费购买的场景应该是这样的:
- 将购买发送到您的后端
- 保存
purchaseToken
- 增加用户余额(虚拟货币)
- 发回有关成功操作的信息
一旦您收到后端的成功响应,您应该在 Android 端使用该项目。如果您已经在后端添加了虚拟货币(没有消耗元素),您还应该返回成功的响应,以便在不增加用户余额的情况下消耗元素。
请记住,重复相同购买非常容易,即使它已经被消费过,所以purchaseToken
必须每次都验证你的后端。如果它已经存在于您的数据库中,请不要增加虚拟货币。
关于android - Play In-app Billing v3 - 我应该保存购买 token 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28004319/