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

Flutter通过Facebook登录获取用户位置返回null该如何解决

Flutter Facebook登录获取用户位置为空解决方案

常见原因及修复步骤

  • 1. 权限未通过Facebook平台审核

user_location属于Facebook的高级权限,仅申请配置是无效的,需要在Facebook开发者后台提交应用资质、使用场景说明等材料进行审核,审核通过后普通用户授权时才会返回位置数据。未审核通过前,仅应用的管理员、开发者、测试用户账号可以正常拿到位置信息。

  • 2. 用户账号未公开位置信息

如果用户的Facebook个人资料中未填写位置,或者将位置信息的可见范围设置为非公开,接口会直接返回null,该场景属于用户隐私设置限制,无法通过代码修改解决。

  • 3. 授权时用户拒绝了位置权限

Facebook登录过程中用户可以单独拒绝某一项权限申请,即使你在登录参数中配置了user_location,如果用户主动拒绝,也无法拿到对应数据。需要在登录后增加权限校验逻辑,判断用户是否真的授予了位置权限。

  • 4. Graph API版本过旧

你当前使用的v2.12版本的Graph API已经停止服务,旧版本的字段返回逻辑存在异常,需要将请求URL中的版本替换为当前仍在支持周期内的稳定版本,例如v18.0。

  • 5. 代码逻辑顺序错误

你当前的代码是先调用Graph API拉取用户信息,再判断登录状态是否成功,如果登录失败token无效,接口返回的数据结构会异常,需要将拉取用户信息的逻辑移到登录成功的判断分支内。

修复后的参考代码

void _signInFacebook() async {
  FacebookLogin facebookLogin = FacebookLogin();
  // 申请权限
  final result = await facebookLogin.logIn(['email', 'public_profile', 'user_birthday', 'user_location']);
  
  if (result.status == FacebookLoginStatus.loggedIn) {
    // 先校验是否获取到了位置权限
    final grantedPermissions = await facebookLogin.permissions;
    if(!grantedPermissions.contains('user_location')){
      print('用户未授予位置权限,无法获取位置信息');
      return;
    }
    
    final token = result.accessToken.token;
    // 替换为高版本Graph API
    final graphResponse = await http.get('https://graph.facebook.com/v18.0/me?fields=name,first_name,last_name,birthday,location,email&access_token=${token}');
    final profile = json.decode(graphResponse.body);
    print(profile['location']); // 此时可正常打印位置信息
    
    var fb_ID = profile["id"];
    var accessToken = token;
    
    final credential = FacebookAuthProvider.getCredential(accessToken: token);
    _auth.signInWithCredential(credential);

    // 连接MongoDB的原有逻辑
    AuthService().facebookLogin(fb_ID, accessToken).then((val) {
      if (val.data['success']) {
        var token2 = val.data['token'];
        AuthService().getInfo(token2).then((val) async {  
            var store = val.data['user'];
          },
        );
      } else {
        print('WRONG EMAIL/ PASS');
        return;
      }
    });
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 10:36:03