![](/img/trans.png)
[英]React Native - Android doesn't send Authorization header in request
[英]React native Cannot pass a read permission (email) to a request for publish authorization
我正在 React Native 應用程序中實現 fb sdk。 我已經完成了鏈接中的所有更改,並在 android 設備中運行。 應用程序在 Facebook 登錄按鈕點擊時崩潰,這些是日志。
05-23 10:42:20.559 7063-7063/com.fbsample E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.fbsample, PID: 7063
Cannot pass a read permission (email) to a request for publish authorization
at com.facebook.login.LoginManager.validatePublishPermissions(LoginManager.java:444)
at com.facebook.login.LoginManager.logInWithPublishPermissions(LoginManager.java:416)
at com.facebook.login.widget.LoginButton$LoginClickListener.performLogin(LoginButton.java:753)
at com.facebook.login.widget.LoginButton$LoginClickListener.onClick(LoginButton.java:725)
at com.facebook.FacebookButtonBase$1.onClick(FacebookButtonBase.java:384)
at android.view.View.performClick(View.java:4785)
at android.view.View$PerformClick.run(View.java:19884)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5343)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)
我搜索了很多,但沒有一個能幫助我擺脫這個問題。
至少錯誤應該包含一個建議。
我被困了幾個小時:/
facebook doc 沒有什么新鮮事。
我有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={["email"]}
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;
和App.js
import React, { Component } from 'react';
import {
Platform,
StyleSheet,
Text,
View
} from 'react-native';
var FBLoginButton = require('./FBLoginButton');
const instructions = Platform.select({
ios: 'Press Cmd+R to reload,\n' +
'Cmd+D or shake for dev menu',
android: 'Double tap R on your keyboard to reload,\n' +
'Shake or press menu button for dev menu',
});
type Props = {};
export default class App extends Component<Props> {
render() {
return (
<View style={styles.container}>
<Text style={styles.label}>Welcome to the Facebook SDK for React Native!</Text>
<FBLoginButton />
</View>
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#F5FCFF',
},
welcome: {
fontSize: 20,
textAlign: 'center',
margin: 10,
},
instructions: {
textAlign: 'center',
color: '#333333',
marginBottom: 5,
},
});
有人告訴為什么這個問題仍然存在,我可以做些什么來解決它。
您必須將publishPermissions={["email"]}
更改為readPermissions={["email"]}
我將publishPermissions={["email"]}
更改為publishPermissions={["publish_actions"]}
,一切正常。
如果您打算獲取用戶的電子郵件。 您必須使用readPermissions={['email']}
上LoginButton
從react-native-fbsdk
。 請注意,如果您已經像在您的問題中一樣使用publishPermissions={["email"]}
構建了本機應用程序,請刪除該應用程序,然后重新構建。
此外,您只能使用readPermissions
或publishPermissions
,而不能同時使用兩者。 這是按照此處記錄的設計: https : //developers.facebook.com/docs/reference/android/current/class/LoginButton/#setReadPermissions
如果您想在同一個應用程序上使用readPermissions
和publishPermissions
,您必須再次調用登錄對話框。 react-native-fbsdk
提供了LoginManager
。
LoginManager 類用於請求會話的額外權限或使用自定義 UI 提供登錄功能。 與 LoginButton 一樣,LoginManager 類是從 react-native-fbsdk 模塊加載的。 下面的示例以最少的權限執行登錄。 https://developers.facebook.com/docs/react-native/login
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.