在 Unity 中设置使用 Google Play Games 登录进行 PlayFab 身份验证
先决条件
- 使用 Unity 游戏引擎生成的项目。
- Google 开发者帐户。
- 有权访问 PlayFab 中的游戏标题的 PlayFab 开发者账户。
- PlayFab Unity 编辑器扩展和 Unity SDK。
- Google Play Games SDK。
- 熟悉登录基础知识和最佳实践。
入门
首先,我们将从在 Google Play 中设置一些基本内容开始。 有很多指南都对如何完成其中一些任务进行了详细的介绍,此处不再赘述。
创建应用程序 - 如果未创建应用程序,则需要在 Google Play 开发人员控制台中执行此操作。
生成游戏 AAB,并将其上传以供内部测试。 可以按照本指南操作,了解如何将应用发布到内部测试轨道。在签名过程中,请注意应用程序包必须使用自己的密钥存储。 请参阅此文档,了解如何创建密钥存储。
按照此页上的说明设置 Google Play 游戏服务:设置 Google Play 游戏服务。
下载 Google Play 游戏 SDK 并进行安装。
安装 PlayFab Unity SDK (如果不知道如何安装,请按照 Unity3D 快速入门指南进行操作)。
配置 Google Play Games
可以通过随 Google Play Games SDK 一起安装的工具集配置 Google Play Games。 可以通过以下方式访问这些工具:
转到 Window 选项卡。
选择 Google Play Games。
转到 Setup。
然后访问 Android Setup。
此时会显示“Android 配置”窗口,我们需要在此屏幕上输入“资源定义”和“Web 应用客户端 ID”。
获取资源定义
- 按照以下步骤获取 Android 资源定义。
获取 Web 应用客户端 ID
为了让 Google 登录与 PlayFab 一起工作,你需要使用 Web 客户端 ID,你可以通过为“Web 应用程序”类型创建 OAuth 客户端 ID 凭据来获取该 ID。
创建 OAuth 客户端 ID 之前,需要知道 PlayFab API 终结点,可以按照以下步骤找到该终结点:
登录到 Game Manager。
选择您的游戏。
通过单击游戏名称旁边的齿轮图标,然后选择“游戏设置”,转到游戏设置。
选择“API 功能”选项卡。
复制到 API 终结点字段。
了解游戏 API 终结点后,请按照此处概述的步骤创建 OAuth 客户端 ID 凭据。
创建客户端 ID 时,需要将 API 终结点添加为客户端 ID 的已授权 JavaScript 源。
此外,请确保将
https://oauth.playfab.com/oauth2/google
添加为已授权重定向 URI。 如果未执行此步骤,则会出现 mismatch redirect_uri 错误。
创建客户端 ID 后,你将看到一个类似以下内容的屏幕,其中会生成客户端 ID 字符串和客户端密码。
现在,可以返回到 Unity 中的“Android 配置”窗口,并将客户端 ID 粘贴到“客户端 ID”文本框中:
填充这两个值后,可以选择“设置”:
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 内容粘贴到此字段中。
在保存之前,该加载项配置应如下所示:
提示
请务必保存设置!
向 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
的结果,调用OnLoginWithGooglePlayGamesServicesSuccess
或OnLoginWithGooglePlayGamesServicesFailure
,这些回调将处理 PlayFab 的登录操作结果。 此时,可以在仪表板中看到登录成功!
希望本指南对你有所帮助。 如果遇到问题,欢迎在我们的社区论坛中提问。