默认应用程序尚未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 }