You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Android端Google登录无法获取用户年龄范围问题咨询

为什么获取不到Google登录用户的年龄范围?

Hey,我来帮你梳理下可能导致年龄范围数据缺失的几个关键原因,都是Google登录中常见的坑:

1. 未请求对应权限Scope

这是最常见的问题!Google OAuth2不会自动返回敏感或额外的用户数据,必须显式请求对应的权限范围。如果你的Android端登录代码里只请求了email或基础的openid,那肯定拿不到年龄范围。

要解决这个,你需要在GoogleSignInOptions里添加年龄范围相关的Scope:

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
        .requestEmail()
        // 添加上读取年龄范围的权限Scope
        .requestScopes(new Scope("https://www.googleapis.com/auth/user.age_range.read"))
        // 或者请求更宽泛的profile权限(包含年龄范围等基础信息)
        // .requestScopes(new Scope("https://www.googleapis.com/auth/userinfo.profile"))
        .build();

添加后,用户在登录时会看到对应的权限授权提示,只有用户同意后,Google才会返回年龄数据。

2. 用户隐私设置限制

就算你请求了权限,也可能因为用户的Google账户隐私设置导致数据无法返回:

  • 用户可能在Google账户的「隐私设置」中关闭了“向第三方应用共享年龄范围”的权限;
  • 部分地区的用户因为隐私法规限制,默认不会共享这类数据。

可以用一个测试Google账号(自己的账号,开启了权限共享)来验证,排除这个可能性。

3. 服务器端API调用的问题

如果Android端已经正确请求了权限,但服务器端还是拿不到数据,要检查服务器的API调用:

  • 端点选择:确保调用的是正确的API端点,比如https://www.googleapis.com/oauth2/v3/userinfo(返回基础用户信息)或者Google People API的https://people.googleapis.com/v1/people/me(返回更详细的用户数据);
  • 字段指定:如果用People API,必须在请求参数里明确指定personFields=ageRange(比如GET https://people.googleapis.com/v1/people/me?personFields=ageRange,displayName),默认情况下API不会返回所有字段,只返回基础信息。

4. Google Cloud Console配置问题

最后检查你的项目配置:

  • 确保在Google Cloud Console中启用了People API(如果用People API获取数据的话);
  • 在OAuth同意屏幕中,已经添加了对应的权限范围(比如user.age_range.read),并且如果是正式发布的应用,已经通过了Google的审核;
  • 测试阶段要确保测试用户已经添加到项目的测试用户列表中,否则部分权限可能无法生效。

你可以对照这几点检查你的代码和配置,大概率能找到问题所在!

内容的提问来源于stack exchange,提问作者Miguel Mesquita Alfaiate

火山引擎 最新活动