跨会话/设备处理应用内购买/消费品?

时间:2018-03-18 03:33:21

标签: java android google-api in-app-purchase in-app-billing

我的问题集中在使用Google的应用内结算API处理耗材的应用内购买。 (https://developer.android.com/google/play/billing/api.html#consumetypes

他们的文档将消耗品描述为:

  

消费品

     

相比之下,您可以为可以多次购买的产品实施消费。通常,这些产品提供某些临时效果。例如,用户的游戏中角色可能会获得生命值或在其库存中获得额外的金币。在您的应用程序中分配所购买产品的好处或效果称为配置被管理产品。 您负责控制和跟踪如何为用户配置托管产品。

消耗品是可以多次购买的东西(如游戏币,游戏物品或使用的升级等),而非消耗品只能购买一次(无广告,a皮肤/角色等。)

在有关购买(https://developer.android.com/training/play-billing-library/purchase-iab-products.html)的文档中,还提到了:

  

您在应用中如何使用消费机制取决于您。通常,您将为具有用户可能想要多次购买的临时利益的产品实施消费,例如游戏内货币或可补充的游戏代币。您通常不希望为一次购买的产品实施消费并提供永久性效果,例如高级升级。

     

您有责任控制和跟踪应用内商品如何配置给用户。例如,如果用户购买了游戏币,您应该使用购买的货币金额更新玩家的库存。

我的问题是如何跟踪消费品的用户库存?文档和各种视频似乎很快就掩盖了这一点,基本上说应用程序必须在确认购买成功时应用耗材的效果。但这并不是全貌。如果用户注销并使用其他帐户重新登录,该怎么办?或者他们切换到新手机,他们应该在手机上安装产品。

您无法在SharedPreferences或持久缓存中保存购买记录,因为它与手机绑定。如果用户使用其他手机登录,则他们应该享受所有购买的好处。

采用以下示例:

游戏以1000金币开始玩家。玩家通过应用内购买购买500多金币,然后花200金币。如果玩家购买新手机并在该手机上安装该应用程序,则应该有1300金币。

这通常如何实现?

您是否需要运行私人服务器来跟踪与Google分开的购买/消费?

谢谢!

1 个答案:

答案 0 :(得分:3)

我正在实施应用内购买。

  

您是否需要运行私人服务器来跟踪与Google分开的购买/消费?

当然,正如Google在Security Best Practices

中所建议的那样
  

强烈建议您在您信任的服务器上验证购买详情。但是,如果您无法使用服务器,则仍可以在设备上验证应用中的这些详细信息。

你的第二个问题

  

如果用户退出并使用其他帐户重新登录,该怎么办?

orderId绑定到帐户或设备。 在第一种情况下,您可以在用户切换设备时轻松管理购买(获取私人服务器的另一个原因)。 在第二种情况下,您可以允许在同一设备上切换帐户。 因此,您可以选择哪一个。

您需要将本地消费与服务器同步。

这是验证购买的流程:

  
      
  1. 用户点击“购买”按钮。
  2.   
  3. 使用Google付款。
  4.   
  5. 应用从谷歌收到“收据”并在本地存储
  6.   
  7. 将此“RECEIPT”发送到服务器。
  8.   
  9. 服务器将“purchaseToken”发送到Google Play Developer API进行验证
  10.   
  11. Google Play Developer API会发送带状态代码的回复。
  12.   
  13. 将RECEIPT存储在服务器数据库中(如果我们要保留用户的购买历史记录)。
  14.   

这是消费产品的流程:

  
      
  1. 用户打开应用。
  2.   
  3. App通过从本地存储中读取来为Resources分配值。
  4.   
  5. 应用尝试与服务器同步。(检查上次更新的时间戳)
  6.         

    不同的情景:

         

    同步成功:从服务器分配资源值。在本地存储中设置新检索的值。

         

    同步失败:保留资源值并重试。

         
        
    1. 用户使用资源。
    2.   
    3. 应用程序更新资源中的本地值并与服务器同步。(检查上次更新的时间戳)
    4.   

我使用了以下文章:

  • 教程:如何在Android LINK
  • 中实施应用内结算
  • 有关实施InApp购买的文章LINK
  • 如何验证服务器端Android应用的购买情况(google play in app billing v3)LINK
  • 另一个SO回答LINK
  • 另一个SO回答LINK
  • 代码项目示例LINK