我正在使用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 });
}
});
}
提前致谢
答案 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 ,它会毫无问题地开始工作。