2016-06-02 10 views
4

Wenn ein Leck Verarbeitung, erhalte ich eine java.lang.IllegalStateException: FirebaseApp with name [DEFAULT] doesn't exist. in meinem Application.onCreate. Soweit ich weiß, geschieht dies, weil LeakCanary meine Anwendungsklasse ohne alle Google Play Services-Komponenten erstellt und Firebase nicht erfolgreich initialisiert werden kann. Irgendwelche Ideen, wie das zu beheben ist?Leakcanary Abstürze mit Googles Firebase

Bearbeiten: Ich verwende leakcanary-android:1.4-beta2 und dies geschieht nach dem Dumping der Heap.

+0

Verwenden Sie Firebase Crash Reporting? –

+0

Nein, ich rufe 'FirebaseAuth.getInstance()'. Sollte das wahrscheinlich erwähnt haben. – DariusL

+0

Werfen Sie einen Blick hier: https://groups.google.com/forum/?hl=vi&fromgroups&nomobile=true#!topic/firebase-talk/ZIhO6Wwe1oM –

Antwort

0

Ich glaube, ich habe einen Workaround gefunden. Anstatt das Google Play Services-Plug-in zu verwenden und google-services.json zu konfigurieren, können Sie Firebase in Application.onCreate oder wo auch immer konfigurieren und initialisieren.

@Provides 
@Singleton 
protected FirebaseApp proviceFirebaseApp(Application application) { 
    FirebaseOptions options = new FirebaseOptions.Builder() 
      .setApplicationId(application.getPackageName()) 
      .setDatabaseUrl(BuildConfig.FIREBASE_DATABASE_URL) 
      .setApiKey(BuildConfig.FIREBASE_API_KEY) 
      .build(); 
    return FirebaseApp.initializeApp(application, options); 
} 

Die Schlüssel zu finden war ein bisschen ein Mysterium. Inside google-services.json benötigen Sie die Datenbank-URL, die project_info.firebase_url ist. Wenn Sie mehr als eine Anwendung mit dem Firebase Repo verwenden, gibt es hier mehrere Objekte client.

Wenn Sie Google verwenden Einloggen ist die oauth id innerhalb client[app].oauth_client[1].client_id. Sie können Ihre client nach dem Paketnamen herauszufinden und die oauth_client war das zweite Objekt, das so aussah:

{ 
    "client_id": "asfagasdgdas", 
    "client_type": 3 
} 

Die api Schlüssel ist client[app].api_key, wieder der Client auf Ihrem Paket auf Basis finden.

Verzeihen Sie den Pseudo-JSON.

könnte die Struktur später ändern, ist dies für Play Services Version 9.0.1 geschrieben wurde.

2

Alternativ können Sie die Google Play-Dienste Plugin-Konfiguration lassen wie sie in der Dokumentation vorgeschlagen.

Disable FirebaseInitProvider durch das Hinzufügen dieser zu AndroidManifest.xml

<provider 
    android:name="com.google.firebase.provider.FirebaseInitProvider" 
    android:enabled="false" /> 

Und diese Klasse zu Ihrer Anwendung

FirebaseOptions options = FirebaseOptions.fromResource(this); 
FirebaseApp.initializeApp(this, options); 

Auf diese Weise müssen Sie nicht konfigurieren FirebaseOptions von Hand hinzufügen.

+0

Diese und scheint zu funktionieren ist einfacher als die andere Antwort, danke! – Maragues

+0

Fehler in Manifest erhalten. Das Attribut 'behörden' muss für definiert werden –