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

Firebase Google登录获姓名头像但邮箱为null问题排查

解决新版Identity Platform Credentials API Google登录邮箱为null的问题

核心原因

从你的调试日志能看到,Google返回的ID Token payload里完全没有email字段——这说明Google OAuth服务没向你的应用返回邮箱数据,因此Firebase Auth自然拿不到邮箱值。

解决步骤

1. 确保Credential请求包含正确的权限范围

新版Credentials API不会默认请求邮箱权限,必须在构建GetCredentialRequest时显式添加openid和email scope(openid是email权限生效的前提,属于OpenID Connect规范要求)。

检查你的authManager.getGoogleCredential()方法,确保请求代码类似如下:

private suspend fun getGoogleCredential(): GetCredentialResponse {
    val request = GetCredentialRequest.Builder()
        .addCredentialType(GoogleIdTokenCredential.TYPE_GOOGLE_ID_TOKEN_CREDENTIAL)
        // 必须包含openid、email、profile三个scope
        .setScopes(listOf("openid", "email", "profile"))
        .build()
    return Credentials.getClient(context).getCredential(request)
}

2. 验证GCP OAuth同意屏幕的权限配置

  • 登录GCP控制台,进入「API和服务」->「OAuth同意屏幕」,确认已授权的范围中包含:
    • https://www.googleapis.com/auth/userinfo.email(或简写email)
    • https://www.googleapis.com/auth/userinfo.profile(或简写profile)
    • openid
  • 如果是测试版同意屏幕,必须将你用来测试的Google账号添加到「测试用户」列表中,否则Google不会返回敏感的用户数据(比如邮箱)。
  • 重新登录时,确认弹出的授权弹窗里有「查看您的电子邮件地址」的权限提示——如果没有,说明权限配置没生效。

3. 清除现有授权并重新测试

在手机设置中操作:

  • 进入Google账号设置 → 安全 → 第三方应用的访问权限
  • 找到你的应用,移除其授权记录
  • 重启app并重新登录,此时会重新触发权限授权弹窗,确认勾选邮箱权限后完成登录

4. 再次验证ID Token内容

登录成功后,重新解码ID Token,确认payload中出现email和email_verified字段。如果此时字段存在,Firebase Auth的firebaseUser.email就会正常填充。

额外排查点

  • 确认google-services.json中的client_id与GCP控制台中Android客户端ID完全一致
  • 检查Firebase Auth控制台的Google登录提供商是否处于启用状态
  • 确保没有在Firebase Auth设置中限制用户邮箱的获取(比如禁用了某些字段)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 07:04:59