将 Play 游戏服务与现有身份验证解决方案集成

本页介绍了如何将 Play 游戏服务登录机制集成到您现有的身份验证或云端存档解决方案。虽然这些建议并不是强制性的,但遵循这些建议有助于您满足 Google Play 游戏电脑版的云端存档要求。您可以参考连续性要求预期行为页面,确认您的实现是否满足这些要求。

恢复玩家状态

在游戏的后端,游戏账号可能由某个标识符表示,您可以通过该标识符提取和更新账号的游戏进度。我们将其简称为账号 ID。当玩家登录 Play 游戏服务时,您可以使用该身份验证凭据获取一个新的标识符,即 Play 游戏服务玩家 ID,此 ID 用于满足云端存档要求

Play 游戏服务多标识符工作流

当玩家登录 Play 游戏服务时,您应按以下方式继续操作:

  1. 从客户端检索 OAuth 代码并将其发送到您的服务器。
  2. 交换身份验证令牌,并从 Play 游戏服务器获取经过验证的 Play 游戏服务 ID。这样可以确保该 ID 可信,而不是有人通过使用遭破解的设备来冒充其他玩家。
  3. 尝试根据设备的条件及任何关联的标识符解析游戏账号。

您需要在游戏中引入两个主要的新场景:

  • 将 Play 游戏服务 ID 存储在后端,并以某种方式将这些 ID 分配给现有的账号 ID,例如:
    • 对于新玩家,系统应在某个时间点自动将其游戏进度关联到 Play 游戏服务。(例如,在游戏启动时、用户学完教程之后或完成一定数量的关卡之后,等等)。
    • 对于现有玩家,当玩家更新到集成了 Play 游戏服务 V2 的游戏版本后,系统应自动将其当前进度关联到 Play 游戏服务。
    • Play 游戏服务 ID 可与一个或多个账号相关联,Play 游戏服务也可取消与这些账号的关联,但应至少与一个有效账号相关联。
  • 在已退出账号的设备/新设备上根据 Play 游戏服务玩家 ID 自动恢复游戏进度。

如下方的例子所述,存储 Play 游戏服务 ID 并将其分配给现有账号的方式非常灵活。您只需要记得,主要要求是:不得要求玩家必须手动登录或必须与其他身份系统建立关联,才能将 Play 游戏服务 ID 与游戏进度相关联,而且玩家的游戏进度应该能在各个平台上无缝恢复。

在设计解决方案时,请先查看您的现有系统以及该系统如何整合不同的身份提供方。有些系统会针对每个账号使用一个标识符,而有些系统则会为每个账号使用多个标识符。

如果您只能将每个账号 ID 与一个标识符相关联,则需要添加相关支持,才能将 Play 游戏服务与账号 ID 相关联。下面的解决方案展示了如何实现这点。

解决方案示例

解决方案示例包括绑定找回解决方案。

绑定是将 Play 游戏服务 ID 永久或半永久地关联到某个账号状态的过程。在采用绑定解决方案的情况下,即使玩家在您的游戏中登录和退出其他账号,只要他们不执行相应更改,通过 Play 游戏服务恢复的底层账号便不会改变。我们在这里以账号绑定为例来对此进行说明。

强绑定流程

如果采用找回解决方案,您(游戏开发者)要存储 Play 游戏服务 ID 与最近所用账号的松散映射,以便玩家在其他设备上登录 Play 游戏服务时恢复账号。玩家每次使用同一 Play 游戏服务 ID 登录其他游戏账号时,此绑定都会发生更改。下面是一个流程图示例,我们在下文的找回近期账号示例中有详细介绍:

找回流程 找回流程图

我们在下文的解决方案中附上了更多的用户流示例。

账号绑定

如果您的游戏没有很多持有多个账号的玩家,或者您想要鼓励玩家在您的游戏中只使用一个账号,那么绑定可能是适合您的游戏的最佳解决方案。在此示例中,您要将登录 Play 游戏服务时看到的第一个账号(无论是访客账号,还是同时还与其他身份平台绑定的账号)与 Play 游戏服务 ID 绑定。完成此绑定后,系统在新设备上会自动恢复绑定的账号。由于我们实现的是强绑定,因此玩家还可以切换 Play 游戏服务玩家资料来更改游戏中的账号;在这种情况下,您可以提示玩家进行确认。

Play 游戏服务账号解析工作流

如果存在有冲突的账号,您最好提示玩家选择一个账号。这些冲突的情况应该只发生在那些在游戏中具有多个账号的玩家身上,这些玩家很可能知道并且想要使用特定的账号玩游戏。

解析账号后,您的游戏应记住玩家的选择,除非登录标识符发生变化。如果 Play 游戏服务玩家资料发生了变化,或者玩家在游戏中通过其他标识符进行登录,则应重复执行上述步骤,因为玩家发出了强烈的信号,表明他们想要更换账号。

解除绑定

如果您希望让玩家能够完全控制其绑定,则可以允许玩家解除其 Play 游戏服务玩家 ID 与游戏账号的绑定。对于一些持有多个账号的玩家,如果他们不小心将 Play 游戏服务玩家 ID 与非主账号绑定在了一起,那么允许他们自己解除绑定就很重要。

其他账号绑定示例

强绑定流程

在这个主要示例中,系统将某个指定 Play 游戏服务玩家 ID (1) 绑定到了看到的第一个游戏内账号 (A);当玩家在游戏过程中退出账号并切换到其他账号继续玩时并没有重新绑定账号。

您可以选择让玩家重新绑定账号,但这并非强制要求。

在设备上切换账号

强绑定的账号切换流程

在这个示例中,玩家手动切换了 Play 游戏服务账号,因而向游戏发出了强烈的信号,表明他们想要在游戏中更换到其他账号。玩家希望游戏对该更改做出响应;因此将这种信号纳入考虑有助于提升玩家体验。

使用其他标识符的现有绑定账号

强绑定的现有账号流程

这个示例显示,即使是绑定到非 Play 游戏服务标识符的账号也应该绑定到 Play 游戏服务,然后在新设备上恢复。您的游戏中大多数拥有账号的现有玩家都属于此类别。

找回近期使用的账号

在考虑解决方案时,经常会遇到的一个问题是多账号体验。如果您的游戏激励高级用户创建很多账号(例如,扭蛋游戏,或选择您自己的冒险游戏),那么将 Play 游戏服务玩家 ID 绑定到单个账号可能无法在跨设备游戏方面提供最佳玩家体验。

如果采用找回解决方案,您要存储 Play 游戏服务玩家 ID 与游戏内账号的松散映射,玩家只能看到切换设备或退出登录时存储的最后一个账号。

找回流程图

在此示例中,某位玩家拥有一款游戏的三个账号,并且该玩家要转移到新设备上:

找回流程 2

提示玩家恢复账号时,您还可以提供“取消”或“新建”按钮,供玩家选择创建新账号。

为简单起见,您的游戏还可以选择仅找回上次使用的账号。在多账号切换的用例中,这可能会更加困难,但仍然满足连续性要求。

其他找回示例

下面部分提供了使用找回功能的其他示例。

非 Android 手机

非 Android 手机上的找回流程

这部分我们将介绍如何找回现有账号(第三方关联账号)或在其他未登录 Play 游戏服务的设备上创建的账号。

更常见的流程可能是从非 Android 手机迁移到 Google Play 游戏电脑版。

非 Android 手机上的找回流程 2

由于非 Android 手机没有 Play 游戏服务,因此不会启用找回功能,玩家必须在 Google Play 游戏电脑版中手动输入其凭据。

一个账号有多个 Play 游戏服务玩家资料

有时,可能会有多个活跃的 Play 游戏服务玩家资料之前曾“找回”某个账号。在这种情况下,有两个效果都很好的主要解决方案:

仍然保存 找回多个玩家资料并仍然保存流程 在“仍然保存”模型中,我们会忽略指向给定帐号的重复指针。

替换 找回多个玩家资料并替换流程 在“替换”模式中,开发者需要在“替换”模式的表中记住 Play 游戏服务到帐号的映射并清除旧的映射。这样,开发者就可以保留找回的账号与 Play 游戏服务账号之间单纯的一对一映射。

同一设备召回率 同一设备上的找回流程 持有多个帐号的玩家也可以使用您实现的找回功能在其游戏帐号之间快速切换。