GIS SignInCredential无email字段,与官方文档说明不符如何解决?
问题归类结论
- 该问题绝大多数属于个人操作错误,极小概率为特定历史版本SDK的兼容问题,官方文档描述不存在错误。
出现该问题的核心原因是构建登录请求时未显式申请邮箱权限,Google身份服务默认不会返回用户隐私类字段,和文档描述的「申请对应权限后会返回对应字段」的逻辑一致。
无需调用People API获取用户email的方法
按以下步骤配置即可直接从SignInCredential对象中拿到邮箱:
- 构建登录请求时显式声明需要邮箱权限,示例代码如下:
// Java 示例 GetSignInIntentRequest signInRequest = GetSignInIntentRequest.builder() .setServerClientId("你的Google Cloud后台申请的Android客户端ID") .requestEmail() // 必须添加该行,显式要求返回用户邮箱 .build();
// Kotlin 示例 val signInRequest = GetSignInIntentRequest.builder() .setServerClientId("你的Google Cloud后台申请的Android客户端ID") .requestEmail() .build()
- 登录成功后直接从返回的
SignInCredential对象读取即可:
注意你截图中没有展示的id字段就是用户的邮箱地址,不存在独立的email字段,读取代码如下:
val credential = Identity.getSignInClient(this).getSignInCredentialFromIntent(intent) val userEmail = credential.id

如果按上述配置后仍无法获取邮箱,可先升级Google Identity Services SDK到最新稳定版再重试,排除历史版本SDK的bug影响。
内容的提问来源于stack exchange,提问作者Ondrej Karmazin
相关产品推荐
相关产品推荐

