使用react-native-fbsdk-next时无法获取Email字段的问题求助
Expo + React Native + Firebase Facebook登录:无法获取Email及权限不弹窗问题解决
检查Facebook应用后台配置
- 未上线的测试应用必须添加测试用户,且测试用户的Facebook账号需绑定已验证的邮箱;正式应用的
email权限需通过Facebook应用审核。 - 在登录产品设置中,确认OAuth跳转URI包含Expo项目的回调地址,格式为
https://auth.expo.io/@你的Expo用户名/项目slug。
- 未上线的测试应用必须添加测试用户,且测试用户的Facebook账号需绑定已验证的邮箱;正式应用的
替换权限请求方式(适配Expo环境)
Expo托管环境下原生LoginManager可能存在权限请求不生效的问题,改用Expo官方的expo-facebook模块:import * as Facebook from 'expo-facebook'; import firebase from '@react-native-firebase/app'; import '@react-native-firebase/auth'; const facebookLogin = async () => { // 初始化Facebook SDK await Facebook.initializeAsync({ appId: '你的Facebook应用ID' }); // 请求权限 const { type, token } = await Facebook.logInWithReadPermissionsAsync({ permissions: ['public_profile', 'email'], }); if (type === 'success') { // 主动调用Facebook Graph API获取邮箱 const graphResponse = await fetch( `https://graph.facebook.com/me?access_token=${token}&fields=id,name,email` ); const userData = await graphResponse.json(); // 生成Firebase凭证并登录 const credential = firebase.auth.FacebookAuthProvider.credential(token); await firebase.auth().signInWithCredential(credential); // 同步邮箱到Firebase Auth if (userData.email) { await firebase.auth().currentUser.updateEmail(userData.email); } } };核对Firebase与Facebook的关联配置
- 在Firebase控制台「身份验证 > 登录方式 > Facebook」中,确认App ID、App Secret填写正确,且已启用Facebook登录。
- Facebook开发者后台「设置 > 基本」中的应用密钥,需和Firebase中填写的完全一致,同时网站域名要包含
auth.expo.io。
重置用户授权状态
如果用户之前已授权过应用但未授予email权限,需让用户在Facebook的「设置 > 应用和网站」中移除你的应用,重新发起授权请求。完善Expo项目配置
在app.json的expo字段中添加Facebook相关配置:{ "expo": { "facebookScheme": "fb你的Facebook应用ID", "facebookAppId": "你的Facebook应用ID", "facebookDisplayName": "你的应用名称" } }
内容的提问来源于stack exchange,提问作者Undertaker
相关产品推荐
相关产品推荐

