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登录代码 ...
3. 验证OAuth consent screen配置
在Google Cloud控制台的「OAuth consent screen」中,确认已添加以下敏感权限范围:
https://www.googleapis.com/auth/user.birthday.readhttps://www.googleapis.com/auth/user.gender.readhttps://www.googleapis.com/auth/user.phonenumbers.read
注意:生产环境下这些敏感范围需要经过Google审核,测试阶段可添加测试用户绕过审核。
4. 额外检查
- 确保用户的Google账号中已填写对应的生日、性别、手机号信息,否则API会返回空数组
- 处理返回数据时注意字段结构:
birthdays、genders、phoneNumbers均为数组类型,需提取第一个元素获取有效数据
内容的提问来源于stack exchange,提问作者mohammad kazemienjad
相关产品推荐
相关产品推荐

