programing

Firebase 3.3 실시간 데이터베이스가 Resact Native 0.32로 "연결 시도 중"에 고착됨

prostudy 2022. 3. 7. 22:13
반응형

Firebase 3.3 실시간 데이터베이스가 Resact Native 0.32로 "연결 시도 중"에 고착됨

방화기지@3.3.0

wifi를 사용하여 Android 장치에서 테스트한 v0.32를 리액터링함

Firebase 데이터베이스는 인증 규칙이 없고, 읽기 및 쓰기 권한이 있다.

다음 파일 구조로 지정됨:

|_ firebase.js
|_ actions.js

작동하지 않음:

방화 기지js

import firebase from 'firebase'

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

firebase.database.enableLogging(true);

export default firebase.initializeApp(config)

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)
    })
}

디버그 출력

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

다른 건...


이것은 효과가 있지만 해결책은 아니다:

방화 기지js

...same content as above...

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

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

생산량

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  

내가 여기서 뭘 잘못하고 있지? 나도 한번은 내가 잘못하고 있다는 것을 알아차렸다.import firebase from 'firebase'firebase변수가 아닌 모든 파일에서 전역적으로 사용 가능firebase수입 명세서로부터 var (내가 쓸 수 있었을 텐데)import FooBar from 'firebase'firebase글로벌 var는 여전히 수입됨)

아무도 "공식적인" 대답을 하지 않는 것 같으니까.여기 내가 게으른 초기화를 제공하기 위해 가지고 온 해결책이 있다.

방화 기지js

import Firebase from 'firebase'

let _database = null

const initFirebase = () => {
    var config = {
        apiKey: "*************",
        authDomain: "************",
        databaseURL: "**********",
        storageBucket: "************",
    }

    Firebase.database.enableLogging(true)
    Firebase.initializeApp(config)
}

export const getDatabase = () => {
    if (!_database) {
        initFirebase()
        _database = Firebase.database()
    }
    return _database
}

그럼, 네가 필요한 곳은 어디든database:

import { getDatabase } from './firebase'

const methodThatNeedDatabase = () => {
    getDatabase().ref('/some/ref')
    ...
}

참조URL: https://stackoverflow.com/questions/39152898/firebase-3-3-realtime-database-stuck-to-making-a-connection-attempt-with-react

반응형