我已经按照文档进行了必要的设置,但是应用程序在启动时崩溃了。我无法弄清楚为什么会发生这种情况。任何使用 rnfirebase 的人?面临这个问题?
import React, { Component } from 'react';
import { View, Button, Text, TextInput, Image } from 'react-native';
import firebase from 'react-native-firebase';
const successImageUri = 'https://cdn.pixabay.com/photo/2015/06/09/16/12/icon-803718_1280.png';
export default class App extends Component {
constructor(props) {
super(props);
this.unsubscribe = null;
this.state = {
user: null,
message: '',
codeInput: '',
phoneNumber: '+44',
confirmResult: null
};
firebase.initializeApp({
apiKey: 'AIzaSyAvKPtsqqqGjkGLkXD8BeqOR6GwJaI2AcE',
appId: '1:170852024080:ios:9bb19d2f74715186',
messagingSenderId: '170852024080',
projectId: 'chatapp-7c693',
authDomain: 'chatapp-7c693.firebaseapp.com',
databaseURL: 'https://chatapp-7c693.firebaseio.com',
storageBucket: 'chatapp-7c693.appspot.com'
});
}
componentDidMount() {
this.unsubscribe = firebase.auth().onAuthStateChanged(user => {
if (user) {
this.setState({ user: user.toJSON() });
} else {
// User has been signed out, reset the state
this.setState({
user: null,
message: '',
codeInput: '',
phoneNumber: '+44',
confirmResult: null
});
}
});
}
//This is the example from the docs, so it must work
componentWillUnmount() {
if (this.unsubscribe) this.unsubscribe();
}
signIn = () => {
const { phoneNumber } = this.state;
this.setState({ message: 'Sending code ...' });
firebase
.auth()
.signInWithPhoneNumber(phoneNumber)
.then(confirmResult => this.setState({ confirmResult, message: 'Code has been sent!' }))
.catch(error =>
this.setState({ message: `Sign In With Phone Number Error: ${error.message}` })
);
};
confirmCode = () => {
const { codeInput, confirmResult } = this.state;
if (confirmResult && codeInput.length) {
confirmResult
.confirm(codeInput)
.then(user => {
this.setState({ message: 'Code Confirmed!' });
})
.catch(error => this.setState({ message: `Code Confirm Error: ${error.message}` }));
}
};
signOut = () => {
firebase.auth().signOut();
};
renderPhoneNumberInput() {
const { phoneNumber } = this.state;
return (
<View style={{ padding: 25 }}>
<Text>Enter phone number:</Text>
<TextInput
autoFocus
style={{ height: 40, marginTop: 15, marginBottom: 15 }}
onChangeText={value => this.setState({ phoneNumber: value })}
placeholder={'Phone number ... '}
value={phoneNumber}
/>
<Button title="Sign In" color="green" onPress={this.signIn} />
</View>
);
}
renderMessage() {
const { message } = this.state;
if (message.length) return null;
return <Text style={{ padding: 5, backgroundColor: '#000', color: '#fff' }}>{message}</Text>;
}
renderVerificationCodeInput() {
const { codeInput } = this.state;
return (
<View style={{ marginTop: 25, padding: 25 }}>
<Text>Enter verification code below:</Text>
<TextInput
autoFocus
style={{ height: 40, marginTop: 15, marginBottom: 15 }}
onChangeText={value => this.setState({ codeInput: value })}
placeholder={'Code ... '}
value={codeInput}
/>
<Button title="Confirm Code" color="#841584" onPress={this.confirmCode} />
</View>
);
}
render() {
const { user, confirmResult } = this.state;
return (
<View style={{ flex: 1 }}>
{!user && !confirmResult && this.renderPhoneNumberInput()}
{this.renderMessage()}
{!user && confirmResult && this.renderVerificationCodeInput()}
{user && (
<View
style={{
padding: 15,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#77dd77',
flex: 1
}}
>
<Image
source={{ uri: successImageUri }}
style={{ width: 100, height: 100, marginBottom: 25 }}
/>
<Text style={{ fontSize: 25 }}>Signed In!</Text>
<Text>{JSON.stringify(user)}</Text>
<Button title="Sign Out" color="red" onPress={this.signOut} />
</View>
)}
</View>
);
}
}
有人可以帮忙吗?我再次检查了文档..但没有帮助?idk我应该添加更多详细信息..这是我关于堆栈溢出的第一个问题..不知道问一个问题很烦人...我尝试了 web firebase sdk并且可以使用匿名登录..但我需要电话身份验证,我无法完成,因为它对 ios 和 android 有不同的设置......rnfirebase 假设与 web sdk 相同