React Native - 使用@react-native-firebase/storage 将图像上传到 Firebase - 没有创建 Firebase 应用“[DEFAULT]”

React Native - upload image to Firebase using @react-native-firebase/storage - No Firebase App '[DEFAULT]' has been created

我在将图片上传到 Firebase 时遇到以下错误:

Error: No Firebase App '[DEFAULT]' has been created - call firebase.initializeApp()

这是我的代码:

  1. App.js

    import * as Firebase from 'firebase';
    
    componentDidMount() {
        Firebase.initializeApp(firebaseConfig);
    }
    
  2. Profile.js

    import * as Firebase from 'firebase';
    import rnFb from '@react-native-firebase/storage';
    
    uploadImage = localUri =>
    new Promise((resolve, reject) => {
        const localUri2 = Platform.OS === 'ios' ? localUri.replace('file://', '') : localUri;
        const fbUri = Firebase.storage().ref();
        rnFb().ref(localUri2).putFile(fbUri)
        .then(
            () => { resolve(); }
        )
        .catch(
            (e) => { reject(e); }
        );
    });
    

它在 .putFile 行失败。

我不明白问题出在哪里,因为我在 App.js

中调用 .initializeApp()

12 月 21 日更新 我在 rnFb().ref(localUri2).putFile(fbUri) 之前添加了 console.log(Firebase.apps.length); 并且输出是 1...确实很奇怪。

...如果我完全按照错误要求做,并在 rnFb().ref(localUri2).putFile(fbUri) 之前调用 firebase.initializeApp(),我会收到错误错误:

Firebase: Firebase App named '[DEFAULT]' already exists

求助!!

我认为你的fbUri是错误的。参数必须是一个字符串。 例如:

    firebase
          .storage()
          .ref('remote_path') // remote path where you want to store
          .putFile(
            'local/ok.jpeg' // local file
          )
          .then(successCb)
          .catch(failureCb);

我的理解是 @react-native-firebase 内部使用的 Firebase SDK 独立于 firebase 的普通 Firebase SDK。

可以使用以下方式公开:

import firebase from '@react-native-firebase/app';
// OR
import { firebase } from '@react-native-firebase/storage';

应用这些更改(并简化您的代码),您将得到以下内容:

import storage, { firebase } from '@react-native-firebase/storage';

// can possibly be somewhere else
firebase.initializeApp(firebaseConfig);

uploadImage = localUri => {
  const localUri2 = Platform.OS === 'ios' ? localUri.replace('file://', '') : localUri;
  return storage().ref('/path/to/upload/to').putFile(localUri2)
}

除了使用 "client initialization" 使用 firebase.initializeApp(),您还可以使用 "native initialization" Android and iOS.

您是否遵循了 API 文档?我似乎无法在文档中的任何地方找到您需要手动调用 initializeApp()