You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity新版Google插件下通过Playfab实现Google登录方案咨询

新版Google Unity插件适配PlayFab Google登录实现方案

Google Play Games Unity插件v11+版本对API做了不兼容重构,旧教程依赖的PlayGamesClientConfiguration类、独立获取授权码的GetServerAuthCode()调用逻辑均已废弃,可按照以下步骤实现登录:

1. 插件初始化配置

导入对应版本插件后,使用PlayGamesParams类替代旧配置类完成初始化,必须显式开启服务端授权码请求、填入正确的Web端客户端ID:

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

public class GoogleLoginAdapter : MonoBehaviour
{
    private void Start()
    {
        PlayGamesPlatform.InitializeInstance(new PlayGamesParams
        {
            // 注意:此处必须填Google Cloud Console创建的「Web应用」类型OAuth2客户端ID,不可填Android客户端ID
            ServerClientId = "替换为你的Web端OAuth2客户端ID",
            RequestServerAuthCode = true,
            RequestIdToken = false,
            RequestEmail = false
        });
        PlayGamesPlatform.Activate();
    }

2. 触发Google登录获取ServerAuthCode

旧版本独立调用PlayGamesPlatform.Instance.GetServerAuthCode()的逻辑已整合到登录流程中,在登录成功回调里直接获取授权码即可,不需要额外单独调用接口:

/// <summary>
    /// 外部绑定按钮触发登录
    /// </summary>
    public void StartGoogleLogin()
    {
        PlayGamesPlatform.Instance.Authenticate(OnGoogleAuthComplete);
    }

    private void OnGoogleAuthComplete(SignInStatus status, GoogleSignInUser user)
    {
        if (status != SignInStatus.Success)
        {
            Debug.LogError($"Google端登录失败,状态:{status}");
            return;
        }

        // 从登录返回的用户对象中取服务端授权码,替代旧版本的独立获取方法
        string serverAuthCode = user.AuthCode;
        // 若当前小版本user对象未暴露AuthCode属性,可改用 PlayGamesPlatform.Instance.GetServerAuthCode() 获取
        if (string.IsNullOrEmpty(serverAuthCode))
        {
            Debug.LogError("授权码为空,请检查初始化时ServerClientId配置、RequestServerAuthCode开关状态");
            return;
        }

        RequestPlayFabLogin(serverAuthCode);
    }

3. 调用PlayFab登录接口

拿到有效ServerAuthCode后,调用PlayFab登录接口的逻辑和旧版本完全一致,没有改动:

private void RequestPlayFabLogin(string serverAuthCode)
    {
        var loginReq = new LoginWithGoogleAccountRequest
        {
            ServerAuthCode = serverAuthCode,
            CreateAccount = true
        };

        PlayFabClientAPI.LoginWithGoogleAccount(loginReq, OnPlayFabLoginSuccess, OnPlayFabLoginError);
    }

    private void OnPlayFabLoginSuccess(LoginResult result)
    {
        Debug.Log($"PlayFab登录成功,玩家ID:{result.PlayFabId}");
        // 此处写登录成功后的业务逻辑
    }

    private void OnPlayFabLoginError(PlayFabError error)
    {
        Debug.LogError($"PlayFab登录失败:{error.GenerateErrorReport()}");
    }
}

常见踩坑说明

  • 初始化参数里的ServerClientId绝对不能填Android类型的客户端ID,必须填Web应用类型的客户端ID,否则会拿不到授权码,PlayFab侧校验也会直接失败
  • 必须显式把RequestServerAuthCode设为true,插件默认不请求服务端授权码,会导致拿到的AuthCode为空
  • 编辑器下调试需要安装插件配套的PC端Google Play Games运行组件,否则无法拉起登录流程,建议首次调试直接用Android真机
  • 发布前确认Google Cloud Console的OAuth同意屏幕为已发布状态,测试阶段需要把测试账号加入白名单,否则会返回登录错误

内容的提问来源于stack exchange,提问作者Mohamed Nour

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 13:21:12