我正在尝试将我的应用升级到新版本的 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/