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

Unity Android端SignInWithGoogleAsync报PERMISSION_DENIED错误

Unity接入Google登录报401 PERMISSION_DENIED解决方案

触发场景:获取Google ID令牌传入Unity Authentication服务时返回错误:
[Authentication]: Request failed: 401, {"title":"PERMISSION_DENIED","detail":"validation failed","details":[],"status":401}
WebRequestException: {"title":"PERMISSION_DENIED","detail":"validation failed","details":[],"status":401}

根因定位

代码里传入SignInWithGoogleAsync的参数完全错误:

// 错误:GetUserId()返回的是Google Play Games分配的用户唯一ID,不是服务要求的ID令牌
string idToken = PlayGamesPlatform.Instance.GetUserId();

Unity Authentication的Google登录接口要求传入Google签发的OpenID Connect ID Token,用户ID是普通字符串,无法通过令牌校验,直接返回401。

代码修正

将获取令牌的逻辑替换为GetIdToken()方法,修正后的登录回调代码:

async void OnGooglePlayGamesLogin(bool success)
{
    if (success)
    {
        // 正确获取Google ID Token
        string idToken = PlayGamesPlatform.Instance.GetIdToken();
        if (string.IsNullOrWhiteSpace(idToken))
        {
            Debug.LogError("ID Token获取失败,检查Play Games配置");
            return;
        }
        await SignInWithGoogleAsync(idToken);                          
    }
    else
    {
        Debug.Log("Google Play Games登录失败");
    }
}

必查配置项

代码改完如果还报错,按以下顺序核对配置,缺项都会触发校验失败:

  • Google Cloud控制台创建OAuth客户端时,必须额外创建一个Web应用类型的客户端ID,Unity Authentication和Play Games插件请求ID Token都要用这个Web客户端ID,不能直接用Android类型的客户端ID
  • Unity中Google Play Games插件配置(Window > Google Play Games > Setup > Android Setup):
    • 正确填写Google Play后台分配的应用ID
    • 导入从Google Play后台下载的官方配置资源
    • 勾选Request IdToken选项,填入前面创建的Web应用客户端ID
    • 确认配置后重新生成AndroidManifest和相关资源文件
  • Unity Dashboard后台Authentication配置页:
    • 开启Google登录方式
    • 客户端ID字段填入同一个Web应用客户端ID,保存配置
  • 签名校验:Google Cloud控制台中Android类型OAuth客户端填的SHA1指纹,必须和你打包用的keystore指纹一致,调试keystore和发布keystore要分别添加对应指纹
  • 测试环境注意:Google Play Games插件不支持Unity编辑器环境,必须打Android真机包测试,编辑器下测试会拿不到有效ID Token

额外排查点

  • 不要用Social.localUser的通用社交接口取令牌,该跨平台封装拿不到Google专属的ID Token字段,必须直接调用PlayGamesPlatform.Instance的方法
  • 改完配置后建议清除应用数据、重新初始化Unity Services再测试,避免旧缓存导致校验异常
  • 若仍报错,可以解码拿到的ID Token检查aud字段,该字段值必须和Unity后台配置的Web客户端ID完全一致,不一致就说明令牌请求时填的客户端ID错了

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 06:06:28