Firestore在Android中表现不正常(React-Native)

时间:2018-01-02 19:55:42

标签: android react-native google-cloud-firestore

我正在使用React-native开发我的第一个应用程序,我正在使用firebase。它使用电子邮件和密码进行用户身份验证。在使用firebase之前,从代码加载原始数据,它在Android和iOS上运行良好。

当我使用它集成firebase时,我无法在Android上正确运行auth,例如,连接到firebase注册表的按钮,让用户注册而不会抛出异常。但是,在重新加载应用程序以继续应用程序的“MainView”后,它不会退出“SplashScreen”,因为它无法从firebase检索信息。我意识到寄存器没有在我的firestore集合中创建相应的用户文档,而在iOS中,使用相同的代码,它确实!

以下是我遇到问题的代码:

class Enter extends React.Component {

  (...) 

  signUp = () => {
    const { email, pass } = this.state;
    firebase.auth().createUserWithEmailAndPassword(email, pass).then(firebaseUser => {
      base.collection('users').doc(firebaseUser.uid).set({ email })
        .catch(error => {
          this.setState({error: error.message})
          console.log('doc requiring error: ' + error.message)
        });
    }).catch(error => {
      this.setState({error: error.message})
      console.log('account creation error: ' + error.message)
    } );
  }

  render() {
    [A button calls signUp onPress]
  }
}

我在signUp函数中遗漏了什么吗?

以防万一,这是我试图从App.js检索文档的方式。它被困在SplashScreen上,因为userReady永远不会变为true,因为未在注册表中创建users / {uid}文档。

componentWillMount = async () => {
    firebase.auth().onAuthStateChanged(firebaseUser => {
      if (firebaseUser) {
        base.collection('users').doc(firebaseUser.uid)
          .onSnapshot(DocumentSnapshot => {
            this.setState({ userDocumentSnapshot: DocumentSnapshot, userReady: true })
          });
      } else {
        this.setState({ userDocumentSnapshot: null, userReady: true });
      }
    });
  }

提前致谢

2 个答案:

答案 0 :(得分:3)

是的,firestore目前无法使用react-native。没有任何反应 - 没有记录错误或抛出异常但数据库未更新。看到这个问题:

火力/火力-JS-SDK
FR:针对Android设备的Firestore Web SDK React-Native / Expo支持·问题#283
https://github.com/firebase/firebase-js-sdk/issues/283

查看mikelehen于2017年11月20日提出的建议。只是一个临时解决方案,但似乎有效。他说要复制

  

https://gist.githubusercontent.com/mikelehen/444950a35019208f3aaf18d37ab4937c/raw/85ac4cb3108d92163cb8f04fbdddcc88d4081aab/index.js
  超过你的   node_modules/@firebase/webchannel-wrapper/dist/index.js

答案 1 :(得分:1)

这是汤姆答案的补充。

现在你不必为firebase-js-sdk问题做一些建议。

请将 firebase javascript sdk 版本更新为 4.12.1 ,它会毫无问题地开始工作。