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

Firebase Google登录后无法获取手机号、生日及性别问题排查

解决Firebase Google登录无法获取手机号、生日和性别问题

核心原因

Firebase Auth的User对象和AdditionalUserInfo默认仅返回基础用户信息(如姓名、邮箱、头像),生日、性别、手机号属于敏感数据,需要通过Google People API单独获取——即使你已经请求了对应的权限范围,Firebase也不会自动同步这些字段到用户对象中。

解决步骤

1. 启用Google People API

登录Google Cloud控制台,找到你的项目,搜索并启用「People API」。

2. 修改代码,调用People API获取敏感数据

你已经拿到了Google登录返回的accessToken,可以用它请求People API获取所需字段。示例代码如下:

import 'package:http/http.dart' as http;
import 'dart:convert';

// ... 原有登录代码 ...
final gAuth = await gUser!.authentication;
final accessToken = gAuth.accessToken;

// 调用People API获取生日、性别、手机号
final response = await http.get(
  Uri.parse('https://people.googleapis.com/v1/people/me?personFields=birthdays,genders,phoneNumbers'),
  headers: {'Authorization': 'Bearer $accessToken'},
);

if (response.statusCode == 200) {
  final userData = json.decode(response.body);
  print('生日: ${userData['birthdays']?[0]?['date']}');
  print('性别: ${userData['genders']?[0]?['value']}');
  print('手机号: ${userData['phoneNumbers']?[0]?['value']}');
} else {
  print('获取敏感数据失败: ${response.body}');
}
// ... 原有Firebase登录代码 ...

在Google Cloud控制台的「OAuth consent screen」中,确认已添加以下敏感权限范围:

  • https://www.googleapis.com/auth/user.birthday.read
  • https://www.googleapis.com/auth/user.gender.read
  • https://www.googleapis.com/auth/user.phonenumbers.read

注意:生产环境下这些敏感范围需要经过Google审核,测试阶段可添加测试用户绕过审核。

4. 额外检查

  • 确保用户的Google账号中已填写对应的生日、性别、手机号信息,否则API会返回空数组
  • 处理返回数据时注意字段结构:birthdays、genders、phoneNumbers均为数组类型,需提取第一个元素获取有效数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 19:03:24