android - 用户退出 Google Play 服务后保存游戏的最佳做法?

标签 android unity3d google-play-services google-play-games

Google Play 游戏服务指南规定如下:“登录后,玩家必须始终可以选择退出。”

想象一下以下场景:

  1. 我下载了一款手机游戏并在经过身份验证后玩了几周
  2. 在这段时间里,我解锁关卡并积累游戏内货币(保存到云端)
  3. 我决定退出 Google Play 游戏服务,但继续玩游戏

我看到两个管理玩家数据的选项: 1.将他们所有的云保存数据复制到本地设备存储 2. 重新启动用户,将数据保存到本地存储(如果他们重新登录,他们将再次访问他们的云保存数据)

第一个选项听起来最合乎逻辑,但这也意味着如果用户再次登录,我会将本地数据同步回云端。因此,用户可以注销,直接在他们的设备上更改本地存储的首选项(例如添加 1000000 个硬币),然后重新登录并同步该数据。

我的问题是,尽管(某些)玩家有可能篡改他们的数据,但双向同步数据是否是解决此问题的“正确”方法?我已经找到了很多关于退出的信息,但不知道之后该怎么做。

谢谢!

最佳答案

My question is, is synchronising the data both ways the "correct" way to go about this, despite the risk of (some) players being able to tamper with their data?

没有。将评分系统分为两部分:

离线和在线评分。

当用户注销时,获取在线分数并将其保存到离线分数中。用户的离线分数将从用户离开在线分数的地方继续。

如果您决定再次登录,请使用在线评分。同时使用在线分数更新他们的离线分数。


通过这样做,您只是让玩家更难修改分数。如果游戏在玩家端运行,并且玩家了解基本的 APK 逆向工程,则可以始终更改分数。数据不必保存在其他地方即可更改。它可以在内存中更改。它也可以通过反编译、更改代码、编译和签署 APK 来更改。


现在,如果您让游戏在服务器上运行但读取用户的输入,那么除非您的服务器被黑,否则游戏无法更改。

关于android - 用户退出 Google Play 服务后保存游戏的最佳做法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44713539/

相关文章:

java - 谷歌 LVL(许可证验证库): is it possible to run the app on a device without Google Play?

android - 有什么方法可以处理回收过程中的 View ?

c# - Vector3.z 初始化为正,但随后在没有任何脚本修改的情况下变为负

c# - Unity - 来自 Sprite 顶点的网格

c# - 为什么在 Unity 5 中,我的 2D 触发器对撞机只感知与某些对象的碰撞而不感知其他对象的碰撞?

android - 错误 : cannot find symbol class GoogleAccountCredential

android - DeadObjectException 尝试使用 Context.sendOrderedBroadcast 时

android - 如何在未下载图像时显示加载进度

在触摸 EditText 框之前,Android Recyclerview 不会出现

任何 google-play-services 功能的 java.lang.NoClassDefFoundError