本页面介绍了如何将 Play 游戏服务登录与您现有的身份或云保存解决方案集成。尽管这些建议是可选的,但它们可以帮助您满足 Google Play 游戏电脑版的云保存要求。请使用连续性要求和预期行为页面,验证您的实现是否满足这些要求。
恢复玩家状态
在您游戏的后端,游戏帐号很可能通过某个标识符来表示,以便您获取和更新玩家在游戏中的进度。我们简称其为您的帐号 ID。当玩家登录 Play 游戏服务时,您可以使用该身份验证获取一个新的标识符,即 Play 游戏服务玩家 ID,它用于支持云保存要求。
当玩家使用 Play 游戏服务登录时,您应按以下步骤操作:
- 从客户端检索 OAuth 代码,并将其发送到您的服务器。
- 交换身份验证令牌,并从 Play 游戏服务器获取经验证的 Play 游戏服务 ID。这可确保 ID 受到信任,且不会有人利用受感染的设备冒充其他玩家。
- 根据设备条件和任何关联的标识符尝试解析游戏帐号。
您的游戏需要引入两个主要的新场景
- 在您的后端存储 Play 游戏服务 ID,并以某种方式将其分配给现有帐号 ID,例如以下方式:
- 对于新玩家,进度应在某个时间点自动关联到 Play 游戏服务(例如,在游戏启动时、完成教程后或达到一定等级后等)。
- 对于现有玩家,在玩家更新到集成了 Play 游戏服务 V2 的游戏版本后,其当前进度应自动关联到 Play 游戏服务。
- Play 游戏服务 ID 可以关联到一个或多个帐号,并且 Play 游戏服务可以与这些帐号取消关联,但它应该至少关联到一个有效的帐号。
- 根据 Play 游戏服务玩家 ID 自动在新设备或已退出登录的设备上恢复游戏进度。
您如何存储 Play 游戏服务 ID 并将其分配给现有帐号是灵活的,如下面的示例所示。需要牢记的主要要求是,玩家无需手动登录或与其他身份系统建立链接,即可在 Play 游戏服务 ID 和游戏进度之间建立链接,并且玩家进度应在不同平台上无缝恢复。
在设计您的解决方案时,首先要查看您现有的系统以及它如何集成不同的身份提供商。有些系统每个帐号使用单个标识符,而另一些系统每个帐号使用多个标识符。
如果您只能将每个帐号 ID 与单个标识符关联,则需要添加支持以将 Play 游戏服务与它关联。以下解决方案演示了如何做到这一点。
解决方案示例
示例解决方案包括绑定和召回解决方案。
绑定是将 Play 游戏服务 ID 永久或半永久性地关联到帐号状态的过程。在绑定的情况下,即使玩家在您的游戏中退出登录并使用其他帐号登录,通过 Play 游戏服务恢复的底层帐号也不会在未经玩家操作的情况下更改。我们在此处通过帐号绑定对此进行介绍。
通过召回,作为游戏开发者,您会存储 Play 游戏服务 ID 和上次查看的帐号(一个或多个)的松散映射,以便玩家在其他设备上使用 Play 游戏服务登录时进行恢复。每次玩家使用相同的 Play 游戏服务 ID 登录另一个游戏帐号时,此绑定都会发生更改。下面是一个示例流程图,我们将在下面的召回最近帐号示例中更详细地介绍它
更多用户流程示例附在下面的解决方案中。
帐号绑定
如果您的游戏没有很多多帐号玩家,或者您希望鼓励玩家在您的游戏中拥有一个单一帐号,那么绑定可能是您的游戏的最佳解决方案。在此示例中,您会将使用 Play 游戏服务登录时看到的第一个帐号(无论是访客帐号还是已与另一个身份平台绑定的帐号)与 Play 游戏服务玩家 ID 绑定。绑定后,该绑定帐号会自动在新设备上恢复。由于我们正在进行强绑定,玩家也可以切换 Play 游戏服务资料以更改游戏内的帐号,并且您可以在此场景中提示玩家确认。
如果存在冲突的帐号,我们建议您要求玩家选择一个帐号。这些冲突情况只应发生在您的游戏中拥有多个帐号的玩家身上,因此他们可能具备使用特定帐号进行游戏的知识和意愿。
一旦帐号已解析,除非登录标识符发生更改,否则您的游戏应记住玩家的选择。如果 Play 游戏服务资料发生更改,或者玩家登录到游戏中的不同标识符,则应重复上述步骤,因为玩家已明确表示他们希望更改帐号。
解绑
如果您想让玩家完全控制其绑定,您可以为玩家提供解绑其 Play 游戏服务玩家 ID 与游戏帐号的能力。这对于某些多帐号玩家可能很重要,如果他们不小心将自己的 Play 游戏服务玩家 ID 与非主帐号绑定。
更多帐号绑定示例
此主要示例显示,给定的 Play 游戏服务玩家 ID (1) 绑定到第一个在游戏中看到的帐号 (A),并且当玩家退出游戏进度以在另一个帐号上玩时,不会重新绑定。
您可以选择允许玩家重新绑定其帐号,但这不是必需的。
在设备上切换帐号
在此处,玩家已手动切换 Play 游戏服务帐号,因此向游戏发出了一个明确的信号,表明他们希望将其游戏内帐号更改为另一个帐号。响应此更改是玩家所希望的;考虑此信号会带来更好的玩家体验。
已与其他标识符绑定的现有帐号
此示例表明,即使是绑定到非 Play 游戏服务标识符的帐号也应绑定到 Play 游戏服务,然后在新设备上恢复。您游戏中的大多数现有玩家都属于此类别。
召回最近帐号
在考虑解决方案时,经常会遇到的一个问题是多帐号体验。如果您的游戏激励高级用户创建多个帐号(例如抽卡游戏或选择您自己的冒险游戏),那么将 Play 游戏服务玩家 ID 绑定到单个帐号可能无法在跨设备移动时提供最佳玩家体验。
在召回解决方案中,您存储了 Play 游戏服务玩家 ID 和游戏内帐号的松散映射,玩家在切换设备或退出登录时,只需看到您上次存储的帐号即可。
在此示例中,一个玩家拥有一个游戏的三个帐号,然后切换到新设备
当您提示玩家恢复时,您还可以提供一个“取消”或“创建新帐号”按钮,供玩家选择创建新帐号。
为简单起见,您的游戏可以选择只召回上次看到的帐号。这对于多帐号切换用例可能更困难,但仍符合连续性要求。
更多召回示例
以下部分包含使用召回的更多示例。
非 Android 手机
这里我们展示了召回已存在(已关联第三方帐号)的帐号,或者从另一个未登录 Play 游戏服务的设备创建的帐号。
更常见的流程可能是从非 Android 手机开始,然后转移到 Google Play 游戏电脑版。
由于非 Android 手机没有 Play 游戏服务,因此没有活跃的召回功能,玩家必须在 Google Play 游戏电脑版中手动输入其凭据。
一个帐号的多个 Play 游戏服务资料
有时可能会有多个活跃的 Play 游戏服务资料,这些资料之前曾“召回”过给定帐号。对于这种情况,有两种主要解决方案同样适用
无论如何都保存 在“无论如何都保存”模型中,我们忽略指向给定帐号的重复指针。
覆盖它 在“覆盖它”模型中,开发者需要记住 Play 游戏服务到帐号的映射,并在其表中的“覆盖它”模型中清除旧映射。通过这样做,他们可以保持召回帐号和 Play 游戏服务帐号之间清晰的 1:1 映射。
同设备召回 多帐号玩家也可以使用您的召回实现来快速切换他们的游戏帐号。