firebase.initializeApp() 与 FirebaseApp.initializeApp()

Posted

技术标签:

【中文标题】firebase.initializeApp() 与 FirebaseApp.initializeApp()【英文标题】:firebase.initializeApp() vs FirebaseApp.initializeApp() 【发布时间】:2021-08-19 11:18:15 【问题描述】:

我目前正在尝试使用“expo-notifications”中的 Notifications 包设置推送通知,我只是收到以下错误,我无法解决它:

[错误:调用本机方法时遇到异常:在模块 ExpoPushTokenManager 上执行导出方法 getDevicePushTokenAsync 时发生异常:默认 FirebaseApp 未在此进程 com 中初始化。------。确保首先调用 FirebaseApp.initializeApp(Context)。]

问题是,这条消息完全激怒了我,因为我确实打电话:

import * as firebase from "firebase";

然后:

firebase.initializeApp(ApiKeys);

在我的应用程序开始时。

我现在是否需要安装 Firebase/App 软件包才能执行FirebaseApp.initializeApp()?那我需要初始化我的应用程序 2 次吗?

expo 的文档都没有提到这样的错误,我也没有在 firebase 文档中找到与此错误相关的任何内容,我真的很努力解决这个问题。

【问题讨论】:

你应该只需要初始化一次。但是,似乎无论在哪里执行getDevicePushTokenAsync,它都会在您调用initializeApp 之前被调用,或者它正在使用FirebaseApp 的不同实例(例如,使用自定义名称)。您需要调查为什么会出现这种情况,特别注意您的导入顺序。有些文件可能会在你的主文件之前被导入和执行。 我的意思是我通过我的应用程序使用一个帐户登录到 firebase,并从数据库中检索信息,这发生在我的 initializeApp() 调用之后,这让我很难找到错误.如果我的应用无法初始化,我如何能够在我的应用中使用我的 firebase 帐户登录并与服务器通信? 没关系,我解决了,把这个问题的答案放在这里。我仍然喜欢你的回答,它让我更好地理解了我的代码。 【参考方案1】:

显然,在 expo 文档中根本没有提到 app/build.gradle 文件中的导入。它缺少以下行:

implementation("com.google.firebase:firebase-iid")

您需要将其放入您的 app/build.gradle 文件中以使其工作。

I found it in the following forum, the posts are just one month old so its a quite new bug.

【讨论】:

以上是关于firebase.initializeApp() 与 FirebaseApp.initializeApp()的主要内容,如果未能解决你的问题,请参考以下文章

firebase.initializeApp 不是本机反应的功能

没有创建 Firebase 应用 [DEFAULT] = 调用 Firebase.initializeApp()

从 Firebase.initializeApp() 获取令牌

没有创建 Firebase 应用“[DEFAULT]” - 在 Flutter 和 Firebase 中调用 Firebase.initializeApp()

尽管调用了 Firebase.initializeApp(),但 Firebase 未初始化

TypeError:firebase.initializeApp 不是函数