4

希望有人可以在这里为我指明正确的方向,我正在尝试使用从 Unity 中的异步调用中检索到的谷歌身份验证代码登录 Playfab,流程如下:

  1. 在 Unity 中单击我的登录到 google 按钮。

  2. Unity 开始监听响应并打开一个 google 登录浏览器会话。

  3. 用户单击电子邮件/登录他们想要的电子邮件。

  4. 此响应将使用身份验证代码返回给 Unity。

  5. 然后我尝试将返回的谷歌身份验证代码与 playfabs LoginWithGoogleAccount 方法一起使用”:

    PlayFabClientAPI.LoginWithGoogleAccount(new LoginWithGoogleAccountRequest()
    {
        TitleId = PlayFabSettings.TitleId,
        ServerAuthCode = returnedWindowsGoogleAuthCode,
    
        CreateAccount = true,
    }, OnPlayfabGooglePlayAuthComplete, OnPlayfabGooglePlayAuthFailed);
    
  6. 然后,这将失败,并从 playfab 返回带有“invalidGoogleToken”的响应。

从我在谷歌上看到的内容来看,当我调用 LoginWithGoogleAccount 时,这个令牌可能处于“已使用”状态,我可能需要一个刷新的令牌?但我对 Google API 不太熟悉,所以我可能完全不符合标准?但如果是这种情况,我应该在这里做什么?如何在不返回浏览器再次执行相同操作的情况下重新请求有效令牌?

为了让您大致了解我正在查看的确切代码,但我稍作更改以使其在 Unity 中工作,我遵循 Google 示例 OAuthDesktopApp 代码: OAuthDesktopApp 示例代码

我正在调用方法“button_Click”,它运行并发出请求,然后 Unity 在第 72 行开始侦听 google 响应,然后在第 129 行将身份验证代码输出到日志。

第 129 行的此身份验证代码输出是我随后传递回 LoginWithGoogleAccount 的内容,然后导致失败的“invalidGoogleToken”,这也会运行对用户信息的请求,该请求确实返回了您的用户的姓名/电子邮件用等登录

只是为了添加到我之前的评论中,如果我删除了对 performCodeExchange 第 132 行的调用(我在某处读到,那时我正在将身份验证代码交换为令牌,因此身份验证代码将不再起作用?我猜这里)然后如果我使用我收到的身份验证代码调用 PlayFabClientAPI.LoginWithGoogleAccount:

PlayFabError 错误:

错误.GetHashCode(): 2051826304

错误。错误:无效的GoogleToken

error.ErrorMessage:invalid_grant 详细信息:缺少代码验证器。

错误。错误详细信息:空

希望这可以帮助有人指导我。

4

1 回答 1

1

首先感谢那些回复这个问题的人,所以我在 Playfab mod 发表评论后设法解决了这个问题,Google 似乎没有官方方式可以使用独立的 Unity 构建登录,也没有官方方式可以登录 Playfab使用相同的构建方法。

我使用的解决方案使用来自OAuth 2.0 for Mobile & Desktop Apps的 Google 示例之一的修改 Unity 版本。这将允许您在 Unity 中获取 oauth 代码,然后您可以将此 oauth 代码传递给 Playfab 以进行登录,但是 Playfab 已经弃用了这样做的方式(如果它是唯一的解决方案,这很愚蠢)所以您需要修改 Playfabs SDK要包含访问令牌,那么您可以使用它来最终登录。

于 2021-09-03T08:09:50.210 回答