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

