在 Unity 中设置使用 Google Play Games 登录进行 PlayFab 身份验证

先决条件

入门

首先,我们将从在 Google Play 中设置一些基本内容开始。 有很多指南都对如何完成其中一些任务进行了详细的介绍,此处不再赘述。

  1. 创建应用程序 - 如果未创建应用程序,则需要在 Google Play 开发人员控制台中执行此操作。

  2. 生成游戏 AAB,并将其上传以供内部测试。 可以按照指南操作,了解如何将应用发布到内部测试轨道。在签名过程中,请注意应用程序包必须使用自己的密钥存储。 请参阅文档,了解如何创建密钥存储。

  3. 按照此页上的说明设置 Google Play 游戏服务:设置 Google Play 游戏服务

  4. 下载 Google Play 游戏 SDK 并进行安装。

  5. 安装 PlayFab Unity SDK (如果不知道如何安装,请按照 Unity3D 快速入门指南进行操作)。

配置 Google Play Games

可以通过随 Google Play Games SDK 一起安装的工具集配置 Google Play Games。 可以通过以下方式访问这些工具:

  • 转到 Window 选项卡。

  • 选择 Google Play Games

  • 转到 Setup

  • 然后访问 Android Setup

    配置 Google Play Games

  • 此时会显示“Android 配置”窗口,我们需要在此屏幕上输入“资源定义”和“Web 应用客户端 ID”。

    将 Android 资源粘贴为空

获取资源定义

  • 按照以下步骤获取 Android 资源定义。

获取 Web 应用客户端 ID

为了让 Google 登录与 PlayFab 一起工作,你需要使用 Web 客户端 ID,你可以通过为“Web 应用程序”类型创建 OAuth 客户端 ID 凭据来获取该 ID。

创建 OAuth 客户端 ID 之前,需要知道 PlayFab API 终结点,可以按照以下步骤找到该终结点:

  • 登录到 Game Manager

  • 选择您的游戏。

  • 通过单击游戏名称旁边的齿轮图标,然后选择“游戏设置”,转到游戏设置。

    PF 游戏设置

  • 选择“API 功能”选项卡。

  • 复制到 API 终结点字段。

    Google Play 开发者控制台输入 API 终结点

了解游戏 API 终结点后,请按照此处概述的步骤创建 OAuth 客户端 ID 凭据。

  • 创建客户端 ID 时,需要将 API 终结点添加为客户端 ID 的已授权 JavaScript 源

    已授权的 Javascript 源

  • 此外,请确保将 https://oauth.playfab.com/oauth2/google 添加为已授权重定向 URI。 如果未执行此步骤,则会出现 mismatch redirect_uri 错误。

    已授权重定向 URI

创建客户端 ID 后,你将看到一个类似以下内容的屏幕,其中会生成客户端 ID 字符串和客户端密码。

OAuth 客户端 ID

现在,可以返回到 Unity 中的“Android 配置”窗口,并将客户端 ID 粘贴到“客户端 ID”文本框中:

粘贴客户端 ID

填充这两个值后,可以选择“设置”:

设置已完成 Android 配置

PlayFab Google 登录设置

PlayFab 有自己的 Google 登录设置过程。 可以在 PlayFab 开发者帐户中进行此设置。 如果没有,可以注册免费的开发者帐户

在 PlayFab 中设置 Google:

  • 导航到仪表板中的 Add-ons 部分。
  • 转到 Google Add-On
  • 在此选择“安装 Google”按钮。

下面是需要在该表单中输入的几项内容:

  • Google 应用包 ID - 此字段是 Android 包的名称。 例如,我们的示例使用 com.playfab.gpgexample
  • Google 应用许可证密钥 - 这是必填字段,但它与 Google 登录无关。 此字段用于使用我们的收据验证 API 来设置收据验证。

注意

可以在 Google 开发者控制台中导航到应用,在“盈利”部分下获取此许可证密钥。 单击名为“盈利设置”的部分。 在此处向下滚动,直到看到“授权”文本框,将 Base64 编码的 RSA 公钥复制并粘贴到此字段中。

  • Google OAuth 客户端 ID - 这是在 Unity 的 Google Play 游戏 SDK 设置中使用的 Web 客户端 ID。
  • Google OAuth 客户端密码 - 创建 OAuth 客户端 ID 时获取的密钥。
  • 服务帐户密钥 - 此字段需要服务帐户密钥 JSON 字符串,需要按照以下步骤创建服务帐户密钥。 然后,按照此处的步骤为该服务帐户创建凭据。 获取凭据 JSON 文件后,将整个 JSON 内容粘贴到此字段中。

在保存之前,该加载项配置应如下所示:

PlayFab 中的 Google 加载项设置

提示

请务必保存设置

向 Unity 游戏添加 Google 登录

只需少量代码就可使 Google 登录正常运行。 下面是初始化代码,可以将其置于“开始”(或任何初始化或启动应用的位置)中。

此代码可以位于不同位置,具体取决于游戏或应用的体系结构和框架。 在任何情况下,以下代码都会初始化 Google Play 游戏。

注意

请勿忘记 Using 语句,这样才能使用 Google Play Games SDK。

using GooglePlayGames;
using GooglePlayGames.BasicApi;
using PlayFab;
using PlayFab.ClientModels;
using UnityEngine;

public class PFGoogleSignInUnity : MonoBehaviour
{
    void Start()
    {
        PlayGamesPlatform.Instance.Authenticate(ProcessAuthentication);
    }

    internal void ProcessAuthentication(SignInStatus status)
    {
        if (status == SignInStatus.Success)
        {
            PlayGamesPlatform.Instance.RequestServerSideAccess(false, ProcessServerAuthCode);
        }
    }

    private void ProcessServerAuthCode(string serverAuthCode)
    {
        Debug.Log("Server Auth Code: " + serverAuthCode);

        var request = new LoginWithGooglePlayGamesServicesRequest
        {
            ServerAuthCode = serverAuthCode,
            CreateAccount = true,
            TitleId = PlayFabSettings.TitleId
        };

        PlayFabClientAPI.LoginWithGooglePlayGamesServices(request, OnLoginWithGooglePlayGamesServicesSuccess, OnLoginWithGooglePlayGamesServicesFailure);
    }

    private void OnLoginWithGooglePlayGamesServicesSuccess(LoginResult result)
    {
        Debug.Log("PF Login Success LoginWithGooglePlayGamesServices");
    }

    private void OnLoginWithGooglePlayGamesServicesFailure(PlayFabError error)
    {
        Debug.Log("PF Login Failure LoginWithGooglePlayGamesServices: " + error.GenerateErrorReport());
    }
}

让我们具体分析一下正在发生的事情:

  • 首先,我们使用 PlayGamesPlatform.Instance.Authenticate 登录 - 此函数接收一个回调函数作为处理结果的参数,并根据接收的 SignInStatus 告知我们用户是否成功登录。
  • 如果未将测试帐户添加到应用,则测试时,回调 SignInStatus 结果始终为“已取消”。 如果发生此问题,请按照指南中的步骤将测试人员添加到 Google 应用程序。

注意

PlayGamesPlatform.Instance.Authenticate 的调用将触发 Google Play 游戏登录对话框弹出。

  • 接下来,如果登录成功,我们将调用 PlayGamesPlatform.Instance.RequestServerSideAccess,这将接收另一个回调并返回 ServerAuthCode 字符串。

  • 然后,调用 PlayFabClientAPI.LoginWithGooglePlayGamesServices,并以 ServerAuthCode 参数的形式传入刚刚从 Google 获取的 AuthCode

  • 最后,根据调用 LoginWithGooglePlayGamesServices 的结果,调用 OnLoginWithGooglePlayGamesServicesSuccessOnLoginWithGooglePlayGamesServicesFailure,这些回调将处理 PlayFab 的登录操作结果。 此时,可以在仪表板中看到登录成功!

希望本指南对你有所帮助。 如果遇到问题,欢迎在我们的社区论坛中提问。