Play In-app Billing v3 - 我应该保存购买令牌吗?

Play In-app Billing v3 - Should I save purchase tokens?

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

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

  2. 购买完成后立即消费

  3. 消费完成后,向服务器发送购买令牌
  4. 服务器通过游戏检查API,然后为账户提供货币

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

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

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

  • 阻止重复购买
  • 跟踪已消费的商品

消费购买的场景应如下所示:

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

从后端收到成功响应后,您应该在 Android 端消费该项目。如果您已经在后端添加了虚拟货币(未消耗该物品),您还应该 return 成功响应,以便在不增加用户余额的情况下消耗该物品。

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