我想在3个平台上为我的游戏使用云存储。所以你可以在网上玩,然后继续在你的手机上播放。
我正在查看API文档,我只能看到获取快照的支持。我想创建一个新快照,然后保存它。它显示了如何为手机而不是网络执行此操作?
当然,服务不会以这种方式限制你。它会破坏用户体验。
谢谢, 肖恩。
答案 0 :(得分:1)
不幸的是,您知道没有API可以使用Web API编写已保存的游戏。如果您想支持网页和手机游戏保存,您必须自己实施。一种简单的方法是使用Application Data Folder用于Google云端硬盘。这允许您的应用程序将数据存储在播放器驱动器帐户的隐藏目录中。此API也适用于Android(https://developers.google.com/drive/android/appfolder)甚至iOS(https://developers.google.com/drive/ios/)。
通过不使用Play游戏服务而错过的主要是客户端上的一些缓存逻辑和用于选择快照的用户界面。如果你消除了缓存逻辑,你也消除了复杂冲突解决的需要(假设你使用了最后一次写入胜利'方法)
在较高的层面上,步骤将是:
在Google API控制台上为您要支持的平台创建一个新应用程序。
在您的游戏中实施登录(这与您通过Play游戏服务使用已保存游戏的方式相同。
答案 1 :(得分:0)
在这里,如果不存在,您可以按名称创建存档游戏:
Snapshots.OpenSnapshotResult open = Games.Snapshots.open(
mGoogleApiClient, name, create).await();
if (!open.getStatus().isSuccess()) {
throw new RuntimeException("or whatever");
}
Snapshot snapshot = open.getSnapshot();
snapshot.getSnapshotContents().writeBytes(mySaveGame);
create
是一个布尔值,告诉你想要在它不存在时创建一个新的布尔值。
name
是保存游戏名称。
mySaveGame
是我要存储的二进制blob。
答案 2 :(得分:0)
据我了解您的问题,您的示例中可能存在以下方案
我假设您的游戏具有复杂的逻辑,需要客户端 - 服务器实现。鉴于上述讨论,我假设您想要将游戏保存在Google Play游戏服务中(而不是您自己的Web服务器)。 在这种情况下,对于上面的场景1和3,您将检索快照,如eduyano之前的答案中所示。
Snapshots.OpenSnapshotResult open = Games.Snapshots.open(
mGoogleApiClient, name, create).await();
if (!open.getStatus().isSuccess()) {
throw new RuntimeException("or whatever");
}
Snapshot snapshot = open.getSnapshot();
snapshot.getSnapshotContents().writeBytes(mySaveGame);
但是,对于上面的方案2和4,您需要将REST API服务用于“Play Games Services for Web”。
首先,您必须发出HTTP请求才能获取播放器ID 获取https://www.googleapis.com/games/v1/players/playerId
随后,您需要知道针对此播放器保存的快照ID。所以发出另一个HTTP请求 获取https://www.googleapis.com/games/v1/players/playerId/snapshots
对于检索到的快照ID,请发出HTTP请求以检索相关快照。它需要授权。此时,将返回与保存的快照对应的JSON对象。
我希望这会有所帮助......我假设您将知道在返回JSON对象后如何加载快照。请随时要求进一步澄清。
https://developers.google.com/games/services/web/api/snapshots
的更多详情