我有一个使用Firebase进行各种功能的React Native应用程序。在我收到以下错误之前,它已经完美运行了2周。我没有更改App.js
中的任何内容,所以不知道为什么会遇到这个问题。
[DEFAULT]:Firebase:未创建Firebase应用程序'[DEFAULT]'-调用Firebase App.initializeApp()(app / no-app)。
这是我的配置代码放在我的App.js
中:
const firebaseConfig = {
apiKey: '<api-key>',
authDomain: '<app-name>.firebaseapp.com',
databaseURL: 'https://<app-name>.firebaseio.com',
projectId: '<project-id>',
storageBucket: '<app-name>.appspot.com',
messagingSenderId: '<messaging-sender-id>',
appId: '<app-id>'
};
firebase.initializeApp(firebaseConfig);
仅当我在其中一个组件中注释掉以下Firebase代码时,此代码才运行:
const { currentUser } = firebase.auth();
console.log(currentUser);
这是我的console.log(firebase.app())
;
答案 0 :(得分:1)
更新
您在componentDidMount
上具有所有配置设置,可能会运行几次,而这会导致您遇到问题,我进行了以下更改,并像一种魅力一样工作:
我在firebase.js
旁边的根目录上创建一个App.js
,文件看起来像这样
import `firebase/app`
require(`firebase/auth`)
const firebaseConfig = {
apiKey: '<api-key>',
authDomain: '<app-name>.firebaseapp.com',
databaseURL: 'https://<app-name>.firebaseio.com',
projectId: '<project-id>',
storageBucket: '<app-name>.appspot.com',
messagingSenderId: '<messaging-sender-id>',
appId: '<app-id>'
};
if (!firebase.apps.length) {
firebase.initializeApp(firebaseConfig);
}
export auth = firebase.auth()
export default firebase
然后您的App.js
如下所示:
import React, { Component } from 'react';
import { Provider } from 'react-redux';
import { createStore, applyMiddleware } from 'redux';
import reducers from './reducers';
import ReduxThunk from 'redux-thunk';
import Router from './Router';
import { auth } from './firebase' // <----
class App extends Component {
componentDidMount () {
this.checkAuth()
}
checkAuth = () {
auth.onAuthStateChanged(function(user, err) {
console.log(user);
if (user) {
console.log(user);
Actions.signUpVerify();
} else {
console.log(err);
}
});
}
render() {
const store = createStore(reducers, {}, applyMiddleware(ReduxThunk));
return (
<Provider store={store}>
<Router />
</Provider>
)
}
}
export default App;
您不应在渲染方法上运行auth,因为它可能会多次运行。
答案 1 :(得分:1)
如果您仍然对此Error: Firebase: No Firebase App '[DEFAULT]' has been created
感到不安,由于初始化应用程序的默认名称为'[DEFAULT]'
,请尝试指定它是什么应用程序,.initializeApp
的重载参数为1至2克服这个错误,我为您提供了完美的例子
//firebase.js
const config = {...}
firebase.initializeApp(config, 'YouAppName');
//loading.js
firebase.app('YouAppName').auth().onAuthStateChange( user=> {
navigation.navigate(user ? 'Home' : 'Login')
})
欢迎:)
答案 2 :(得分:0)
在react native应用中,您无需从javascript端配置firebase。
例如,在IOS方面,在AppDelegate.m中添加以下行以手动初始化firebase。
在文件顶部导入Firebase模块:
#import <Firebase.h>
在didFinishLaunchingWithOptions
方法中,添加configure方法:
(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
if ([FIRApp defaultApp] == nil) {
[FIRApp configure];
}
}
答案 3 :(得分:0)
我过去在几乎所有的Firebase项目中都遇到相同的问题,但是解决您的问题很容易。您正在尝试查看经过身份验证的用户。问题在于该方法是异步的,实现方式不正确。您要做的是使用firebase.onAuthstateChanged方法并将其放置在Firebase初始化区域之后,如下所示:
firebase.initializeApp({
apiKey: '<api-key>',
authDomain: '***',
databaseURL: '***',
projectId: '***',
storageBucket: '***',
messagingSenderId: '***',
appId: '***',
measurementId: 'G-HSYR9HXZF6',
});
// Enabling Offline Capability
firebase.firestore().settings({
cacheSizeBytes: firebase.firestore.CACHE_SIZE_UNLIMITED,
});
firebase.firestore().enablePersistence();
// Listen to when a user logs in or logs out
firebase.auth().onAuthStateChanged((user) => {
if (user) {
const userDetails = {
id: user.uid,
name: user.displayName,
email: user.email,
provider: user.providerData[0].providerId,
};
console.log(userDetails)
} else {
console.log('No User Found')
}
});