【问题标题】:"Best" way to implement in-app currency across devices跨设备实施应用内货币的“最佳”方式
【发布时间】:2016-10-12 03:02:40
【问题描述】:

背景

我编写了一款游戏,希望在多种设备(平板电脑、手机等)上运行。我已经实现了一种应用内货币,并且已经到了需要将货币存储在云中以便可以跨设备访问并处理冲突等的阶段。

我想选择最简单的选项,至少对我而言,这意味着使用某种可用的 API,例如由 Google 提供,而不是使用我自己的服务器。我遇到了以下可能性:

  1. Google AppState API(现已弃用)
  2. Google 保存的游戏 API
  3. Google 云端硬盘 API
  4. 谷歌云平台。

(1) 现已弃用,开发人员被指示改用 Saved Games API。

(2) 实际上似乎是一个很好的解决方案,因为它处理游戏成就、排行榜和自定义数据(例如应用货币)的存储。但是,我发现这有一个问题,在 Play 游戏应用程序中,有一个选项可以删除玩家的个人资料,这也会删除游戏内的货币!因此,虽然 (2) 看起来不错,但货币数据可能会被删除。也许这可以放在 T&C 中,例如“如果您删除您的个人资料,您将失去任何未使用的货币和任何购买的物品”...

(3) 使用Drive API似乎是一种选择,但是在网上阅读后似乎存在很多问题,例如文件名重复,用户可能删除文件等。

(4) 我不确定这个选项,但看起来我可能需要付费?

在某些 API 上似乎也有 these deprecation schedules

我的问题

那么面对这些(可能还有其他未列出的)选项,在应用货币中实现基于云的良好解决方案是什么?我试图避免拥有自己的服务器来记录每个用户的货币/数据,但也许这是唯一好的解决方案?我想尝试降低欺骗系统的能力。

其他想法

我可以使用 Google Saved Games API Saved Preferences(存储在设备上)方法。我会同时更新 Saved Preferences 和 Google Saved Games。我可以使两种数据存储方法保持同步,如果已保存的游戏数据与已保存的首选项不匹配,则将已保存的首选项与已保存的游戏数据合并(例如,将已保存的游戏和已保存的首选项设置为两者的最大货币)。这将使我能够在设备上保留货币备份,以防用户删除他们保存的游戏配置文件。但是,如果用户删除了他们的“已保存游戏”配置文件,并从所有设备上删除了该应用程序,这将失败......这么多选项......

相关/有趣的帖子

Ricket's answer here is interesting.

可能的妥协解决方案

由于 IAB 系统和可用 API 施加的限制,我想我会解决这个问题:使用托管项目进行永久购买,例如不同级别的主题,获得新角色等。这样,无论发生什么,这些都将始终可用。一旦购买,它们将永远购买,即我永远不会消费这些物品。拥有一个单独的虚拟货币(宝石)系统,最多可容纳 100 颗宝石,我会通过已保存的游戏对其进行跟踪。这样我也能获得排行榜/成就。如果玩家删除了他们的个人资料,那是他们的问题,但至少核心托管项目会继续存在。希望条款和条件能够弥补潜在的宝石损失,最多 100 颗宝石有望帮助减少任何损失。

【问题讨论】:

  • 您真的很惊讶您需要付费才能让您的服务器在云中运行,在全球范围内以几乎完美的正常运行时间提供服务,而且根本不需要关心硬件和数据中心?
  • 话虽如此,您还有什么理由不想为您的游戏实现后端?我不确定你的游戏没有它怎么能运行,如果你已经有一个,那为什么不把你的游戏货币和物品存放在那里呢?
  • 不,一点也不奇怪。
  • 我没有服务器,我得学习编写一个! Google Drive 和 Saved Games API 可用于我的目的,但两者都有与我的应用断开连接的风险,这意味着数据可能会丢失。我感兴趣的关键数据是玩家当前的货币数量。我想专用服务器是处理此问题的唯一方法,因为任何连接到用户数据存储区域的 API 都必须让用户在某处删除“他们的”数据!
  • 拥有专用服务器是这里的唯一方法。其他一切都只是一个劣质的解决方法。您应该立即开始实施您的后端。除非您想浪费大量时间,否则您不能稍后再添加它。请务必在安全方面遵循最佳做法。

标签: android google-drive-api google-cloud-storage in-app-billing google-play-games


【解决方案1】:

您可能想查看firebase 它的功能之一是实时数据库。

【讨论】:

    【解决方案2】:

    您可能想试试Implementing In-app Billing。如文档中所述:

    Google Play 上的应用内结算为使用 Google Play 发送应用内结算请求和管理应用内结算交易提供了一个简单明了的界面。

    因为,正如您还提到您正试图避免使用自己的服务器来记录您的用户的货币/数据,这将是您的优势。以下是文档中给出的一些优点:

    • 应用内结算依赖于 Google Play 应用,该应用处理您的应用与 Google Play 服务器之间的所有通信。您只需要让您的应用程序请求适当的权限即可使用 Google Play 应用程序。
    • 您可以使用 In-app Billing Version 3 API 来跟踪在 Google Play 中购买的应用内商品的所有权。
    • 您甚至可以选择保护您的应用程序,因为 Google Play 会对包含采购订单响应数据的 JSON 字符串进行签名,以帮助确保发送到您的应用程序的交易信息的完整性。

    现在,如果您决定使用应用内结算,我建议您仔细阅读给定的文档,并注意重要说明、注意事项/警告和建议。我还建议您阅读 In-app Billing Overview 以熟悉一些概念,这些概念将使您更轻松地实施应用内结算。

    最后,您还可以添加Security and Design 作为您的参考之一,以获取有关安全和设计最佳实践的更多信息。 SO post 中的建议也可能有所帮助。

    【讨论】:

    • 您好 Teyam,感谢您的回答。我已经实施了应用内计费。但是,一旦玩家购买了货币(10、50、100 颗宝石等),那么我需要能够跟踪货币在游戏中的使用情况。这就是我想要实现的目标,也可能是我需要服务器来执行此操作的原因。例如,Google 的 IAB 系统目前不允许跟踪管理购买 100 颗宝石后剩余的宝石数量。鉴于 Xavier 的 cmets,我昨晚编写了一个 RESTful PHP Web 服务,该服务正在运行,这应该有助于我实现目标。
    猜你喜欢
    • 1970-01-01
    • 2012-01-20
    • 1970-01-01
    • 2011-10-29
    • 2011-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多