【问题标题】:Fake scores in Google Play Game ServicesGoogle Play 游戏服务中的虚假分数
【发布时间】:2013-08-22 03:53:13
【问题描述】:

一些记分牌收到了虚假分数提交。这是一个例子:

我制作的游戏也发生了同样的事情。有没有办法保护自己免受虚假提交的影响?有没有办法调节记分牌?

【问题讨论】:

标签: android google-play-games


【解决方案1】:

用户伪造高分的最简单(也是流行的?)方式是使用root access to edit saved data

您可以采取几个简单的步骤来增加难度:

  1. 不要将分数保留在内存中或保存状态。例如,倍数/除以一个因子并添加一个常数。更好的选择是实施加密的共享首选项。
  2. 向保存分数的结构添加校验和(CRC32、MD5)。
  3. 在从保存状态加载或在内存中读/写时验证乐谱以检查没有人玩过它。
  4. 使用 ProGaurd 混淆您的代码。如果您要赚钱,请使用功能更强大的 DexGuard,而且还会让软件盗版更加困难。

【讨论】:

  • 你能再解释一下#3吗?
  • 与(2)基本相同——校验CRC码。
【解决方案2】:

我推荐的两种技术...

  1. 在开发者控制台中为您的排行榜添加最大值和最小值。如果您有总星数排行榜,而游戏中只有 180 星,请将 180 设置为最大值。这将确保作弊者最终不会添加这些虚假的分数。
  2. 查看players.hide() 电话。这将从公共排行榜隐藏玩家和他/她的所有分数,以便其他人无法看到它们。请注意,此 REST 调用未内置到移动库中;您需要创建自己的迷你网络应用(或直接进行 curl 调用)才能使用此调用。

【讨论】:

  • 这并不能完全解决问题。即使是180分也可能是作弊者提交的假分数。谷歌应该以某种方式处理提交虚假的高分,就像他们在应用程序购买中处理的那样。通过签署每个提交分数请求。
  • 您无法防止假分数。你所能做的就是让它更难完成。
  • @Todd 在 player.hide() 调用中,我们从哪里得到参数“playerid”的值?(如果你不介意的话)
  • @DroidHeaven 您可以通过调用 scores.list() 来获取它们——这将让您看到向该排行榜提交内容的每个玩家的所有分数/玩家 ID。
猜你喜欢
  • 2014-02-02
  • 1970-01-01
  • 2013-07-31
  • 2017-09-27
  • 2018-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多