Почему firebaseApp уже инициализирован в React Native на Android? - PullRequest
0 голосов
/ 16 апреля 2020

Когда я пытаюсь запустить этот код на android, я получаю ошибку FirebaseApp name [DEFAULT] already exists! В этой теме , он говорит, что firebaseApp инициализируется при запуске приложения, но тогда почему вы можете вызвать initializeApp, например в этой теме ? Кажется, что мой код функционально похож на код во втором потоке, так почему я получаю ошибку? Он отлично работает на iOS, поэтому я полностью потерян. Что я пропустил?

Редактировать: Забыл упомянуть, что все значения testConfig хранятся в файле .env, доступ к которому осуществляется из библиотекиact-native-config.

Редактировать 2: Изменение firebase.initializeApp(testConfig); на firebase.initializeApp(testConfig, 'fire'); исправляет android, но ломает ios, вызывая ошибку No Firebase App '[DEFAULT]' has been created - call firebase.initializeApp()

Код:

import firebase from '@react-native-firebase/app';
import '@react-native-firebase/auth';        // for authentication
import '@react-native-firebase/storage';     // for storage
import '@react-native-firebase/firestore';   // for cloud firestore
import '@react-native-firebase/functions';   // for cloud functions
import '@react-native-firebase/messaging';   // for cloud messaging
import Config from 'react-native-config'

const testConfig = {
  apiKey: Config.REACT_APP_FIREBASE_TEST_API_KEY,
  authDomain: Config.REACT_APP_FIREBASE_TEST_AUTH_DOMAIN,
  databaseURL: Config.REACT_APP_FIREBASE_TEST_DATABASE_URL,
  projectId: Config.REACT_APP_FIREBASE_TEST_PROJECT_ID,
  storageBucket: Config.REACT_APP_FIREBASE_TEST_STORAGE_BUCKET,
  messagingSenderId: Config.REACT_APP_FIREBASE_TEST_MESSAGING_SENDER_ID,
  appId: Config.REACT_APP_FIREBASE_TEST_APP_ID,
  measurementId: Config.REACT_APP_FIREBASE_TEST_MEASUREMENT_ID
};

const fire = firebase.initializeApp(testConfig);

Logcat:

2020-04-16 11:05:17.269 25458-25543/com.nativeminutetech E/unknown:ReactNative: Exception in native call
    java.lang.IllegalStateException: FirebaseApp name [DEFAULT] already exists!
        at com.google.android.gms.common.internal.Preconditions.checkState(Unknown Source:29)
        at com.google.firebase.FirebaseApp.initializeApp(com.google.firebase:firebase-common@@19.3.0:295)
        at com.google.firebase.FirebaseApp.initializeApp(com.google.firebase:firebase-common@@19.3.0:268)
        at io.invertase.firebase.common.RCTConvertFirebase.readableMapToFirebaseApp(RCTConvertFirebase.java:97)
        at io.invertase.firebase.app.ReactNativeFirebaseAppModule.initializeApp(ReactNativeFirebaseAppModule.java:55)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.facebook.react.bridge.JavaMethodWrapper.invoke(JavaMethodWrapper.java:372)
        at com.facebook.react.bridge.JavaModuleWrapper.invoke(JavaModuleWrapper.java:151)
        at com.facebook.react.bridge.queue.NativeRunnable.run(Native Method)
        at android.os.Handler.handleCallback(Handler.java:790)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:27)
        at android.os.Looper.loop(Looper.java:164)
        at com.facebook.react.bridge.queue.MessageQueueThreadImpl$4.run(MessageQueueThreadImpl.java:226)
        at java.lang.Thread.run(Thread.java:764)

Ответы [ 2 ]

0 голосов
/ 17 апреля 2020

Как указано в документах Reaction-native-Firebase , Firebase инициализируется автоматически при запуске приложения, поэтому мой исходный вызов initializeApp был излишним. Причина, по которой он не был инициализирован для iOS, заключалась в том, что я не настроил приложение в консоли Firebase для iOS (упс). Если кто-то столкнется с этой проблемой, учтите, что вам необходимо выполнить настройку для обеих ОС, только одна не справится с задачей.

0 голосов
/ 17 апреля 2020

Да, не забудьте проверить:

if (!firebase.apps.length) {
      firebase.initializeApp(testConfig);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...