默认应用程序尚未configuration

我正在尝试将我的应用升级到新版本的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也有所有正确的信息。 任何人遇到这个问题或知道如何解决它?

这是你的问题的答案:

要configurationFirebase,您必须在某处执行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函数执行之前执行。

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

注意:这不会一直发生,有时应用程序启动缓慢,例如在iOS Simulator中,并且它没有机会在MyDatabase“let”执行之前完成并尝试获取引用。

这就是为什么移动FIRApp.configure()代码覆盖AppDelegate中的init()工作,实质上它确保configuration代码在AppDelegate初始化时执行(在这种情况下,大多数情况下,在MyDatabase被初始化之前)

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

还要确保你super.init()(所以你超级类得到的“消息”),所以你重写不会做更多的伤害,而不是好的。

不知道为什么在概念上,但这个工作…

在AppDelegate中,在didFinishLaunchingWithOptions之外,

 override init() { FIRApp.configure() FIRDatabase.database().persistenceEnabled = true } 

iOS 9.2
Swift 2.1.1
Xcode 7.2.1
Mac OSX 10.10.5

同样的错误在这里使用下面的代码:

AppDelegate.swift

 class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { // Override point for customization after application launch. FIRApp.configure() return true } 

ViewController.swift

 import UIKit import Firebase class ViewController: UIViewController { var db = FIRDatabase.database().reference() override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. //Create some data in Firebase db: db.child("key").child("subkey").setValue("hello world") } 

我还将文件GoogleService-Info.plist添加到我的项目目录中,如“ Firebase入门指南”中所述 。

而且我按照以下规则公开我的Firebase数据库:

 { "rules": { ".read": true, ".write": true } } 

对ViewController.swift进行以下更改对我来说是有效的:

 class ViewController: UIViewController { var db: FIRDatabaseReference! override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. db = FIRDatabase.database().reference() db.child("key").child("subkey").setValue("hello world") } 

在运行我的应用程序之前,我的Firebase数据库看起来像这样:

 myiosdata-abc123: null 

运行我的应用程序后,我的Firebase数据库看起来像这样:

 myiosdata-abc123 - key | +--- subkey: “hello world” 

我有几个正常的工作项目,在AppDelegate.swift使用FIRApp.configure ()代码:

 class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { FIRApp.configure() return true } 

一切都很好,但是昨天和今天我在Xcode 7.3.1里面打开了一个Swift 3项目(我仍然在Swift 2工作,但是打开了Swift 3项目来看看有什么变化),突然间Swift 2应用程序和项目,我仍然在工作,得到了同样的错误:

默认应用程序尚未configuration

现在每一个项目,当我在XCode打开,得到同样的错误,我不知道该怎么做,但是在执行@MichaelWilliams的代码后,一切正常。

我有debugging我的Xcode(清除和重新加载控制台),但没有任何工作旁边迈克尔这个新的方法。

这个解决了我的问题:

 override init() { FIRApp.configure() FIRDatabase.database().persistenceEnabled = true } 

这个新的代码能不能让我的应用程序变得不稳定,我现在可以害怕连接/使用Firebase数据库吗?

确保你的GoogleService-Info.plist中有DATABASE_URL

如果您使用的是Xcode 9,Swift 4和Firebase 4,请执行以下操作:

 override init() { FirebaseApp.configure() Database.database().isPersistenceEnabled = true }