2016-06-19 12 views
13

Tôi đang xây dựng ứng dụng iOS đầu tiên của tôi, và tôi đang sử dụng căn cứ hỏa lực để xử lý xác thực, cơ sở dữ liệu, vv Tôi thêm một màn hình đăng ký và sử dụng đoạn mã sau để tạo một người dùng mới:Ứng dụng gặp sự cố khi sử dụng Firebase Auth, lý do: 'Ứng dụng mặc định đã được định cấu hình'.

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

     }) 

Khi người dùng chạm vào nút đăng ký, có một khoảng cách sẽ đưa họ trở lại bộ điều khiển chế độ xem đăng nhập ban đầu. Tuy nhiên, khi tôi chạy ứng dụng, nó treo trên màn hình khởi chạy. Đây là đầu ra trình gỡ lỗi:

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) 

Tôi có thể cung cấp thêm thông tin trợ giúp khi được bắt đầu và tìm hiểu càng nhiều càng tốt. Có một ngày tuyệt vời!

Trả lời

8

Tôi đã viết FIRApp.configure() hai lần, điều đó dường như khắc phục được lỗi.

+0

Tôi đã làm điều tương tự vô tình và nó đã ném cùng một lỗi. Bạn không nên có vấn đề nữa! –

2

Bạn có thể gọi một lần trong phương thức init AppDelegate để định cấu hình.

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

Tôi đang gọi phương thức này trong lớp bàn phím tiện ích của mình nơi tôi không có lớp AppDelegate. vậy tôi nên làm thế nào? –

+0

cố gắng gọi điều này trong chế độ xem bộ điều khiển xemDidLoad của bạn. ghi đè func viewDidLoad() { } –

+1

Nhưng đó là vấn đề, bởi vì nếu tôi thay đổi bàn phím mở rộng của tôi thành bản địa và có nguồn gốc thành phần mở rộng thì nó bị lỗi và ném cùng một lỗi. –

2

chỉ trong trường hợp người khác gặp khó khăn khi gặp sự cố này. khi sử dụng firebase sdk với googleSignIn sdk. bạn chỉ phải định cấu hình chúng một lần. hoặc làm [[GGLContext sharedInstance] configureWithError: &configureError]; hoặc [FIRApp configure]

29

Tôi đã có một vấn đề với một Tin nhắn Extension:

Nếu bạn đang ở một App mở rộng, bạn không có đại biểu, và bạn sẽ phải đặt FIRApp.configure() trong init của ViewController chính của bạn (hoặc trong viewDidLoad như được gợi ý).

Sự cố là: trong Tiện ích tin nhắn, nếu người dùng nhấn một số thư trong chuỗi mở tiện ích mở rộng của bạn, init (hoặc viewdidLoad) sẽ được gọi nhiều lần, do đó bị lỗi do FIRApp.configure() được gọi nhiều lần .. .

các giải pháp tôi tìm thấy là để tạo ra một bool tĩnh trong chính View Controller:

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

và tôi kiểm tra nó trước khi gọi FIRApp.configure() trong init hoặc 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 
    } 

Bằng cách này, không còn nhiều sự cố.


Ồ, tôi tìm thấy một cách nhiều thanh lịch hơn để giải quyết vấn đề ở đây: iOS Extension - Fatal Exception: com.firebase.core Default app has already been configured

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

Không tĩnh hơn theo cách này;)

+1

Điều này thật tuyệt. Sử dụng nó trong một ngữ cảnh mở rộng. –

0

Class Name: appdelegate + FCMPlugin.m

[FIRApp.cấu hình()];

Đặt này ở phía trên cùng nhất của phương pháp này

  • (BOOL) ứng dụng: (UIApplication *) ứng dụng customDidFinishLaunchingWithOptions: (NSDictionary *) launchOptions
0

Đối Swift 4

Có cùng sự cố với sự cố. Khi cố gắng tham chiếu từ Firebase với tệp .plist.

(Điều này cố định vấn đề của tôi.)

Hãy thử viết bên ngoài này hoặc bên trong phương thức viewDidLoad:

1. var ref: DatabaseReference! 

Sau đó tham khảo nó trong các phương pháp viewDidLoad:

2. Database.database().reference() 

Và bây giờ đó là:

FirebaseApp.configure() 

Thay vào đó.

Các vấn đề liên quan