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
相关产品推荐
相关产品推荐

