无需GPG服务,在游戏中实现Google Sign In并获取用户账号信息的方法咨询
实现无Google Play Games服务的Google Sign In获取用户信息
嘿,我完全懂你的需求——不想牵扯Google Play Games那一套,就单纯想拿到Google用户的基础账号信息对吧?这里有几个经过验证的实现思路,分享给你:
方案1:直接基于Google OAuth 2.0手动实现(最轻量化,无额外依赖)
这是最原生的方式,不需要任何第三方插件,完全靠Unity自带的API就能搞定:
第一步:在Google Cloud Console配置项目
- 创建或选择现有项目,进入「API和服务」→「凭据」
- 创建「OAuth 2.0 客户端ID」,选择对应平台(Android/iOS/桌面)
- 配置回调URI(比如Android可以用
com.your.package.name:/oauth2redirect,iOS要配置对应的URL Scheme) - 确保启用了「Google Identity API」(一般默认会开,但最好确认下)
第二步:在Unity里处理OAuth流程
- 用
Application.OpenURL打开Google的授权端点,带上必要参数:string authUrl = "https://accounts.google.com/o/oauth2/v2/auth" + $"?client_id=YOUR_CLIENT_ID" + $"&redirect_uri=YOUR_REDIRECT_URI" + $"&response_type=code" + $"&scope=email%20profile" + $"&access_type=offline"; Application.OpenURL(authUrl); - 捕获授权后的回调:Android可以通过自定义Activity拦截Intent,iOS可以通过
AppDelegate的OpenURL方法获取回调里的授权码 - 用
UnityWebRequest向Google的令牌端点发送请求,换取访问令牌和ID令牌:string tokenUrl = "https://oauth2.googleapis.com/token"; WWWForm form = new WWWForm(); form.AddField("code", "AUTHORIZATION_CODE_FROM_CALLBACK"); form.AddField("client_id", "YOUR_CLIENT_ID"); form.AddField("client_secret", "YOUR_CLIENT_SECRET"); // 注意:Android/iOS客户端可以省略,但桌面端需要 form.AddField("redirect_uri", "YOUR_REDIRECT_URI"); form.AddField("grant_type", "authorization_code"); UnityWebRequest request = UnityWebRequest.Post(tokenUrl, form); yield return request.SendWebRequest(); if (request.result == UnityWebRequest.Result.Success) { // 解析返回的JSON,拿到id_token string jsonResponse = request.downloadHandler.text; // 解析id_token(JWT格式),里面包含用户的邮箱、姓名、头像等信息 } - 解析ID令牌:可以用JWT库(比如
Jwt.Net,Unity里可以通过NuGet导入)来解码,直接获取用户的公开信息,不需要再调用额外API
- 用
方案2:用Firebase Authentication(最省心,封装完善)
如果你不想手动处理OAuth的繁琐流程,Firebase Auth是个绝佳选择——它只做身份验证,完全不需要依赖Firebase的其他服务,也和Google Play Games无关:
第一步:配置Firebase项目
- 在Firebase控制台创建项目,启用「Authentication」服务
- 在「登录方法」里启用「Google」提供商,配置好Google Cloud的客户端ID和密钥(其实Firebase会自动关联,但最好确认下)
- 下载
google-services.json(Android)或GoogleService-Info.plist(iOS),导入Unity项目的Assets根目录
第二步:Unity集成代码
- 导入Firebase Auth的Unity SDK(可以通过Firebase控制台的「添加应用」→「Unity」步骤获取SDK,或者用Unity Package Manager安装)
- 初始化Firebase,然后调用Google登录:
using Firebase; using Firebase.Auth; using UnityEngine; public class GoogleSignInManager : MonoBehaviour { private FirebaseAuth auth; void Start() { FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task => { if (task.Result == DependencyStatus.Available) { auth = FirebaseAuth.DefaultInstance; } else { Debug.LogError("Firebase依赖初始化失败"); } }); } public void SignInWithGoogle() { GoogleSignInProvider provider = new GoogleSignInProvider(); auth.SignInWithProviderAsync(provider).ContinueWith(task => { if (task.IsCompletedSuccessfully) { FirebaseUser user = task.Result; // 获取用户信息 Debug.Log($"用户邮箱:{user.Email}"); Debug.Log($"用户姓名:{user.DisplayName}"); Debug.Log($"用户头像URL:{user.PhotoUrl}"); } else { Debug.LogError("登录失败:" + task.Exception); } }); } } - 给按钮绑定
SignInWithGoogle方法就行,剩下的授权流程Firebase都帮你处理了,包括回调、令牌解析这些
注意事项
- 不管用哪种方案,Android平台都需要配置SHA-1指纹(在Google Cloud Console和Firebase控制台都要填),iOS平台要配置对应的URL Scheme
- 只请求必要的权限范围:比如
email和profile就足够获取基础账号信息,不要请求多余的权限 - 不要存储用户的敏感信息,ID令牌里的信息都是公开的,可以直接使用,但不要泄露用户的隐私数据
内容的提问来源于stack exchange,提问作者Bobby Redjeans
相关产品推荐
相关产品推荐

