iOS端React Native集成fbsdk-next仅申请public_profile权限问题求助
问题原因
- Facebook 权限审核限制
除public_profile、email外,user_friends、user_posts均属于 Facebook 的高级权限,需要提交应用审核通过后才能面向普通用户开放。未过审的权限只会对应用后台添加的开发者、测试人员账号生效,如果你登录用的账号不在测试名单中,这些权限会被Facebook直接过滤,不会出现在授权申请列表里,自然也不会出现在grantedPermissions或declinedPermissions中。 - iOS 端配置错误
如果Xcode项目的Info.plist中Facebook相关配置缺失或错误,会导致权限请求参数被截断,仅默认的public_profile权限会被正常提交。 Profile.getCurrentProfile()接口限制
该接口默认仅返回公开基础字段,即便你已经申请到了email等权限,接口也不会主动返回额外字段,需要单独调用Graph API拉取。
修复方案
1. 配置Facebook开发者后台
- 进入Facebook开发者后台对应应用的「应用审核」-「权限和功能」页面:
- 如果应用仅内部测试,将登录用的账号添加到「角色」-「测试人员」列表中,即可直接申请未过审的高级权限
- 如果应用要面向全量用户上线,提交对应权限的审核申请,按要求提供使用场景说明等材料
- 确认应用状态和权限状态匹配,开发模式下仅测试账号可使用未过审权限,上线模式下仅已过审权限可正常申请
2. 校验iOS端Info.plist配置
打开iOS项目下的Info.plist,确认以下配置完整且参数正确:
<key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleURLSchemes</key> <array> <string>fb{替换为你的Facebook应用ID}</string> </array> </dict> </array> <key>FacebookAppID</key> <string>{替换为你的Facebook应用ID}</string> <key>FacebookDisplayName</key> <string>{替换为你的Facebook应用名称}</string> <key>LSApplicationQueriesSchemes</key> <array> <string>fbapi</string> <string>fbauth2</string> <string>fb-messenger-share-api</string> <string>fbshareextension</string> </array>
3. 改用Graph API拉取用户完整信息
放弃Profile.getCurrentProfile()接口,登录拿到accessToken后调用Graph API主动请求需要的字段,示例代码如下:
import { AccessToken, GraphRequest, GraphRequestManager, LoginManager } from 'react-native-fbsdk-next'; // 登录逻辑 LoginManager.logInWithPermissions(['public_profile', 'user_friends', 'user_posts', 'email']).then( async (result) => { if (result.isCancelled) { alert('Login was cancelled') return } console.log("授权结果", result) const tokenData = await AccessToken.getCurrentAccessToken() if (!tokenData) return const { accessToken } = tokenData // 发起Graph API请求拉取用户信息 const userInfoRequest = new GraphRequest( '/me', { accessToken: accessToken, parameters: { fields: { string: 'id,name,email,first_name,last_name,middle_name,picture.type(large)' } } }, (error, userInfo) => { if (error) { console.error('拉取用户信息失败', error) return } console.log('完整用户信息', userInfo) // 此处可拿到email、first_name等你申请的字段 } ) new GraphRequestManager().addRequest(userInfoRequest).start() } );
4. 验证测试
使用已添加到测试列表的Facebook账号登录,确认授权弹窗展示所有你申请的权限,返回的grantedPermissions中包含所有已同意的权限即可。
内容的提问来源于stack exchange,提问作者Stas Motorny
相关产品推荐
相关产品推荐

