设置适用于 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 中,依次点击 Assets > Import Package > Custom Package,将 unitypackage 文件导入到项目资源中。

  3. 确保当前的 build 平台已设置为 Android

    1. 在主菜单中,依次点击 File > Build Settings

    2. 选择 Android,然后点击 Switch Platform

    3. Window > Google Play Games 下应该会显示新的菜单项。如果未显示,请点击 Assets > Refresh 来刷新资源,然后再次尝试设置 build 平台。

  4. 在 Unity Hub 中,依次点击 File > Build Settings > Player Settings > Other Settings

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

  6. Scripting backend 框中,输入 IL2CPP

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

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

Unity 项目中的玩家设置
Unity 项目中的玩家设置。

创建新密钥库

若要验证您的凭据,您需要使用密钥。请按以下步骤操作:

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

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

从 Play 管理中心复制 Android 资源

您在 Play 管理中心内创建的每个成就、排行榜和活动都包含您在设置 Unity 项目时使用的 Android 资源。

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

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

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

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

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

将 Android 资源添加到 Unity 项目

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

  1. 在 Unity Hub 中,依次点击 Window > Google Play Games > Setup > Android Setup

    • Directory to save constants 字段中,输入常量文件的文件夹名称。
    • Constants class name 字段中,输入要创建的 C# 类的名称,包括命名空间。

      例如,如果 C# 类为 id.cs,且位于 Assets > myproject > scripts > id.cs 下。常量类名称可以是 myproject.scripts.id

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

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

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

      只有在游戏具有基于网络的后端并且后端服务器需要用服务器授权代码来换取访问令牌时,或者您需要 ID 令牌来让玩家进行其他非游戏 API 调用时,才需要该 ID。

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

  2. 在 Unity Hub 中,依次点击 Window > Google Play Games > Setup > Nearby Connections Setup

    • 附近分享服务 ID 字段中,输入 package_name

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

    • 点击设置

选择社交平台

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

您可以通过 Social.Active 对象(它是对 ISocialPlatform 接口的引用)访问标准 API 调用。您可以将 Social.Active 对象转换为 PlayGamesPlatform 类(其中提供其他方法),然后借此访问非标准 Google Play 游戏服务扩展。

使用插件而不替换默认社交平台

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

不过,如果您出于某些原因而需要继续访问默认实现(例如,需要使用默认实现向其他社交平台提交成就和排行榜),可以使用 Google Play 游戏服务插件而不替换默认实现。具体方法如下:

  1. 请勿调用 PlayGamesPlatform.Activate
  2. 如果您需要对 Social 类调用的方法名为 Xyz,请勿调用 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 的 Social 平台,您也可以改用以下代码:

  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 中,依次点击 File > Build settings
  2. 选择 Build App Bundle ( Google Play )

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

  3. 点击 Build

  4. 从 Unity Hub 下载 AAB 文件。

创建内部测试版本

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

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

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

  8. 接收反馈的网址或电子邮件地址中,输入接收反馈的网址或电子邮件地址。

  9. 点击 Save

验证您的应用签名凭据

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

构建并运行项目

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

您需要一部已启用 USB 调试的实体 Android 设备,或者能够运行所开发项目的模拟器。

检索服务器身份验证代码

若要代表当前玩家在后端网络服务器上访问 Google API,您需要从客户端应用获取身份验证代码,然后将其传递给您的网络服务器应用。然后,可以使用该代码换取访问令牌,以便调用各种 API。如需了解该工作流,请参阅使用 Google 账号登录网页版

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

  1. 在 Play 管理中心内为游戏所关联的 Web 应用配置 Web 客户端 ID。

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

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

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

设置和添加功能