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

问题描述:

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

我在viewDidLoad()方法中运行Fir.configure(),并且有些事件会传递并传递给Firebase。

有人可以帮我解决这个问题..谷歌不够友好。

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

我正在寻找解决方案..

答案是例外。你正在配置应用两次。你有几个选择来解决这个问题:

1)在你的应用程序委托中配置你的应用程序一次。

2)将配置与取消配置相匹配。 FIRApp上有一个方法可以让你取消配置(实际的名字让我感到难过)。

+0

嗯..我结束了使用谷歌分析,因为如果你不配置火力地堡,你崩溃,如果你配置teice你崩溃。 Firebase似乎不支持扩展程序。即使您可以取消配置,问题是您在主应用程序和扩展中取消配置Firebase。这不是真的应该发生或被治疗。 Firebase不可靠。谷歌分析是更好的选择。 PS:我尝试使用plist的数据进行手动配置,但它仍然无法在扩展中使用。当你发布一个版本时,它每次都会崩溃,而在调试时它是50/50 – Stefan

+0

啊,你试图在你的应用和扩展中使用forename?您可以通过为每个FIRApp注册自定义FIRApp来实现该目的,而不是使用默认应用程序。 – Mark

+0

因此,我在控制台中配置了2个应用 - > 2个plists。我尝试配置两个...崩溃..只尝试主..崩溃。试图把自定义名称的扩展..没有加载Firebase。试图输入所有数据到FirOptions ..没有扩展。然后我添加了谷歌分析并删除了Firebase分析 – Stefan

我不知道你是否仍在寻找解决方案,但我有同样的问题,使用Firebase的扩展。

我落得这样做:

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

这将检查,如果应用程序已经配置,使没有崩溃。

+0

问题是我的主要应用程序,我的kb是两个不同的应用程序在Firebase中,并有2个不同的plists。所以这种方法不会有太大的用处,因为两者都将被配置为默认的应用程序,但使用不同的名称。该解决方案可能有效,但我选择与GA保持实时分析和图表。 Firebase尚未准备好。感谢您的迟到回复。 PS:即使这个解决方案工作。我仍然需要来自kb和应用程序的不同数据。所以如果一个人被配置,而另一个不是......那不会帮助我的情况。 – Stefan

+0

这很好。在扩展上下文中使用它。 –

我也在今天的扩展代码中得到了这个问题。我解决了,如果有额外的检查,如果你的火力地堡实例已配置:

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

在你的主应用程序,你也应该使用不同的唯一的叫法。所以你可以有多个实例,但每个实例只配置一次。

我有同样的问题,我在我的应用程序使得在两个地方的变化(检查您的迅速版本语法)解决它:

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

    覆盖的init(){ FirebaseApp.configure() }

  2. 在你ViewController.swift的viewDidLoad()方法,写这样的代码:

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