web-dev-qa-db-fra.com

L'application se bloque lors de l'utilisation de Firebase Auth, raison: 'L'application par défaut a déjà été configurée.'

Je construis ma première application iOS et j'utilise Firebase pour gérer l'authentification, la base de données, etc. J'ai ajouté un écran d'inscription et utilisé le code suivant pour créer un nouvel utilisateur: 

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

        })

Lorsque l'utilisateur appuie sur le bouton d'inscription, il se produit une séquence qui doit le ramener au contrôleur de vue de connexion d'origine. Cependant, lorsque je dois exécuter l'application, celle-ci se bloque sur l'écran de lancement. Voici la sortie du débogueur:

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) 

Je peux fournir des informations supplémentaires si nécessaire. Toute aide/conseil serait grandement apprécié, car je commence tout juste et cherche à en apprendre le plus possible. Passez une bonne journée! 

26
Brenden Belluardo

J'ai eu un problème avec l'extension Messages:

Si vous êtes dans une App Extension, vous n'avez pas de délégué et vous devez mettre FIRApp.configure () dans l'init de votre ViewController principal (ou dans le viewDidLoad comme suggéré).

Le problème est le suivant: dans une extension de messages, si l'utilisateur appuie sur plusieurs messages du fil ouvrant votre extension, init (ou viewdidLoad) sera appelé plusieurs fois.

La solution que j'ai trouvée consistait à créer un booléen statique dans le View Controller principal:

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

et je le teste avant d'appeler FIRApp.configure () dans init ou 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
    }

De cette façon, plus de crash.


Oh, j'ai trouvé un moyen beaucoup plus élégant de résoudre le problème ici: Extension iOS - Fatal Exception: com.firebase.core L'application par défaut a déjà été configurée

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

Pas plus statique de cette façon;)

41

J'ai écrit FIRApp.configure() deux fois, cela semblait corriger l'erreur.

18
Brenden Belluardo

Ceci est une autre solution à ce problème . 1/Vérifiez dans le "AppDelegate.Swift" nous verrons comme ci-dessous

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

2/Supprimez "FirebaseApp.configure ()" du code ci-dessus dans

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

    return true
}

3/Ajouter le code ci-dessous dans "AppDelegate.Swift"

override init() {
    FirebaseApp.configure()
}

4/Allez dans "ViewController.Swift" et ajoutez le code

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

5/Construisez à nouveau et lancez ça fonctionnera. Merci!

6
Khoem Vichet

Vous pouvez appeler une fois dans la méthode AppDelegate init pour configurer.

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

juste au cas où quelqu'un d’autre trébucherait sur ce problème… .. quand utiliser firebase sdk avec googleSignIn sdk. il suffit de les configurer une fois. soit faire [[GGLContext sharedInstance] configureWithError: &configureError]; ou [FIRApp configure]

3
Ian Zhao

Nom de classe: AppDelegate + FCMPlugin.m

[FIRApp.configure ()];

Mettez ceci en haut de cette méthode 

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

Pour Swift 4

Avait le même problème avec crash. Lorsque vous essayez de faire référence à Firebase avec un fichier .plist. 

(Cela a résolu mon problème.) 

Essayez d'écrire ceci en dehors de ou dans la méthode viewDidLoad:

1. var ref: DatabaseReference!

Ensuite, référencez-le dans la méthode viewDidLoad:

2. Database.database().reference()

Et maintenant c'est:

FirebaseApp.configure()

Au lieu.

0