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

Flutter中如何通过Firebase的Google登录获取用户生日信息?

Firebase Google登录无法获取用户出生日期解决方案

原因说明

Firebase默认返回的Google用户字段仅包含基础公开信息,出生日期属于用户敏感信息,需要额外申请权限、调用独立接口才能获取。

解决步骤

  • 第一步:开启Google People API
    进入你的项目对应的Google Cloud控制台,找到「API和服务」,搜索启用「People API」即可使用。
  • 第二步:修改GoogleSignIn初始化配置,添加生日权限申请
    给GoogleSignIn构造方法传入scopes参数,追加生日读取权限:
final GoogleSignIn _googleSignIn = GoogleSignIn(
  scopes: [
    'email',
    'https://www.googleapis.com/auth/user.birthday.read', // 追加生日读取权限
  ],
);
  • 第三步:登录成功后调用Google People API获取生日
    Firebase返回的User对象本身不包含生日字段,需要用登录成功后拿到的accessToken调用People API接口获取,可在你现有代码的googleSignInAuthentication获取逻辑后追加如下代码:
// 注意提前导入http包和dart:convert
final response = await http.get(
  Uri.parse('https://people.googleapis.com/v1/people/me?personFields=birthdays'),
  headers: {'Authorization': 'Bearer ${googleSignInAuthentication.accessToken}'},
);
if (response.statusCode == 200) {
  final data = jsonDecode(response.body);
  if (data['birthdays'] != null && data['birthdays'].isNotEmpty) {
    final birthday = data['birthdays'][0]['date'];
    int year = birthday['year'];
    int month = birthday['month'];
    int day = birthday['day'];
    // 此处可将解析到的生日存入本地存储或提交到你的后端
  } else {
    // 用户未填写生日、隐私设置不允许公开或拒绝了权限申请,做兜底处理
  }
}

注意事项

  • 若用户的Google账号生日设置为仅自己可见,即便申请了权限也无法获取到数据,必须做好兼容逻辑
  • 首次调用会弹出额外的权限申请弹窗,用户拒绝授权的情况下也无法拿到生日
  • 测试阶段不需要额外审核权限,正式上线大范围使用时需按Google要求提交敏感权限审核

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 01:06:04