设置适用于 Unity 的 Google Play 游戏并登录

本文档将指导您设置 Unity 项目以使用适用于 Unity 的 Google Play 游戏插件。您将学习如何安装插件并配置 Unity 项目。本文档还介绍了如何验证登录服务。

准备工作

查看软件要求。设置 Play 管理中心并安装 Unity Hub。

插件安装

如需下载并安装适用于 Unity 的 Google Play 游戏插件,请在 Unity Hub 中按以下步骤操作:

  1. 下载 GitHub 代码库

  2. current-build 目录中,找到 unitypackage 文件。此文件即为插件。例如,它应类似于以下内容:

      current-build/GooglePlayGamesPluginForUnity-X.YY.ZZ.unitypackage
    

设置 Unity 项目

如需在播放器设置中设置 Unity 项目,请按以下步骤操作:

  1. 打开您的游戏项目。

  2. 在 Unity Hub 中,点击 资源 > 导入软件包 > 自定义软件包,将 unitypackage 文件导入到您的项目资源中。

  3. 确保您的当前构建平台已设置为 Android

    1. 在主菜单中,点击 文件 > 构建设置

    2. 选择 Android 并点击 切换平台

    3. 窗口 > Google Play 游戏 下应有一个新的菜单项。如果没有,请点击 资源 > 刷新 来刷新资源,然后再次尝试设置构建平台。

  4. 在 Unity Hub 中,点击 文件 > 构建设置 > 播放器设置 > 其他设置

  5. 目标 API 级别 框中,选择一个版本。

  6. 脚本后端 框中,输入 IL2CPP

  7. 目标架构 框中,选择一个值。

  8. 记下软件包名称 package_name。您以后可以使用此信息。

The player settings in your Unity project
您的 Unity 项目中的播放器设置。

创建新的密钥库

如需验证您的凭据,您需要一个密钥。请按以下步骤操作:

  1. 在 Unity Hub 中,点击 文件 > 构建设置 > 播放器设置
  2. 发布设置 部分,点击 密钥库管理器
    1. 密钥库管理器 窗口中,点击 密钥库 > 创建新密钥 > 任意位置
    2. 选择一个文件夹并为密钥库提供一个名称。
    3. 密码 框中,输入密码并确认。
    4. 点击 添加密钥

记下文件夹名称。您可以使用此名称在 Google Cloud 中创建凭据

从 Play 管理中心复制 Android 资源

您在 Play 管理中心创建的每个成就、排行榜和事件都包含一个 Android 资源,您在设置 Unity 项目时会用到该资源。

如需获取游戏的 Android 资源,请按以下步骤操作:

  1. Google Play 管理中心中,打开游戏。

  2. Play 游戏服务 - 配置页面(发展 > Play 游戏服务 > 设置和管理 > 配置)中,点击 获取资源

  3. 资源 窗口中,点击 Android (XML) 标签页。

  4. 选择并复制 Android 资源 (AndroidManifest.xml) 内容。

将 Android 资源添加到您的 Unity 项目

将以下 Android 资源添加到您的 Unity 项目:

  1. 在 Unity Hub 中,点击 窗口 > Google Play 游戏 > 设置 > Android 设置

    • 保存常量的目录 字段中,输入常量文件的文件夹名称。
    • 常量类名称 字段中,输入要创建的 C# 类的名称,包括命名空间。

      例如,如果 C# 类为 id.cs,并且位于 资源 > myproject > 脚本 > id.cs 下。则常量类名称可以是 myproject.scripts.id

    • 资源定义 字段中,粘贴您从 Google Play 管理中心复制的 Android 资源数据(AndroidManifest.xml 文件)。

    • 可选:在 客户端 ID 字段中,输入关联网络应用的客户端 ID。

      如需从 Google Cloud 获取游戏的客户端 ID,请参阅创建客户端 ID

      仅当您的游戏拥有基于 Web 的后端且需要服务器身份验证代码以供后端服务器兑换访问令牌,或者您需要玩家 ID 令牌以进行其他非游戏 API 调用时,才需要此操作。

    • 点击 设置。这会使用客户端 ID 配置您的游戏,并生成一个 C# 类,其中包含每个 Android 资源的常量。

  2. 在 Unity Hub 中,点击 窗口 > Google Play 游戏 > 设置 > 附近连接设置

    • 附近连接服务 ID 字段中,输入 package_name

      使用您在设置 Unity 项目中使用的相同 package_name

    • 点击 设置

选择社交平台

Google Play 游戏服务插件实现了 Unity 的社交界面,以便与在集成其他平台时已使用该界面的游戏兼容。但是,某些功能是 Play 游戏独有的,并作为 Unity 提供的标准社交界面的扩展提供。

可以通过 Social.Active 对象访问标准 API 调用,该对象是对 ISocialPlatform 接口的引用。非标准的 Google Play 游戏服务扩展可以通过将 Social.Active 对象强制转换为 PlayGamesPlatform 类来访问,其中提供了附加方法。

在不覆盖默认社交平台的情况下使用插件

当您调用 PlayGamesPlatform.Activate 时,Google Play 游戏服务将成为您的默认社交平台实现,这意味着对 SocialSocial.Active 中的方法进行的静态调用将由 Google Play 游戏服务插件执行。这是大多数使用该插件的游戏的行为。

但是,如果由于某种原因您希望保持默认实现可访问(例如,使用它向不同的社交平台提交成就和排行榜),您可以在不覆盖默认社交平台的情况下使用 Google Play 游戏服务插件。为此,请执行以下操作:

  1. 不要调用 PlayGamesPlatform.Activate
  2. 如果 Xyz 是您需要在 Social 类上调用的方法的名称,请不要调用 Social.Xyz。而是调用 PlayGamesPlatform.Instance.Xyz
  3. 与 Google Play 游戏服务交互时,不要使用 Social.Active。而是使用 PlayGamesPlatform.Instance

这样,您甚至可以同时向两个或更多社交平台提交分数和成就。

    // Submit achievement to original default social platform
    Social.ReportProgress("MyAchievementIdHere", 100.0f, callback);

    // Submit achievement to Google Play
    PlayGamesPlatform.Instance.ReportProgress("MyGooglePlayAchievementIdHere", 100.0f, callback);

验证登录服务

当您的游戏打开时,系统会自动尝试使用登录服务连接到 Play 游戏服务。如果连接成功,您的游戏会显示登录提示,并已准备好使用适用于 Unity 的 Google Play 游戏插件。

如果用户从未在其设备上使用过 Google Play 游戏服务,他们将自动通过一次性设置屏幕创建 Play 游戏账号。

在脚本的 Start 方法中,监听自动登录尝试的结果,获取身份验证状态,如果用户未登录,则禁用 Play 游戏服务功能。

如果 Unity 插件版本低于 v11,则无法使用登录功能。

    using GooglePlayGames;

    public void Start() {
      PlayGamesPlatform.Instance.Authenticate(ProcessAuthentication);
    }

    internal void ProcessAuthentication(SignInStatus status) {
      if (status == SignInStatus.Success) {
        // Continue with Play Games Services
      } else {
        // Disable your integration with Play Games Services or show a login button
        // to ask users to sign-in. Clicking it should call
        // PlayGamesPlatform.Instance.ManuallyAuthenticate(ProcessAuthentication).
      }
    }

结果代码是一个枚举,您可以使用它来识别登录失败的原因。

如果您更喜欢使用 Unity 的社交平台,也可以使用以下代码:

  using GooglePlayGames;

  public void Start() {
    PlayGamesPlatform.Activate();
    Social.localUser.Authenticate(ProcessAuthentication);
  }

在您从 Authenticate 获得成功返回值之前,您无法进行任何 Google Play 游戏服务 API 调用。因此,我们建议游戏在回调被调用之前显示一个待机屏幕,以确保用户在身份验证完成之前无法开始玩游戏。

使用 Play 应用签名

Google 使用 Play 应用签名来管理和保护您应用的签名密钥。您可以使用 Play 应用签名来签署优化的 Android App Bundle (AAB) 文件分发。Play 应用签名将您的应用签名密钥存储在 Google 的安全基础架构中。要使用 Play 应用签名,您必须首先从 Unity Hub 创建并下载 AAB 文件。然后,您可以将 AAB 文件上传到 Play 管理中心并创建内部测试版本。

创建 AAB 文件

如需在 Unity Hub 中创建 AAB 文件,请按以下步骤操作:

  1. 在 Unity Hub 中,点击 文件 > 构建设置
  2. 选择 构建应用软件包(Google Play)

    如需了解详情,请参阅Android 构建设置参考

  3. 点击 构建

  4. 从 Unity Hub 下载 AAB 文件。

创建内部测试版本

如需在 Play 管理中心中创建内部测试版本并添加测试人员,请按以下步骤操作:

  1. Google Play 管理中心中,选择一个游戏。
  2. 转到 测试和发布 页面(测试 > 内部测试)。
  3. 点击 上传 并选择 AAB 文件。
  4. 发布详情 字段中,输入名称。
  5. 点击 下一步 并查看发布详情。
  6. 点击 保存并发布
  7. 测试人员 标签页上,点击 创建电子邮件列表 可添加最多 100 名测试人员。

    如需了解详情,请参阅内部测试:管理最多 100 名测试人员

  8. 反馈网址或电子邮件地址 字段中,输入反馈网址或电子邮件地址以提供反馈。

  9. 点击 保存

验证您的应用签名凭据

  1. Google Play 管理中心中,选择一个游戏。
  2. 转到 测试和发布 页面(设置 > 应用签名)。
  3. 验证您的应用签名凭据。

构建并运行项目

您现在可以构建并运行游戏项目了。游戏启动时,您会看到自动登录尝试。

您需要一台已启用 USB 调试的实体 Android 设备或一个可以运行已开发项目的模拟器。

检索服务器身份验证代码

为了代表当前玩家访问后端网络服务器上的 Google API,您需要从客户端应用获取身份验证代码并将其传递给您的网络服务器应用。然后,该代码可以兑换为访问令牌,以调用各种 API。有关工作流的信息,请参阅通过 Google 帐号登录网页

如需获取服务器端访问代码,请执行以下操作:

  1. 在 Play 管理中心配置与您的游戏关联的网络应用的 Web 客户端 ID。

  2. 玩家通过身份验证后,调用 PlayGamesPlatform.Instance.RequestServerSideAccess 以获取服务器端访问代码。

  3. 将此代码传递给您的服务器应用。

  PlayGamesPlatform.Instance.RequestServerSideAccess(
    /* forceRefreshToken= */ false,
    code -> {
      // send code to server
    });

设置和添加功能