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
相关产品推荐
相关产品推荐

