You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native中Firebase Storage报[DEFAULT]应用未创建错误求助

问题根源

你混用了两套独立的Firebase SDK体系:

  • 初始化用的是Firebase Web模块化SDK(firebase/app、firebase/auth)
  • Storage用的是React Native Firebase专用SDK(@react-native-firebase/storage)
    这两套SDK不共享App实例,所以React Native Firebase的Storage找不到Web SDK初始化的[DEFAULT] App。
解决方案

方案一:统一使用React Native Firebase SDK(推荐)

这套SDK专为React Native优化,API更贴合RN生态。

1. 调整初始化代码

替换原Web SDK导入,改用React Native Firebase的包:

// 移除原firebase/app、firebase/auth等Web SDK导入
import ReactNativeAsyncStorage from '@react-native-async-storage/async-storage';
import { initializeApp } from '@react-native-firebase/app';
import { initializeAuth, getReactNativePersistence } from '@react-native-firebase/auth';
import { getAnalytics } from '@react-native-firebase/analytics';
import { GoogleSignin } from '@react-native-google-signin/google-signin';
import { requestTrackingPermissionsAsync } from "expo-tracking-transparency";
import { Settings } from "react-native-fbsdk-next";

const firebaseConfig = {
  apiKey: "",
  authDomain: "-..",
  projectId: "-",
  storageBucket: "",
  messagingSenderId: "",
  appId: "",
  measurementId: ""
};

// 初始化React Native Firebase App
const app = initializeApp(firebaseConfig);
// 保持你的Auth持久化配置
initializeAuth(app, {
  persistence: getReactNativePersistence(ReactNativeAsyncStorage)
});

2. 修改UploadFile函数

使用React Native Firebase的Storage API:

import storage from '@react-native-firebase/storage';

export const UploadFile = async (file_uri, name, bucket) => {
  try {
    const parts = file_uri.split(/[\/\\]/);
    const basename = parts[parts.length - 1];

    let storageRef;
    if (bucket) {
      // 指定自定义存储桶
      storageRef = storage().app.storage(`gs://${bucket}.appspot.com`).ref(basename);
    } else {
      // 使用默认存储桶
      storageRef = storage().ref(basename);
    }

    // 执行上传(putFile是React Native Firebase专属方法)
    await storageRef.putFile(file_uri);
    return storageRef;
  } catch (error) {
    console.log('Error when uploading the file: ', error);
    throw error;
  }
};

方案二:统一使用Firebase Web模块化SDK

若坚持用Web SDK,需替换Storage的导入和用法(Web SDK无putFile,需手动转Blob):

1. 调整Storage导入

// 移除@react-native-firebase/storage,改用Web SDK
import { getStorage, ref, uploadBytes } from "firebase/storage";

2. 修改UploadFile函数

import { getStorage, ref, uploadBytes } from "firebase/storage";
import { app } from './你的Firebase初始化文件路径'; // 导入之前初始化的app实例

export const UploadFile = async (file_uri, name, bucket) => {
  try {
    const parts = file_uri.split(/[\/\\]/);
    const basename = parts[parts.length - 1];

    const storage = getStorage(app, bucket ? `gs://${bucket}.appspot.com` : undefined);
    const storageRef = ref(storage, basename);

    // RN环境下将本地文件转为Blob
    const response = await fetch(file_uri);
    const blob = await response.blob();
    
    await uploadBytes(storageRef, blob);
    return storageRef;
  } catch (error) {
    console.log('Error when uploading the file: ', error);
    throw error;
  }
};
注意事项
  • 确保所有Firebase功能(Auth、Analytics等)都使用同一套SDK,避免实例不匹配问题。
  • 若用React Native Firebase,需按官方文档完成iOS/Android原生端配置(gradle、plist等)。

内容的提问来源于stack exchange,提问作者Vénon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 10:31:27