1

Это исключение, с которым я столкнулся при попытке использования FirebaseAuth и Firebase Crash Reporting. Я пытаюсь войти в систему анонимно в моем приложении onCreateОтчет о сбоях Firebase: FirebaseApp с именем [DEFAULT] не существует

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 "); 
      } 
     }); 
    } 
} 

Я также хочу использовать аварии отчетности так мои Gradle зависимостей выглядит следующим образом.

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) 

Если я удалю зависимость от аварийной базы, авария не будет.

+1

Это условие гонки между кодом инициализации и кодом автоинициализации в Firebase. Вы захотите перенести инициализацию в свою основную деятельность (где она будет работать позже) или предпочтительно в провайдер контента (где она выполняется раньше). –

ответ

2

FirebaseApp with name [DEFAULT] doesn't exist возникает при запуске кода Firebase в отдельном процессе, создаваемом Firebase Crash Reporting, поскольку ваш собственный класс Application создается для каждого процесса в вашем приложении.

Вы должны переместить код из своего класса Application в другое место. Это может быть в вашей основной деятельности (которая всегда будет в вашем основном процессе) или может находиться в onCreate() отдельного ContentProvider, который вы регистрируете в вашем манифесте (ContentProvideronCreate() запускается один раз в жизненном цикле процесса вашего приложения так же, как Application.onCreate(), но работает только в одном процессе).

+1

Спасибо за ответ. Проблема, с которой я сталкиваюсь с помещением кода в свой основной вид деятельности, - это не моя основная деятельность, которую нельзя запускать каждый раз. Например, я не буду открывать свою основную деятельность, если я начну с намерения поделиться. Таким образом, я мог бы иметь дублированный код или базовую активность, оба из которых скорее не идентичны. Поставщик контента кажется странным, поскольку Im фактически не собирается предоставлять какой-либо контент. Может быть, инъекция - это путь? – Eoin

+0

Да, полностью согласен с нечетным чувством подхода ContentProvider. Вы можете определенно иметь код как статический метод в классе и вызывать его от каждого компонента, где вам нужно убедиться, что он готов - статическое логическое значение, если вы уже выполнили настройку, убедитесь, что оно выполняется только один раз за инициализация процесса. – ianhanniballake

+0

Хорошо, может быть, это лучший способ обойти это. Благодарю. Как сторона, действительно ли необходимо запускать отчеты о сбоях Firebase в отдельном процессе? – Eoin

Смежные вопросы