Подтвердить что ты не робот

Приложение по умолчанию еще не настроено

Я пытаюсь обновить свое приложение до новой версии 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, импортированный в мой проект. Плис также имеет правильную информацию. Кто-нибудь еще сталкивается с этим или знает, как его исправить?

4b9b3361

Ответ 1

Вот ответ на вашу проблему:

Чтобы настроить Firebase, вы должны выполнить FIRApp.configure() где-нибудь. После этого вы можете использовать letbasebaseDatabaseReference = 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, прежде чем у нее появится возможность сконфигурировать себя, вызвав ошибку в консоли "Приложение по умолчанию еще не настроено".

Примечание. Это происходит не всегда, иногда приложение запускается медленно, например, в симуляторе iOS, и у него нет возможности завершить работу до того, как MyDatabase "let" выполнит и попытается получить ссылку.

Вот почему перемещение кода FIRApp.configure() для переопределения init() в AppDelegate работает, по сути, он гарантирует, что код конфигурации будет запущен, когда AppDelegate будет инициализирован (в этом и большинстве случаев до инициализации MyDatabase)

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

Также убедитесь, что вы super.init() (так что суперкласс получает сообщение ")", поэтому вы переопределяете больше вреда, чем пользы.

Ответ 2

Я также использую Fabric и в моем случае это был порядок инициализации Fabric и Firebase. Сначала мне нужно было инициализировать Firebase.

Так меняется

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

чтобы:

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

исправил проблему.

Ответ 3

В AppDelegate.m, за пределами didFinishLaunchingWithOptions,

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

Ответ 4

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 Getting Started Guide.

И я сделал публичный db firebase со следующим Rules:

{
  "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 db выглядел так:

myiosdata-abc123: null

После запуска моего приложения Firebase db выглядела так:

myiosdata-abc123
- key
   |
   +--- subkey: "hello world"

Ответ 5

У меня было несколько нормальных рабочих проектов с кодом FIRApp.configure () в AppDelegate.swift:

class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?


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

В течение некоторого времени все отлично работало, но вчера и сегодня я открыл проект Swift 3 внутри моего Xcode 7.3.1 (я все еще работаю в Swift 2, но открыл проект Swift 3, чтобы увидеть, что изменилось), и внезапно во всех моих приложениях и проектах Swift 2, над которыми я все еще работаю, появилась такая же ошибка:

Приложение по умолчанию еще не настроено

Каждый проект теперь, когда я открываю в XCode, получая ту же ошибку, я не знал, что делать, но после внедрения кода @MichaelWilliams все снова работает отлично.

У меня есть отладка моего Xcode (очистка и перезагрузка консоли), но Майкл не работает рядом с этим новым подходом.

Это решило мою проблему:

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

Может ли этот новый код каким-то образом сделать мое приложение неустойчивым и я могу бояться увидеть проблемы с подключением/работой с базой данных Firebase?

Ответ 6

Убедитесь, что у вас есть DATABASE_URL в GoogleService-Info.plist

Ответ 7

Если вы используете Xcode 9, Swift 4 и Firebase 4, пожалуйста, сделайте следующее:

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

Ответ 8

Самое чистое решение для меня здесь - иметь ленивые свойства на тот случай, если вы хотите иметь БД поверх вашего файла. Допустим, у вас есть класс FirebaseService, в котором вы хотите иметь константу db Firestore.firestore() чтобы использовать ее во всех функциях этого класса:

private lazy var db = Firestore.firestore()

Или, если вы используете Firebase Storage:

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

Также имейте в виду, что если вы ссылаетесь на базу данных/хранилище в init() ваших классов, у вас все еще может быть та же проблема, поэтому избегайте ее.

Ответ 9

Swift 5 - простое решение

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

return true
}


//MARK:- This function will auto run and firebase will configure successfully
override init() {
    super.init()
        FirebaseApp.configure()
        // not really needed unless you really need it 
        FIRDatabase.database().persistenceEnabled = true
}

Счастливое Кодирование

Ответ 10

Swift 5

pod 'Firebase/Analytics'Swift 5 - Easy Solution

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

    return true
}


//MARK:- This function will auto run and firebase will configure successfully
override init() {
    super.init()
        FirebaseApp.configure()
        // not really needed unless you really need it 
        FIRDatabase.database().persistenceEnabled = true
}

Счастливое кодирование