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

