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
相关产品推荐
相关产品推荐

