已保存的游戏

已保存的游戏服务为您提供了一种便捷的方式,可以将玩家的游戏进度保存到Google的服务器。您的游戏可以检索已保存的游戏数据,以允许返回的玩家从任何设备继续他们在上次保存点开始的游戏。

已保存的游戏服务可以同步玩家在多个设备上的游戏数据。例如,如果您有一个在Android上运行的游戏,您可以使用已保存的游戏服务允许玩家在他们的Android手机上开始游戏,然后在平板电脑上继续游戏,而不会丢失任何进度。此服务还可以用于确保即使玩家的设备丢失、损坏或换成更新的型号,玩家的游戏也能从中断的地方继续。

要了解如何为您的平台实现已保存的游戏,请参阅客户端实现

已保存的游戏基础知识

已保存的游戏包含两个部分

  • 非结构化二进制blob - 此数据可以表示您选择的任何内容,并且您的游戏负责解析和写入它。
  • 结构化元数据 - 与二进制数据关联的附加属性,允许Google Play游戏服务在默认的已保存的游戏列表用户界面 (UI) 中以视觉方式呈现已保存的游戏,并在Google Play游戏应用中呈现有用的信息(例如,上次更新时间戳)。

一个游戏可以为单个玩家写入任意数量的已保存的游戏,但需遵守用户配额,因此没有严格要求将玩家限制为单个保存文件。

封面图片

除了持久性功能外,已保存的游戏服务还提供了视觉用户体验。强烈建议您将代表性图像与相应的保存文件关联。如果您在游戏中使用Play游戏SDK提供的默认已保存的游戏列表用户界面 (UI),则UI将显示这些封面图片。封面图片也可能出现在Google Play游戏应用中。

描述

您可以提供有关特定已保存的游戏内容的简短文本描述。此描述直接显示给玩家,应总结已保存的游戏所表示的状态;例如,“在黑暗森林中与哥布林战斗”。

配额

开发者无需为存储在云中的任何已保存的游戏数据付费。相反,此数据将计入玩家的Google Drive配额 - 您无需担心。游戏开发者唯一需要关注的配额是他们的Google Drive API配额。

读/写隔离

所有已保存的游戏都存储在玩家的Google Drive应用程序数据文件夹中。此文件夹只能由您的游戏读取和写入 - 其他开发者的游戏无法查看或修改它,因此可以额外防止数据损坏。此外,已保存的游戏与玩家的直接篡改隔离开,因此他们无法修改单个已保存的游戏。

离线支持

当玩家的设备离线时,您的游戏仍然可以读取和写入已保存的游戏,但无法与Google Play游戏服务同步,直到建立网络连接。重新连接后,Google Play游戏服务会异步更新Google服务器上的已保存的游戏数据。

冲突解决

使用已保存的游戏服务时,您的游戏在尝试保存数据时可能会遇到冲突。当用户在不同的设备或计算机上运行多个您的应用程序实例时,可能会发生这些冲突。您的应用程序必须能够以提供最佳用户体验的方式解决这些冲突。

通常情况下,数据冲突发生在您的应用实例在尝试加载或保存数据时无法连接到保存游戏服务时。一般来说,避免数据冲突的最佳方法是在应用程序启动或恢复时始终从服务加载最新数据,并以合理的频率将数据保存到服务。但是,并非总是能够避免数据冲突。您的应用程序应尽一切努力处理冲突,以确保用户数据得到保留,并提供良好的用户体验。

限制

Google Play 游戏服务目前对二进制数据和封面图片大小分别实施了 3 MB 和 800 KB 的限制。

保存的游戏元数据

保存游戏的结构化元数据包含以下属性

属性 描述
ID Google Play 游戏服务为该保存的游戏生成的唯一字符串。使用此 ID 在您的游戏客户端中引用保存的游戏。
名称 开发者提供的保存游戏的简短名称,例如“保存槽位 1”或“PlayerName_Save1”。此名称不会显示给玩家。
描述 开发者提供的保存游戏的描述。
上次修改时间 Google Play 游戏服务生成的保存游戏上次更新时的毫秒级时间戳。
游戏时间 开发者提供的时间(以毫秒为单位),用于在保存的游戏中显示。此值应表示玩家玩相应保存游戏的时长。例如,游戏时间值为 3600000 将由 Google Play 游戏服务显示为“1 小时”。
封面图片 这是一个可选的、开发者提供的属性,包含有关封面图片的信息。

客户端实现

要了解如何在您的平台上实现保存游戏,请参阅以下资源