programing

Firebase Auth를 사용할 때 앱이 충돌합니다. 이유: '기본 앱이 이미 구성되었습니다.'

stoneblock 2023. 6. 13. 21:57

Firebase Auth를 사용할 때 앱이 충돌합니다. 이유: '기본 앱이 이미 구성되었습니다.'

저는 첫 번째 iOS 애플리케이션을 구축하고 있으며, Firebase를 사용하여 인증, 데이터베이스 등을 처리하고 있습니다.가입 화면을 추가하고 다음 코드를 사용하여 새 사용자를 만들었습니다.

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

        })

사용자가 등록 버튼을 누르면 원래 로그인 보기 컨트롤러로 되돌아가야 하는 세그가 있습니다.하지만 앱을 실행해보니 실행 화면에 걸려 있습니다.다음은 디버거 출력입니다.

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) 

필요에 따라 추가 정보를 제공할 수 있습니다. 이제 막 시작하고 가능한 한 많은 것을 배우고자 하므로 어떠한 도움/조언도 매우 감사하겠습니다.좋은 하루 되세요!

메시지 확장에 문제가 있습니다.

App Extension에 있는 경우 대리인이 없으며 FIRA App.configure()를 기본 ViewController의 Init(또는 제안된 대로 ViewDidLoad)에 넣어야 합니다.

문제는 Messages Extension에서 사용자가 스레드에서 내선 번호를 여는 여러 메시지를 누르면 init(또는 viewdidLoad)가 여러 번 호출되므로 FIRApp.configure()가 여러 번 호출되어 충돌한다는 것입니다.

제가 찾은 솔루션은 메인 View 컨트롤러에 정적 풀을 생성하는 것이었습니다.

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

그리고 init 또는 viewDidLoad에서 FIRAApp.configure()를 호출하기 전에 테스트합니다.

// 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
    }

이렇게 하면 더 이상 충돌하지 않습니다.


오, 나는 여기서 문제를 해결할 훨씬 더 우아한 방법을 찾았습니다: iOS 확장 - 치명적 예외: com.firebase.core 기본 앱이 이미 구성되어 있습니다.

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

더 이상 정적이 아닙니다;)

나는 썼습니다.FIRApp.configure()두 번, 그것은 오류를 해결하는 것처럼 보였습니다.

이것은 이 문제에 대한 다른 해결책입니다.1/ 아래와 같이 "AppDelegate.swift"를 확인합니다.

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

2/ 위 코드에서 "FirebaseApp.configure()"를 제거합니다.

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

    return true
}

3/ 아래 코드를 "AppDelegate.swift"에 추가합니다.

override init() {
    FirebaseApp.configure()
}

4/ "ViewController.swift"로 이동하여 코드를 추가합니다.

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

5/ 다시 빌드하고 실행하면 작동합니다.감사합니다!

클래스 이름:앱 대표자+FCMPlugin.m

[FIR AP.config()];

이 방법의 대부분을 맨 위에 놓습니다.

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

스위프트 4의 경우,

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

AppDelegate init 메서드에서 한 번 호출하여 구성할 수 있습니다.

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

Scene delegate를 사용하는 경우 iOS 버전(예: 9, 10, 13)이 다르다면 다음과 같은 방법으로 AppDelegate.swift를 호출해야 합니다.

 if #available(iOS 13.0, *) {
 
 } else {
     FirebaseApp.configure()
 }

SceneDelegate.swift에서는 다음과 같이 설명합니다.

 if #available(iOS 13.0, *) {
   FirebaseApp.configure()
 }

이 설정에서는 다음과 같은 오류가 제외됩니다. *

'com' 예외가 발생하여 앱을 종료합니다.화력 기지core', 이유: '기본 앱이 이미 구성되었습니다.'

AppDelegate에서 FirebaseApp.configure()를 이미 초기화했기 때문입니다. 번만 구성하고 오류가 발생하는지 확인하십시오.

다른 사람이 이 문제를 발견할 경우를 대비해서요.사용할 때firebasesdk 및googleSignInsdk. 한 번만 구성하면 됩니다.어느 쪽이든 [[GGLContext sharedInstance] configureWithError: &configureError]; 또는 [FIRApp configure]

여기에 대한 내 코드가 있습니다.AppDelegate.swift

import UIKit
import Flutter
import Firebase

@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
  override func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
  ) -> Bool {
    GeneratedPluginRegistrant.register(with: self)
  FirebaseApp.configure()
    return super.application(application, didFinishLaunchingWithOptions: launchOptions)
  }
}

이것을 제거할 수 있습니다.FirebaseApp.configure()또는 추가

 if #available(iOS 13.0, *) {
 
 } else {
     FirebaseApp.configure()
 }

둘 다 저를 위해 일하고 있습니다.

팀의 누군가가 Firebase IOS 설정 단계를 따라 AppDelegate에 Firebase.configure() 라인을 추가한 것 같습니다. 설정 시 float에 필요하지 않다고 명시하지 않고 신속하고 객관적인-c만 옵션으로 제공하기 때문에 확인에 필요하다고 생각했기 때문에 일부 사람들을 혼란스럽게 할 수 있습니다.

솔루션은 불필요한 줄을 쉽게 제거할 수 있었습니다. , 도와주셔서 감사합니다.

파이어베이스 콘솔 설정에서 새 개발자가 더 명확하게 표시할 것을 권장합니다.

나도 같은 문제가 있었지만, 그것을 해결했습니다.

#1 단계는 제 앱 위임자입니다. 중복될 수도 있다고 생각하지만 작동을 시작했는데 동일한 오류가 발생했습니다.

class AppDelegate: NSObject, UIApplicationDelegate {
    override init() {
       // Firebase Init
       FirebaseApp.configure()
    }
  func application(_ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions:
        [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    FirebaseApp.configure()
    return true
  }
}

사용자 계정을 생성하는 내 swiftui 파일에서 내 기능에 대한 2단계 나는 다음과 같이 Auth.auth() 앞에 'if' 문을 추가합니다.

private func createNewCount(){
    if FirebaseApp.app() == nil {
           FirebaseApp.configure()
       }
    Auth.auth().createUser(withEmail: email, password: password) { result, err in
        if let err = err {
            print("Failed to create user", err)
            return
        }
        print("succesfully created user \(result?.user.uid ?? "")")
    }
    
}

스위프트 4용

충돌할 때도 같은 문제가 있었습니다..plist 파일을 사용하여 Firebase에서 참조하려고 할 때.

(이것이 제 문제를 해결했습니다.)

이를 viewDidLoad 메서드 외부 또는 내부에서 작성해 보십시오.

1. var ref: DatabaseReference!

그런 다음 viewDidLoad 메서드 내에서 이를 참조합니다.

2. Database.database().reference()

이제는 다음과 같습니다.

FirebaseApp.configure()

대신.

언급URL : https://stackoverflow.com/questions/37910766/app-crashing-when-using-firebase-auth-reason-default-app-has-already-been-con