【问题标题】:iOS Extension - Fatal Exception: com.firebase.core Default app has already been configurediOS 扩展 - 致命异常:com.firebase.core 默认应用已配置
【发布时间】:2016-11-26 22:28:39
【问题描述】:

iOS 扩展 - 致命异常:com.firebase.core 默认应用已配置。

我在 viewDidLoad() 方法中运行 Fir.configure(),一些事件通过并到达 Firebase。

谁能帮我解决这个问题。Google 不够友好。

PS:是的,我在 Firebase 控制台中创建了第二个 .plist 和第二个应用程序。 PPS:是的,我为每个 GoogleServices plist 选择了正确的目标

我正在寻找解决方案..

【问题讨论】:

    标签: ios swift firebase ios-app-extension


    【解决方案1】:

    我不知道您是否仍在寻找解决方案,但我遇到了同样的问题,使用带有扩展的 firebase。

    我最终这样做了:

    if(FIRApp.defaultApp() == nil){
        FIRApp.configure()
    }
    

    这将检查应用程序是否已配置,以免发生崩溃。

    【讨论】:

    • 问题是我的主应用程序和我的 kb 是 Firebase 中的两个不同应用程序,并且有 2 个不同的 plist。所以这种方法用处不大,因为两者都将被配置为默认应用程序,但名称不同。该解决方案可能有效,但我选择继续使用 GA 进行实时分析和图表。 Firebase 还没有准备好。感谢您迟到的回复。 PS:即使这个解决方案有效。我仍然需要来自 kb 和应用程序的不同数据。因此,如果一个已配置而另一个未配置.. 那将无助于我的情况。
    • 这很好。在扩展上下文中使用它。
    • 这为我指明了我的解决方案。我忘记了我已经从 AppDelegate 的didFinishLaunchingWIthOptions 中调用了FIRApp.configure()
    【解决方案2】:

    我遇到了同样的问题,我通过在我的应用程序中的两个位置进行更改来解决它(检查您的语法以获取 swift 版本):

    1. 在 AppDelegate.swift 中重写以下方法:

      覆盖初始化() { FirebaseApp.configure() }

    2. 在您的 ViewController.swift 的 viewDidLoad() 方法中,编写以下代码:

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

    【讨论】:

    • 我也需要这个,因为:FirebaseCore.FirebaseApp:12:21: note: 'defaultApp()' was obsoleted in Swift 3
    【解决方案3】:

    将其用于最新的 firebase_ml_vision:^0.9.3+8

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

    【讨论】:

      【解决方案4】:

      答案在例外中。您正在配置应用程序两次。您有几个选项可以解决此问题:

      1) 在您的应用委托中配置您的应用一次。

      2) 将配置与取消配置匹配。 FIRApp 上有一个方法可以让你取消配置它(我不知道实际的名字)。

      【讨论】:

      • 嗯.. 我最终使用了谷歌分析,因为如果你不配置 Firebase,你会崩溃,如果你配置 teice,你会崩溃。 Firebase 似乎不支持扩展。即使您可以取消配置,问题是您在主应用程序和扩展程序中取消配置 Firebase。这实际上不应该发生或被治疗。 Firebase 不可靠。谷歌分析是更好的选择。 PS:我尝试使用来自 plist 的数据手动配置,但它仍然无法在扩展中工作。当您为发布构建构建时,它每次都会崩溃,而在调试时它是 50/50
      • 啊,你试图在你的应用程序和扩展程序中使用名字?您可以通过为每个应用注册自定义 FIRApp 来实现这一点,而不是使用默认应用。
      • 所以我首先在控制台中配置了 2 个应用程序 -> 2 个 plist。我尝试配置两者...崩溃..仅尝试主要..崩溃。试图为扩展名添加自定义名称..没有加载firebase。尝试将所有数据输入 FirOptions .. 在扩展中不起作用。然后我添加了 Google 分析并删除了 Firebase 分析
      • 啊,真不幸。至少你还有一个选择。
      • + Google 分析是实时的,并且比 Firebase 更擅长显示图表
      【解决方案5】:

      我也在今天的扩展代码中遇到了这个问题。如果您的 Firebase 实例已配置,我通过额外检查解决了:

      // define in your constants or somewhere
      NSString* const UNIQUE_FIREBASE_INSTANCE_IDENTIFIER_WIDGET = @"Widget_FirebaseAppInstance";
      
      if([FIRApp appNamed:UNIQUE_FIREBASE_INSTANCE_IDENTIFIER_WIDGET] == nil) // there should be only one app instance!
      {
          NSString *resourceName = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"FirebaseResource"];
          NSString *filePath = [[NSBundle mainBundle] pathForResource:resourceName ofType:@"plist"];
          FIROptions *options = [[FIROptions alloc] initWithContentsOfFile:filePath];
          [FIRApp configureWithName:UNIQUE_FIREBASE_INSTANCE_IDENTIFIER_WIDGET options:options];
      }
      

      在您的主应用程序中,您还应该为其使用不同的唯一名称。所以你可以有多个实例,但每个实例只配置一次。

      【讨论】:

      • 奇怪的是,即使我使用[FIRApp configure],我仍然会收到一条日志消息,指出尚未配置 Firebase 应用程序。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-15
      • 1970-01-01
      • 2023-01-23
      • 1970-01-01
      • 2022-12-04
      • 2017-05-21
      相关资源
      最近更新 更多