我一直在努力让 facebook 登录按钮工作一段时间。我试图四处搜索并尝试了其他人的几种解决方案,但仍然无法解决。
问题是 Facebook 登录按钮显示为空的红色边框框。
我遵循了 facebook 网站上的所有说明以及 react-native-fbsdk github 文档,但仍然没有运气。
以下rnpm 链接的输出
rnpm-link info iOS module apphub is already linked
rnpm-link info Android module react-native-facebook-login is already linked
rnpm-link info iOS module react-native-facebook-login is already linked
rnpm-link info Android module react-native-fbsdk is already linked
rnpm-link info iOS module react-native-fbsdk is already linked
react-native-fbsdk 已经链接
react-native log-ios 的输出
Apr 15 21:27:16 MacBook-Pro-3 App[28314] <Warning>: Warning: Native component for "RCTFBLikeView" does not exist
Apr 15 21:27:16 MacBook-Pro-3 App[28314] <Warning>: Warning: Native component for "RCTFBLoginButton" does not exist
Apr 15 21:27:16 MacBook-Pro-3 App[28314] <Warning>: Warning: Native component for "RCTFBSendButton" does not exist
Apr 15 21:27:16 MacBook-Pro-3 App[28314] <Warning>: Warning: Native component for "RCTFBShareButton" does not exist
FacebookLoginButton 组件
import React, { PropsType, Component } from 'react';
import {
View
} from 'react-native';
const FBSDK = require('react-native-fbsdk');
const {
LoginButton,
AccessToken
} = FBSDK;
class FacebookLoginButton extends Component {
render() {
return (
<View>
<LoginButton
publishPermissions={["publish_actions"]}
onLoginFinished={
(error, result) => {
if (error) {
alert("login has error: " + result.error);
} else if (result.isCancelled) {
alert("login is cancelled.");
} else {
AccessToken.getCurrentAccessToken().then(
(data) => {
alert(data.accessToken.toString())
}
)
}
}
}
onLogoutFinished={() => alert("logout.")}/>
</View>
);
}
};
export { FacebookLoginButton };
登录组件
import React, { Component } from 'react';
import { connect } from 'react-redux';
import { View, TextInput, KeyboardAvoidingView } from 'react-native';
import firebase from 'firebase';
import { emailChanged, passwordChanged, loginUser } from '../../actions';
import { Button, CardSection, Input, Spinner, FacebookLoginButton } from '../common';
class Login extends Component {
onEmailChange(text) {
this.props.emailChanged(text);
}
onPasswordChange(text) {
this.props.passwordChanged(text);
}
onLoginButtonPress() {
const { email, password } = this.props;
console.log('logging in');
this.props.loginUser({ email, password });
}
onFacebookLoginButtonPress() {
console.log('logging in with facebook');
var provider = new firebase.auth.FacebookAuthProvider();
provider.addScope('user_birthday');
firebase.auth().signInWithPopup(provider).then(function(result) {
// This gives you a Facebook Access Token.
var token = result.credential.accessToken;
// The signed-in user info.
var user = result.user;
});
}
renderButton() {
console.log(this.props);
switch (this.props.loading) {
case true:
return (<Spinner size="large" />)
break;
default:
return (
<View>
<Button
onPress={this.onLoginButtonPress.bind(this)}
buttonStyleOverride={[styles.buttonStyle]}
textStyleOverride={[styles.loginButtonText]}
>เข้าสู่ระบบ</Button>
<Button
onPress={this.onFacebookLoginButtonPress.bind(this)}
buttonStyleOverride={[styles.buttonStyle, styles.facebookButton]}
textStyleOverride={[styles.facebookButtonText]}
>Login with Facebook</Button>
<FacebookLoginButton />
</View>
);
}
}
render() {
return (
<KeyboardAvoidingView behavior="padding" style={styles.container}>
<View style={styles.formContainer}>
<TextInput
placeholder="Email Address"
autoCorrect={false}
style={styles.inputStyle}
onChangeText={this.onEmailChange.bind(this)}
value={this.props.email}
/>
<TextInput
placeholder="Password"
autoCorrect={false}
style={styles.inputStyle}
onChangeText={this.onPasswordChange.bind(this)}
value={this.props.password}
/>
</View>
<View style={styles.buttonContainer}>
{this.renderButton()}
</View>
</KeyboardAvoidingView>
);
}
}
const mapStateToProps = ({ auth }) => {
const { email, password, error, loading } = auth;
return { email, password, error, loading };
};
const styles = {
container: {
marginTop: -65,
flexDirection: 'column',
flex: 1,
backgroundColor: '#f8f8f8'
},
formContainer: {
flexDirection: 'column',
justifyContent: 'flex-end',
alignItems: 'center',
flex: 2,
paddingLeft: 60,
paddingRight: 60,
paddingBottom: 60,
},
inputStyle: {
color: '#646464',
paddingRight: 15,
paddingLeft: 15,
fontSize: 16,
lineHeight: 23,
backgroundColor: '#fff',
height: 50,
borderBottomWidth: 1,
borderBottomColor: '#eee',
marginBottom: 15,
},
buttonContainer: {
justifyContent: 'flex-start',
flexDirection: 'column',
borderColor: '#ddd',
position: 'relative',
marginBottom: 10,
paddingLeft: 60,
paddingRight: 60,
flex: 1,
},
buttonStyle: {
position: 'relative',
borderRadius: 999,
marginBottom: 15,
borderColor: '#F4B9BF',
backgroundColor: '#F4B9BF',
flex: 0,
},
loginButtonText: {
fontFamily: 'Prompt',
fontWeight: '400',
color: '#FFF',
lineHeight: 24,
},
facebookButton: {
backgroundColor: '#007aff'
},
facebookButtonText: {
color: '#fff',
lineHeight: 24,
}
};
export default connect(mapStateToProps, {
emailChanged,
passwordChanged,
loginUser
})(Login);