1

我正在尝试使用 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>)
    } 


  }

4

0 回答 0