1

FirebaseAuthとFirebaseクラッシュレポートを使用しようとしたときに発生した例外です。私はまた私のGradleの依存関係は次のようになりますので、クラッシュ報告を使いたいonCreateFirebaseクラッシュレポート:名前が[DEFAULT]のFirebaseAppが存在しません

public class MainApplication extends Application { 

    @Override 
    public void onCreate() { 
     super.onCreate(); 

     FirebaseAuth firebaseAuth = FirebaseAuth.getInstance(); 
     firebaseAuth.signInAnonymously().addOnCompleteListener(task -> { 
      if (task.isSuccessful()) { 
       Log.wtf("TAG", "Signed signInAnonymously successful "); 
      } 
     }); 
    } 
} 

自分のアプリケーションに匿名でサインインしようとしています。

dependencies { 
    // other dependencies 
    // ... 

    compile 'com.google.firebase:firebase-core:9.2.1' 
    compile 'com.google.firebase:firebase-storage:9.2.1' 
    compile 'com.google.firebase:firebase-auth:9.2.1' 
    compile 'com.google.firebase:firebase-config:9.2.1' 
    compile 'com.google.firebase:firebase-crash:9.2.1' 
} 

apply plugin: 'com.google.gms.google-services' 

一定の時間が経過すると、クラッシュダイアログとこの例外が発生します。その別のプロセスがクラッシュするので、アプリ自体はまだ実行されます。

java.lang.RuntimeException: Unable to create application com.android.tools.fd.runtime.BootstrapApplication: java.lang.IllegalStateException: FirebaseApp with name [DEFAULT] doesn't exist. 
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4612) 
    at android.app.ActivityThread.access$1600(ActivityThread.java:169) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1337) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:136) 
    at android.app.ActivityThread.main(ActivityThread.java:5476) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:515) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084) 
    at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.IllegalStateException: FirebaseApp with name [DEFAULT] doesn't exist. 
    at com.google.firebase.FirebaseApp.getInstance(Unknown Source) 
    at com.google.firebase.FirebaseApp.getInstance(Unknown Source) 
    at com.google.firebase.auth.FirebaseAuth.getInstance(Unknown Source) 
    at com.redstar.collectors.MainApplication.onCreate(MainApplication.java:22) 
    at com.android.tools.fd.runtime.BootstrapApplication.onCreate(BootstrapApplication.java:369) 
    at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1013) 
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4609) 
    at android.app.ActivityThread.access$1600(ActivityThread.java:169)  
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1337)  
    at android.os.Handler.dispatchMessage(Handler.java:102)  
    at android.os.Looper.loop(Looper.java:136)  
    at android.app.ActivityThread.main(ActivityThread.java:5476)  
    at java.lang.reflect.Method.invokeNative(Native Method)  
    at java.lang.reflect.Method.invoke(Method.java:515)  
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268)  
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)  
    at dalvik.system.NativeStart.main(Native Method) 

firebase-crash依存関係を削除しても、クラッシュは発生しません。

+1

これは、初期化コードとFirebaseの自動初期化コードの競合状態です。初期化をメインアクティビティ(後で実行される場所)に移動するか、コンテンツプロバイダ(初期に実行される場所)に移動することをお勧めします。 –

答えて

2

FirebaseApp with name [DEFAULT] doesn't existは、カスタムApplicationクラスがアプリケーションの各プロセスに対して作成されるため、Firebaseクラッシュレポートによって作成された別のプロセスでFirebaseコードを実行するときに発生します。

コードをApplicationクラスから別の場所に移動する必要があります。これはあなたの主な活動(あなたのメインプロセスに常に存在する)にあるかもしれないし、ContentProvideronCreate()があなたのアプリケーションのプロセスのライフサイクルの中で一度実行されるマニフエストに登録する別のContentProvideronCreate()にあるかもしれませんApplication.onCreate()ですが、1つのプロセスでのみ実行されます)。

+1

答えをありがとう。私が主な活動にコードを載せている問題は、私の主な活動が毎回開始されることが保証されていないことです。例えば、私がシェアインテントから立ち上げると、私は主な活動を開始しません。だから私は重複したコードやベースアクティビティを持つことができた。コンテンツプロバイダは、実際には何のコンテンツも提供しないImのように奇妙に思える。たぶん注入は行く方法ですか? – Eoin

+0

もちろん、ContentProviderのアプローチの奇妙な感触に完全に同意します。クラス内で静的メソッドとしてコードを使用し、準備が整っていることを確認する必要がある各コンポーネントからコードを呼び出すことができます。静的ブール値は、既に設定を完了している場合は、プロセス初期化。 – ianhanniballake

+0

それについては、おそらくそれは最善の方法です。ありがとう。 Firebaseのクラッシュレポートを別のプロセスで実行することが本当に必要なのでしょうか? – Eoin

関連する問題