ios - 默认应用尚未配置

标签 ios swift firebase

我正在尝试将我的应用升级到新版本的 Firebase。我仔细阅读了设置指南并编辑了所有代码以匹配新语法。但是,当我运行该应用程序时,出现了这两个错误。

The default app has not been configured yet.
Terminating app due to uncaught exception 'MissingDatabaseURL', reason: 'Failed to get FIRDatabase instance: FIRApp object has no databaseURL in its FirebaseOptions object.'

我在 AppDelegate 中有 FIRApp.configure() 并将 GoogleServices-Info.plist 导入到我的项目中。 plist 也有所有正确的信息。还有其他人遇到这个问题或知道如何解决吗?

最佳答案

这是您问题的答案:

要配置 Firebase,您必须在某处执行 FIRApp.configure()。完成此操作后,您可以使用 let firebaseDatabaseReference = FIRDatabase.database().reference() 获取对该数据库的引用并开始使用它。问题不在于 Firebase“本身”,而在于 Swift 的行为方式。

如果你把 FIRApp.configure() 放在你的 AppDelegate func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool 然后在 MyDatabase 类 中,您使用 let firebaseDatabaseReference = FIRDatabase.database().reference() 在您声明的函数之外有时 代码 FIRDatabase.database().reference()application didFinishLaunchingWithOptions 函数执行之前执行。

本质上,您的类在有机会配置自身之前尝试获取对 Firebase 数据库的引用,从而在控制台中生成错误“尚未配置默认应用程序。”

注意:这种情况并非总是发生,有时应用程序启动缓慢,例如在 iOS 模拟器中,并且它没有机会在 MyDatabase“让”执行并尝试获取引用。

这就是为什么将 FIRApp.configure() 代码移动到覆盖 AppDelegate 中的 init() 的原因,本质上它确保配置代码在 AppDelegate 初始化时执行(在这种情况和大多数情况下,在 MyDatabase 初始化之前)

override init() {
   super.init()
   FIRApp.configure()
   // not really needed unless you really need it FIRDatabase.database().persistenceEnabled = true
}

还要确保你 super.init() (所以你的父类(super class)得到“消息”)所以你覆盖不会弊大于利。

关于ios - 默认应用尚未配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37334323/

相关文章:

ios - BranchIO Universal Link iOS 数据仅在长按并选择打开方式时有效

ios - UICollectionViewCell是否仅在 View 上加载?

ios - 以编程方式获取嵌入 UIStackView 中的自定义 UIView

ios - 如何检查 iPhone 上的 wifi 服务是否在我的应用程序中使用 wifi 导航

ios - Swift native 函数将数字作为十六进制字符串

swift - 为什么? AVAudioSessionRouteChangeReason 返回零?

android - Firebase 数据库快照返回 null

android - firebase-core 和 firebase-analytics 库有什么区别?

android - React Native Firebase : no custom sound, 无振动

ios - 海拔差异会影响地理围栏吗?