wake-up-neo.com

Die Standard-App wurde noch nicht konfiguriert

Ich versuche, meine App auf die neue Version von Firebase zu aktualisieren. Ich ging die Setup-Anleitung durch und bearbeitete meinen gesamten Code an die neue Syntax. Wenn ich jedoch die App starte, erhalte ich diese beiden Fehler. 

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.'

Ich habe FIRApp.configure() in AppDelegate und habe die GoogleServices-Info.plist in mein Projekt importiert. Die Liste enthält alle korrekten Informationen. Jemand, der sich mit diesem Problem befasst oder weiß, wie es behoben werden kann?

16

Hier ist die Antwort auf Ihr Problem:

Um Firebase zu konfigurieren, müssen Sie FIRApp.configure () irgendwo ausführen. Nachdem dies geschehen ist, können Sie let firebaseDatabaseReference = FIRDatabase.database (). Reference () verwenden, um einen Verweis auf diese Datenbank zu erhalten und zu verwenden. Das Problem liegt nicht bei Firebase "per se", sondern bei dem Verhalten von Swift.

Wenn Sie FIRApp.configure() in Ihre AppDelegate func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool eingeben und dann im MyDatabase class verwenden Sie let firebaseDatabaseReference = FIRDatabase.database().reference() outside Ihrer deklarierten Funktionen manchmal wird der Code FIRDatabase.database().reference() ausgeführt, bevor die application didFinishLaunchingWithOptions-Funktion ausgeführt wird. 

Im Wesentlichen versucht Ihre Klasse, einen Verweis auf die Firebase-Datenbank zu erhalten. Vorher Sie hat die Möglichkeit, sich selbst zu konfigurieren, und generiert den Fehler in der Konsole "Die Standard-App wurde noch nicht konfiguriert."

Hinweis: Dies ist nicht immer der Fall, manchmal beginnt die Anwendung langsam, z. B. in iOS Simulator, und es ist nicht möglich, das Programm zu beenden, bevor MyDatabase "let" ausgeführt wird und versucht, eine Referenz zu erhalten.

Daher funktioniert das Verschieben des FIRApp.configure () - Codes zum Überschreiben von init () in AppDelegate. Im Wesentlichen wird sichergestellt, dass der Konfigurationscode beim Initialisieren von AppDelegate ausgeführt wird (in diesem Fall und in den meisten Fällen, bevor MyDatabase initialisiert wird).

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

Stellen Sie außerdem sicher, dass Sie super.init () (damit Superklassen die "Nachricht" erhalten), so dass Sie das Überschreiben nicht mehr schaden als nützen.

62
unom

Ich benutze auch Fabric und in meinem Fall war dies die Reihenfolge von Fabric und Firebase Initialisierungen. Ich musste zuerst Firebase initialisieren.

So wechselnd

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    Fabric.with([Crashlytics.self])
    FirebaseApp.configure()
    ...
}

zu:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    FirebaseApp.configure()
    Fabric.with([Crashlytics.self])
    ...
}

das Problem behoben.

6
algrid

In AppDelegate.m, außerhalb von didFinishLaunchingWithOptions,

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

iOS 9.2
Swift 2.1.1
Xcode 7.2.1
Mac OSX 10.10.5 

Gleicher Fehler hier mit folgendem Code:

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")

    }

Ich habe auch die Datei GoogleService-Info.plist zu meinem Projektverzeichnis hinzugefügt, wie im Firebase-Einführungshandbuch beschrieben.

Und ich habe meine Firebase-Datenbank mit den folgenden Rules veröffentlicht:

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

Die folgenden Änderungen an ViewController.Swift vorzunehmen, hat bei mir funktioniert:

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")

    }

Vor dem Ausführen meiner App sah meine Firebase-Datenbank folgendermaßen aus:

myiosdata-abc123: null

Nachdem ich meine App ausgeführt hatte, sah meine Firebase-Datenbank folgendermaßen aus:

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

Ich hatte mehrere normale Arbeitsprojekte mit FIRApp.configure ()-Code in AppDelegate.Swift:

class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?


    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        FIRApp.configure()
        return true
    }

Seit einiger Zeit hat alles super funktioniert, aber gestern und heute habe ich ein Swift 3-Projekt in meinem Xcode 7.3.1 geöffnet (ich arbeite immer noch in Swift 2, habe aber Swift 3-Projekt geöffnet, um zu sehen, was sich geändert hat) und plötzlich in all meinen Swift 2-Anwendungen und -Projekten, die ich Ich arbeite noch an, habe den gleichen Fehler erhalten: 

Die Standard-App wurde noch nicht konfiguriert

Jedes Projekt jetzt, wenn ich in XCode öffne und denselben Fehler bekomme, wusste ich nicht, was ich tun sollte, aber nach der Implementierung des Codes von @MichaelWilliams funktioniert alles wieder einwandfrei.

Ich habe mein Xcode debuggen (clear und reload console), aber nichts funktioniert neben diesem neuen Ansatz von Michael.

Dieser hat mein Problem gelöst:

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

Kann dieser neue Code irgendwie dazu führen, dass meine App instabil wird, und habe ich Angst, Probleme beim Verbinden/Arbeiten mit der Firebase-Datenbank zu sehen?

1
Pejo Zmaj

Stellen Sie sicher, dass Sie DATABASE_URL in Ihren GoogleService-Info.plist eingeben.

0
Zaid Pathan

Wenn Sie Xcode 9, Swift 4 und Firebase 4 verwenden, gehen Sie wie folgt vor:

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

Die sauberste Lösung für mich hier ist lazy properties, falls Sie die Datenbank auf Ihrer Datei haben möchten. Nehmen wir an, Sie haben eine FirebaseService-Klasse, in der Firestore.firestore() db konstant bleiben soll, damit sie in allen Funktionen dieser Klasse verwendet wird:

private lazy var db = Firestore.firestore()

Oder wenn Sie Firebase Storage verwenden: 

private lazy var storage = Storage.storage().reference()

Denken Sie auch daran, dass Sie möglicherweise dasselbe Problem haben, wenn Sie in init() auf die Datenbank/den Speicher in Klassen verweisen.

0
Vasil Garov