React Native集成Facebook SDK登录崩溃:权限传递错误排查
React Native Facebook登录崩溃问题解决办法
嘿,我看到你在React Native集成Facebook SDK时遇到了登录崩溃的问题,咱们来一步步搞定它!
首先看你提供的崩溃日志,关键错误信息已经说得很清楚了:
Cannot pass a read permission (email) to a request for publish authorization
简单来说,Facebook的权限分为读取权限和发布权限两类,这俩不能混在一起用——你把属于读取权限的email放到了发布权限的参数里,这就直接导致了崩溃。
问题根源
看你的FBLoginButton.js代码,你给LoginButton组件传了publishPermissions={["email"]},但email是用来获取用户邮箱信息的读取权限,根本不属于发布权限范畴,Facebook的SDK直接就抛出了错误。
解决办法
把publishPermissions替换成readPermissions就可以了,因为你要请求的email是读取权限。如果后续需要发布权限,得在用户登录成功后单独发起请求,不能和读取权限混在一起。
修改后的FBLoginButton.js代码如下:
import React, { Component } from 'react'; import { View } from 'react-native'; import { LoginButton } from 'react-native-fbsdk'; export default class FBLoginButton extends Component { render() { return ( <View> <LoginButton // 把publishPermissions换成readPermissions,还可以加上常用的public_profile readPermissions={["email", "public_profile"]} onLoginFinished={ (error, result) => { if (error) { alert("Login failed with error: " + error.message); } else if (result.isCancelled) { alert("Login was cancelled"); } else { alert("Login was successful with permissions: " + result.grantedPermissions) } } } onLogoutFinished={() => alert("User logged out")} /> </View> ); } }; module.exports = FBLoginButton;
额外说明
- 读取权限:比如
email、public_profile,用于获取用户的基础信息,可以在登录时一次性请求,审核门槛低。 - 发布权限:比如
publish_actions,用于发布内容到用户的Facebook账号,需要在用户登录后单独请求,而且大多需要通过Facebook的应用审核才能正式使用。
内容的提问来源于stack exchange,提问作者Khemraj Sharma
相关产品推荐
相关产品推荐

