我正在尝试将我的应用程序升级到新版本的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.'
我 FIRApp.configure()在AppDelegate中,并将GoogleServices- Info.plist导入到我的项目中。plist也具有所有正确的信息。其他人遇到这个问题或知道如何解决?
FIRApp.configure()
这是您的问题的答案:
要配置Firebase,您必须在某处执行 FIRApp.configure() 。完成此操作后,可以使用 let firebaseDatabaseReference = FIRDatabase.database()。reference() 获取对该数据库的引用并开始使用它。问题不在于Firebase本身,而在于Swift的行为方式。
如果您放入FIRApp.configure()AppDelegate func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool,然后在声明的函数 之外MyDatabase class使用,则 有时 代码 会 在函数执行之前执行。let firebaseDatabaseReference = FIRDatabase.database().reference() ____FIRDatabase.database().reference()``application didFinishLaunchingWithOptions
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool
MyDatabase class
let firebaseDatabaseReference = FIRDatabase.database().reference()
FIRDatabase.database().reference()``application didFinishLaunchingWithOptions
本质上,您的班级试图在对Firebase数据库进行配置 之前 对其进行引用,从而在控制台中生成错误“尚未配置默认应用程序”。
注意:例如,在iOS Simulator中,这种情况并非一直发生,有时应用程序启动速度很慢,并且MyDatabase“ let”执行并尝试获取引用之前没有完成的机会。
这就是为什么移动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()(这样,您的超类便会获得“消息”),因此重写不会带来多大的弊端。