Unity安卓游戏通过远程服务实现Firebase谷歌登录的方法咨询
关于Unity游戏中Firebase谷歌登录的令牌与流程问题解答
一、Google Id Token和Access Token的定义
- Google Id Token:是Google签发的JSON Web Token(JWT),包含用户核心身份信息(如邮箱、谷歌用户ID、姓名),用于验证用户身份的合法性,Firebase可通过它确认用户为真实谷歌账号持有者。
- Google Access Token:用于授权访问谷歌旗下特定服务(如Google Drive、Google Play Games),若你的游戏无需调用这类额外谷歌API,在Firebase登录流程中可传入
null,并非必填项。
二、Unity中获取令牌的方式
需先集成Google Sign-In for Unity插件,步骤如下:
- 在谷歌开发者控制台创建对应Android平台的OAuth 2.0客户端ID,并将其配置到Unity的Google Sign-In插件中。
- 通过插件发起登录,从返回的用户对象中提取令牌:
using GooglePlayGames; using GooglePlayGames.BasicApi; // 初始化Google Sign-In PlayGamesPlatform.Instance.InitializeInstance(new PlayGamesClientConfiguration.Builder() .RequestIdToken("你的谷歌OAuth客户端ID") .Build()); PlayGamesPlatform.Instance.Activate(); // 发起登录请求 PlayGamesPlatform.Instance.Authenticate((success) => { if (success) { string googleIdToken = PlayGamesPlatform.Instance.GetIdToken(); string googleAccessToken = PlayGamesPlatform.Instance.GetAccessToken(); // 拿到令牌后可用于后续Firebase登录或传给远程服务 } });
三、使用令牌完成登录的两种流程
方案1:Unity本地集成Firebase SDK登录
- 引入Firebase Auth Unity SDK。
- 用获取到的令牌创建Firebase凭证并完成登录:
using Firebase.Auth; // 创建Firebase登录凭证 Firebase.Auth.Credential credential = Firebase.Auth.GoogleAuthProvider.GetCredential(googleIdToken, googleAccessToken); // 发起Firebase登录 FirebaseAuth.DefaultInstance.SignInWithCredentialAsync(credential).ContinueWith(task => { if (task.IsCompletedSuccessfully) { FirebaseUser user = task.Result; // 登录成功后,可获取Firebase ID Token传给AWS Lambda做身份校验 user.TokenAsync(false).ContinueWith(tokenTask => { string firebaseIdToken = tokenTask.Result; // 将firebaseIdToken发送到Lambda服务验证身份 }); } });
方案2:登录逻辑迁移至AWS Lambda服务
完全可以将Firebase交互逻辑放在Lambda的ASP.NET服务中,客户端仅需做两步:
- Unity客户端通过Google Sign-In插件获取Google Id Token。
- 将Id Token通过HTTP POST请求发送到Lambda服务,由服务端处理Firebase登录:
// Lambda服务端ASP.NET代码 using FirebaseAdmin; using FirebaseAdmin.Auth; using Google.Apis.Auth.OAuth2; // 初始化Firebase Admin(全局仅需初始化一次) if (FirebaseApp.DefaultInstance == null) { FirebaseApp.Create(new AppOptions { Credential = GoogleCredential.FromFile("firebase-service-account.json") }); } // 处理客户端登录请求 public async Task<IActionResult> LoginWithGoogle([FromBody] GoogleLoginRequest request) { try { // 验证Google Id Token合法性,并解析用户信息 FirebaseToken decodedToken = await FirebaseAuth.DefaultInstance.VerifyIdTokenAsync(request.GoogleIdToken); string uid = decodedToken.Uid; string email = decodedToken.Claims["email"].ToString(); // 此处可执行自定义逻辑:创建用户数据、生成自定义会话令牌返回给客户端 return Ok(new { Uid = uid, Email = email, CustomSessionToken = "你的自定义会话令牌" }); } catch (FirebaseAuthException) { return BadRequest("无效的Google Id Token"); } } // 请求模型定义 public class GoogleLoginRequest { public string GoogleIdToken { get; set; } }
- 客户端收到服务端返回的会话令牌后,后续请求Lambda时携带该令牌,服务端验证通过后再处理业务逻辑。
四、是否必须在Unity中运行Firebase SDK?
不需要强制集成。你可以将所有Firebase交互逻辑迁移到AWS Lambda服务,Unity客户端仅负责获取Google Id Token并通过HTTP与服务端通信,完全无需引入Firebase Unity SDK。这种方式能减少客户端依赖,将敏感逻辑(如数据库操作、用户数据处理)放在服务端,安全性更高。
内容的提问来源于stack exchange,提问作者SulfurChunk
相关产品推荐
相关产品推荐

