Pytanie Awaria aplikacji przy korzystaniu z Firebase Auth: "Domyślna aplikacja została już skonfigurowana".


Buduję swoją pierwszą aplikację na iOS i używam Firebase do obsługi uwierzytelniania, bazy danych itp. Dodałem ekran rejestracji i użyłem następującego kodu, aby utworzyć nowego użytkownika:

FIRAuth.auth()?.createUserWithEmail(emailAddress.text!, password: password.text!, completion: { (user, error) in

        })

Kiedy użytkownik kliknie przycisk rejestracji, jest segue, który powinien zabrać je z powrotem do oryginalnego kontrolera widoku logowania. Jednak po uruchomieniu aplikacji zawiesza się na ekranie uruchamiania. Oto dane wyjściowe debuggera:

2016-06-19 14:35:05.402 unitaskr[4386:82981] Configuring the default app.
2016-06-19 14:35:05.413 unitaskr[4386:] <FIRAnalytics/INFO> Firebase Analytics     v.3200000 started
2016-06-19 14:35:05.414 unitaskr[4386:] <FIRAnalytics/INFO> To enable debug logging set the following application argument: -FIRAnalyticsDebugEnabled (see ...)
2016-06-19 14:35:05.419: <FIRInstanceID/WARNING> FIRInstanceID AppDelegate proxy enabled, will swizzle app delegate remote notification handlers. To disable add "FirebaseAppDelegateProxyEnabled" to your Info.plist and set it to NO
2016-06-19 14:35:05.418 unitaskr[4386:] <FIRAnalytics/INFO> Successfully created Firebase Analytics App Delegate Proxy automatically. To disable the proxy, set the flag FirebaseAppDelegateProxyEnabled to NO in the Info.plist
2016-06-19 14:35:05.430 unitaskr[4386:82981] *** Terminating app due to uncaught exception 'com.firebase.core', reason: 'Default app has already been configured.'
*** First throw call stack:
(
0   CoreFoundation                      0x00000001100a8d85   __exceptionPreprocess + 165
1   libobjc.A.dylib                     0x00000001108e7deb objc_exception_throw + 48
2   CoreFoundation                      0x00000001100a8cbd +[NSException raise:format:] + 205
3   unitaskr                            0x000000010b58844d +[FIRApp    configureDefaultAppWithOptions:sendingNotifications:] + 102
4   unitaskr                            0x000000010b588238 +[FIRApp configure] + 302
5   unitaskr                            0x000000010b541f1a _TFC8unitaskr11AppDelegate11applicationfTCSo13UIApplication29didFinishLaunchingWithOptionsGSqGVs10DictionaryCSo8NSObjectPs9AnyObject____Sb + 266
6   unitaskr                            0x000000010b542204 _TToFC8unitaskr11AppDelegate11applicationfTCSo13UIApplication29didFinishLaunchingWithOptionsGSqGVs10DictionaryCSo8NSObjectPs9AnyObject____Sb + 180
7   UIKit                               0x000000010e5bf9ac -[UIApplication _handleDelegateCallbacksWithOptions:isSuspended:restoreState:] + 272
8   UIKit                               0x000000010e5c0c0d -[UIApplication _callInitializationDelegatesForMainScene:transitionContext:] + 3415
9   UIKit                               0x000000010e5c7568 -[UIApplication _runWithMainScene:transitionContext:completion:] + 1769
10  UIKit                               0x000000010e5c4714 -[UIApplication workspaceDidEndTransaction:] + 188
11  FrontBoardServices                  0x00000001127b78c8 __FBSSERIALQUEUE_IS_CALLING_OUT_TO_A_BLOCK__ + 24
12  FrontBoardServices                  0x00000001127b7741 -[FBSSerialQueue _performNext] + 178
13  FrontBoardServices                  0x00000001127b7aca -[FBSSerialQueue _performNextFromRunLoopSource] + 45
14  CoreFoundation                      0x000000010ffce301 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
15  CoreFoundation                      0x000000010ffc422c __CFRunLoopDoSources0 + 556
16  CoreFoundation                      0x000000010ffc36e3 __CFRunLoopRun + 867
17  CoreFoundation                      0x000000010ffc30f8 CFRunLoopRunSpecific + 488
18  UIKit                               0x000000010e5c3f21 -[UIApplication _run] + 402
19  UIKit                               0x000000010e5c8f09 UIApplicationMain + 171
20  unitaskr                            0x000000010b542a42 main + 114
21  libdyld.dylib                       0x00000001113b692d start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb) 

Mogę dostarczyć dodatkowych informacji w razie potrzeby, każda pomoc / porada byłaby bardzo ceniona, ponieważ dopiero zaczynałem i starałem się uczyć jak najwięcej. Miłego dnia!


19
2018-06-19 19:01


pochodzenie




Odpowiedzi:


Miałem problem z Rozszerzenie wiadomości :

Jeśli jesteś w Rozszerzenie aplikacji, nie masz delegata, a będziesz musiał umieścić FIRApp.configure () w init twojego głównego ViewController (lub w viewDidLoad zgodnie z sugestią).

Problem: w rozszerzeniu wiadomości, jeśli użytkownik naciśnie kilka komunikatów w wątku otwierającym rozszerzenie, init (lub viewdidLoad) będzie wywoływany kilka razy, aw konsekwencji z powodu kilkukrotnego wywołania funkcji FIRApp.configure () ...

Rozwiązaniem, które znalazłem, było stworzenie statycznego boola w głównym kontrolerze widoku:

    static var isAlreadyLaunchedOnce = false // Used to avoid 2 FIRApp configure

i testuję go przed wywołaniem FIRApp.configure () w init lub viewDidLoad:

// Configure Firebase
    // ------------------
    // We check if FIRApp has already been configured with a static var, else it will crash...
    if !MessagesViewController.isAlreadyLaunchedOnce {
        FIRApp.configure()

        MessagesViewController.isAlreadyLaunchedOnce = true
    }

W ten sposób, nie więcej awarii.


Och, znalazłem o wiele bardziej elegancki sposób na rozwiązanie tego problemu: Rozszerzenie iOS - Fatal Exception: com.firebase.core Domyślna aplikacja została już skonfigurowana

    // Configure Firebase
    // ------------------
    if FIRApp.defaultApp() == nil {
        FIRApp.configure()            
    }

Nie więcej statycznych w ten sposób;)


33
2017-11-02 21:25



To jest miłe. Używał go w kontekście rozszerzenia. - Alex Bartiş


napisałem FIRApp.configure() dwa razy, które wydawało się naprawić błąd.


14
2018-06-19 23:30



Zrobiłem to samo przypadkowo i popełniłem ten sam błąd. Nie powinieneś już mieć problemu! - Dan Levy


Możesz wywołać jeden raz w metodyce init AppDelegate, aby ją skonfigurować.

override init() {
   // Firebase Init
   FIRApp.configure()
}

4
2018-06-20 00:39



Nazwałem tę metodę w mojej klasie klawiatury rozszerzającej, gdzie nie mam klasy AppDelegate. więc jak mam to zrobić? - Sunil Targe
spróbuj wywołać to w widoku viewDidLoad kontrolera widoku. zastępuje func viewDidLoad () {} - Ourang-Zeb Khan
Ale to jest problem, ponieważ jeśli zmienię moją klawiaturę rozszerzeń na natywną i natywną na rozszerzenie, to nastąpi awaria i wyrzucenie tego samego błędu. - Sunil Targe
czy możesz rozszerzyć kontroler widoku i wywołać go dwukrotnie? i ponownie sprawdź - Ourang-Zeb Khan
override func viewDidLoad() { super.viewDidLoad() FIRApp.configure() } // Napisałem w mojej klasie UIInputViewController rozszerzenie klawiatury. Ale kiedy przełączam klawiaturę na klawiaturę Native ios i znowu na klawiaturę, ta metoda jest wywoływana i zdarza się z tym awaria error- [powód: "Domyślna aplikacja została już skonfigurowana."] - Sunil Targe


na wypadek, gdyby ktoś inny natknął się na ten problem. podczas użytkowania firebase sdk z googleSignIn SDK. musisz je skonfigurować tylko raz. albo [[GGLContext sharedInstance] configureWithError: &configureError]; lub [FIRApp configure]


3
2017-08-20 06:11





To jest inne rozwiązanie tego problemu. 1 / Sprawdź w "AppDelegate.swift" zobaczymy poniżej

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.
    FirebaseApp.configure()
    return true
}

2 / Usuń "FirebaseApp.configure ()" z powyższego kodu do

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.

    return true
}

3 / Dodaj poniżej kod do "AppDelegate.swift"

override init() {
    FirebaseApp.configure()
}

4 / Przejdź do "ViewController.swift" i dodaj kod

    if FirebaseApp.app() == nil {
        FirebaseApp.configure()
    }

5 / Zbuduj ponownie i uruchom go będzie działać. Dzięki!


1
2017-07-23 05:10





Nazwa klasy: AppDelegate + FCMPlugin.m

[FIRApp.configure ()];

Umieść to na górze tej metody

  • Aplikacja (BOOL): aplikacja (UIApplication *) customDidFinishLaunchingWithOptions: (NSDictionary *) launchOptions

0
2017-09-12 13:29





Dla Swift 4

Miał ten sam problem z awarią. Podczas próby odniesienia z Firebase z plikiem .plist.

(To naprawiło mój problem.)

Spróbuj napisać to poza lub w ramach metody viewDidLoad:

1. var ref: DatabaseReference!

Następnie odwołaj go w ramach metody viewDidLoad:

2. Database.database().reference()

A teraz:

FirebaseApp.configure()

Zamiast.


0
2018-03-02 16:41