webentwicklung-frage-antwort-db.com.de

App stürzt ab, wenn Firebase Auth verwendet wird, Grund: 'Standard-App wurde bereits konfiguriert.'

Ich baue meine erste iOS-Anwendung und verwende Firebase, um Authentifizierung, Datenbank usw. zu handhaben. Ich habe einen Anmeldebildschirm hinzugefügt und den folgenden Code zum Erstellen eines neuen Benutzers verwendet: 

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

        })

Wenn der Benutzer auf die Anmeldeschaltfläche tippt, wird ein Fenster angezeigt, in dem er zum ursprünglichen Anmeldesicht-Controller zurückkehren soll. Wenn ich jedoch die App ausführen konnte, bleibt sie auf dem Startbildschirm hängen. Hier ist die Debugger-Ausgabe:

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) 

Ich kann bei Bedarf zusätzliche Informationen zur Verfügung stellen. Jede Hilfe/Beratung wäre sehr dankbar, da ich gerade erst anfange und so viel wie möglich lernen möchte. Ich wünsche ihnen einen wunderbaren Tag! 

26

Ich hatte ein Problem mit einer Messages Extension:

Wenn Sie sich in einer App Extension befinden, haben Sie keinen Delegierten, und Sie müssen FIRApp.configure () in den Init Ihres Haupt-ViewControllers (oder wie vorgeschlagen in viewDidLoad) einfügen.

Problem ist: Wenn der Benutzer in einer Nachrichtenerweiterung mehrere Nachrichten in dem Thread drückt, der Ihre Erweiterung öffnet, wird init (oder viewdidLoad) mehrmals aufgerufen, was zum Absturz aufgrund von mehrmaligem Aufruf von FIRApp.configure () führt.

Die Lösung, die ich gefunden habe, war das Erstellen eines statischen Bool im Main View Controller:

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

und ich teste es vor dem Aufruf von FIRApp.configure () in der init oder 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
    }

Auf diese Weise stürzt kein Absturz mehr ab.


Oh, ich habe hier einen viel eleganteren Weg gefunden, um das Problem zu lösen: iOS Extension - Fatal Ausnahme: com.firebase.core Standard-App wurde bereits konfiguriert

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

Nicht mehr statisch auf diese Weise;)

41

Ich schrieb FIRApp.configure() zweimal, das schien den Fehler zu beheben.

18

Dies ist eine andere Lösung zu diesem Problem. 1/Überprüfen Sie in "AppDelegate.Swift", wie wir unten sehen werden

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

2/Entfernen Sie "FirebaseApp.configure ()" aus dem obigen Code

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

    return true
}

3/Fügen Sie den folgenden Code in "AppDelegate.Swift" ein

override init() {
    FirebaseApp.configure()
}

4/Gehen Sie zu "ViewController.Swift" und fügen Sie den Code hinzu

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

5/Build erneut und Ausführen, es wird funktionieren. Vielen Dank!

6
Khoem Vichet

Sie können einmal in der AppDelegate-Init-Methode zur Konfiguration aufrufen.

override init() {
   // Firebase Init
   FIRApp.configure()
}
6
Ourang-Zeb Khan

nur für den Fall, dass jemand anderes auf dieses Problem stößt ... Wenn Sie firebase sdk mit googleSignIn sdk verwenden Sie müssen sie nur einmal konfigurieren. entweder [[GGLContext sharedInstance] configureWithError: &configureError]; oder [FIRApp configure]

3
Ian Zhao

Für Swift 4,

if FirebaseApp.app() == nil {
/// code snippet
}
3
ssowri1

Klassenname: AppDelegate + FCMPlugin.m

[FIRApp.configure ()];

Setzen Sie das meiste dieser Methode an die Spitze 

- (BOOL)application:(UIApplication *)application customDidFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
 if(![FIRApp defaultApp]){
    [FIRApp configure];}}
3

Für Swift 4

Hatte das gleiche Problem mit dem Absturz. Beim Versuch, mit einer .plist-Datei von Firebase aus zu referenzieren. 

(Dies hat mein Problem behoben.) 

Versuchen Sie, das außerhalb oder außerhalb der viewDidLoad-Methode zu schreiben:

1. var ref: DatabaseReference!

Verweisen Sie dann innerhalb der viewDidLoad-Methode darauf:

2. Database.database().reference()

Und jetzt ist es:

FirebaseApp.configure()

Stattdessen.