Firebase 3.3实时数据库坚持使用React Native 0.32进行"连接尝试"

Pie*_*scy 19 firebase react-native firebase-realtime-database react-native-android

firebase@3.3.0

react-native v0.32在带有wifi的android设备上测试

Firebase数据库没有任何身份验证规则,它是开放式读写.

给定以下文件结构:

|_ firebase.js
|_ actions.js
Run Code Online (Sandbox Code Playgroud)

这不起作用:

firebase.js

import firebase from 'firebase'

const config = {
    apiKey: "*****",
    authDomain: "****",
    databaseURL: "*****",
    storageBucket: "*****",
}

firebase.database.enableLogging(true);

export default firebase.initializeApp(config)
Run Code Online (Sandbox Code Playgroud)

actions.js

import firebase from './firebase'

export const fetchData = () => {
    const Data = firebase.database().ref('some/data')
    Data.on('value', (snapshot) => {
        console.log("snapshot", snapshot.val())  // never printed
    }, (error) => {
        console.error(error)
    })
}
Run Code Online (Sandbox Code Playgroud)

调试输出

p:0: Browser went online.  
firebase-database.js:36 p:0: Listen called for /some/data default  
firebase-database.js:36 p:0: Making a connection attempt
Run Code Online (Sandbox Code Playgroud)

没有其他的...


这确实有效(但它不是解决方案):

firebase.js

...same content as above...

export default () => firebase.initializeApp(config)  // we export a function instead to trigger the initialization when the app is ready
Run Code Online (Sandbox Code Playgroud)

actions.js

...same content as above...
const Data = firebase().database().ref('some/data') // we "manually" trigger the initialization, it's obviously not a good solution since we can't initialize the app multiple times
Run Code Online (Sandbox Code Playgroud)

产量

p:0: Browser went online.  
firebase-database.js:36 p:0: Listen called for /some/data default  
firebase-database.js:36 p:0: Making a connection attempt  
firebase-database.js:36 p:0: Auth token refreshed  
firebase-database.js:36 getToken() completed. Creating connection. 
firebase-database.js:36 c:0:0: Connection created  
Run Code Online (Sandbox Code Playgroud)

我在这做错了什么?我也注意到,一旦我import firebase from 'firebase',firebase变量在所有不是firebase来自import语句的var 的文件中全局可用(我可以写import FooBar from 'firebase',我firebase仍然导入了全局变量)

Pie*_*scy 2

因为似乎没有人有“官方”答案。这是我提供某种延迟初始化的解决方法:

\n\n

firebase.js

\n\n
import Firebase from \'firebase\'\n\nlet _database = null\n\nconst initFirebase = () => {\n    var config = {\n        apiKey: "*************",\n        authDomain: "************",\n        databaseURL: "**********",\n        storageBucket: "************",\n    }\n\n    Firebase.database.enableLogging(true)\n    Firebase.initializeApp(config)\n}\n\nexport const getDatabase = () => {\n    if (!_database) {\n        initFirebase()\n        _database = Firebase.database()\n    }\n    return _database\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后,在任何您需要的地方database

\n\n
import { getDatabase }\xc2\xa0from \'./firebase\'\n\nconst methodThatNeedDatabase = () => {\n    getDatabase().ref(\'/some/ref\')\n    ...\n}\n
Run Code Online (Sandbox Code Playgroud)\n