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

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插件,步骤如下:

  1. 在谷歌开发者控制台创建对应Android平台的OAuth 2.0客户端ID,并将其配置到Unity的Google Sign-In插件中。
  2. 通过插件发起登录,从返回的用户对象中提取令牌:
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登录

  1. 引入Firebase Auth Unity SDK。
  2. 用获取到的令牌创建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服务中,客户端仅需做两步:

  1. Unity客户端通过Google Sign-In插件获取Google Id Token。
  2. 将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; }
}
  1. 客户端收到服务端返回的会话令牌后,后续请求Lambda时携带该令牌,服务端验证通过后再处理业务逻辑。

四、是否必须在Unity中运行Firebase SDK?

不需要强制集成。你可以将所有Firebase交互逻辑迁移到AWS Lambda服务,Unity客户端仅负责获取Google Id Token并通过HTTP与服务端通信,完全无需引入Firebase Unity SDK。这种方式能减少客户端依赖,将敏感逻辑(如数据库操作、用户数据处理)放在服务端,安全性更高。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 04:35:23