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

Flutter中使用flutter_facebook_auth实现Facebook登录后邮箱返回null问题

问题原因

  • 调用登录方法时未主动申请email权限:Facebook登录默认仅请求基础公开资料权限,邮箱属于需要单独申请的敏感权限,没有授权的情况下平台不会返回对应字段
  • 拉取用户数据时未指定返回email字段:getUserData方法默认返回的字段集合不含邮箱,需要手动声明需要返回的字段列表
  • 账号本身问题:测试的Facebook账号未绑定公开可用的邮箱,或用户在授权弹窗中主动拒绝了邮箱权限的申请,也会导致返回值为null

修复后的代码

Future<UserCredential> signInWithFacebook() async {
  // 登录时主动申请邮箱权限
  final LoginResult loginResult = await FacebookAuth.instance.login(
    permissions: ['public_profile', 'email'],
  );

  // 先校验登录状态,避免空指针异常
  if (loginResult.status != LoginStatus.success) {
    throw Exception('Facebook登录失败');
  }

  final OAuthCredential facebookAuthCredential =
      FacebookAuthProvider.credential(loginResult.accessToken!.token);
  // 拉取数据时指定要返回邮箱字段
  final userData = await FacebookAuth.instance.getUserData(
    fields: "name,email,picture.width(200)",
  );
  print(userData);
  return FirebaseAuth.instance.signInWithCredential(facebookAuthCredential);
}

额外注意事项

  • 如果用户授权时拒绝了邮箱权限,需要单独做降级处理,比如引导用户手动填写邮箱
  • 如果你的Facebook应用仍处于开发模式,需要先在开发者后台将测试账号添加为应用的测试用户,否则权限申请不会生效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 11:27:02