我正在尝试使用 React Native + Gifted Chat + expo + firebase realtime DB 为我的应用程序构建聊天功能。我可以将模块构建到这部分。我正在使用 Firebase 身份验证,并且想知道如何将这些聊天与发送和接收它们的用户的凭据相关联 - 这样当他们重新登录时 - 他们可以看到他们过去的聊天并知道是谁发送的。到目前为止,这只是一种单向聊天,我刚刚硬编码了一条消息和一个用户电子邮件 ID - 但我希望它喜欢:
用户 1 登录 - 向用户 2 发送“嗨”
用户 2 登录并查看用户 1 的所有过去消息和新的“嗨”部分。
我已经添加了代码的 previousState 部分来附加旧消息 - 但它没有发生,因为我直到现在还没有将当前用户与聊天相关联。
关于如何做的任何想法?帮助将不胜感激!
我正在使用 Firebase 身份验证进行身份验证:
Login = (email, password) => {
try {
firebase
.auth()
.signInWithEmailAndPassword(email, password)
.then(res => {
console.log(res.user.email);
this.props.navigation.navigate('MainMenu');
})
} catch (error) {
console.log(error.toString(error));
}
};
我当前聊天的代码如下:
let saveMessage = message => {
db.ref('/messages').push({
messageText: message
});
};
class ChatPage extends React.Component {
state = {[![right now its just one-way chat - and no saving od ][1]][1]
messages: []
};
componentDidMount() {
this.setState({
messages: [
{
_id: 1,
text: "Hi there, how are you doing ?",
createdAt: new Date(),
user: {
_id: 2,
name: "user1@gmail.com",
avatar: "https://placeimg.com/640/480/nature"
}
}
]
});
}
onSend(messages = []) {
this.setState(previousState => ({
messages: GiftedChat.append(previousState.messages, messages),
}))
db.ref('/messages').push({ messages });
}
render() {
return (<KeyboardAvoidingView
style={{ flex: 1 }}
behavior="padding"
keyboardVerticalOffset={Platform.select({
ios: () => 0,
android: () => 100
})()}
><GiftedChat
messages={this.state.messages}
onSend={messages => this.onSend(messages)}
// user={{
// _id: 1,
// }}
user={this.state.email}
renderUsernameOnMessage={true}
/></KeyboardAvoidingView>)
}
}