2016-06-02 3 views
4

При обработке утечки я получаю java.lang.IllegalStateException: FirebaseApp with name [DEFAULT] doesn't exist. внутри своего Application.onCreate. Насколько я понимаю, это происходит потому, что LeakCanary создает класс приложения без всех сервисов Google Play Services, и Firebase не может успешно инициализироваться. Любые идеи, как это исправить?Утечка от утечки с помощью Firebase от Google

Редактировать: Я использую leakcanary-android:1.4-beta2, и это происходит после сброса кучи.

+0

Вы используете Firebase Crash Reporting? –

+0

Нет, я называю 'FirebaseAuth.getInstance()'. Должно быть, это было сказано. – DariusL

+0

Посмотрите здесь: https://groups.google.com/forum/?hl=vi&fromgroups&nomobile=true#!topic/firebase-talk/ZIhO6Wwe1oM –

ответ

0

Я считаю, что нашел обходное решение. Вместо использования плагина Google Play Services и google-services.json вы можете настроить и инициализировать Firebase самостоятельно в Application.onCreate или где угодно.

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

Поиск ключей был загадкой. Внутри google-services.json вам понадобится URL-адрес базы данных, который равен project_info.firebase_url. Если у вас более одного приложения, использующего репозиторий Firebase, здесь будет несколько объектов client.

Если вы используете Google Sign In, идентификатор oauth находится внутри client[app].oauth_client[1].client_id. Вы можете выяснить ваш client по имени пакета и oauth_client был второй объект, который выглядел следующим образом:

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

Ключ АФИ client[app].api_key, снова найти клиента на основе пакета.

Простите псевдо-json.

Структура может измениться позже, это было написано для Play Services версии 9.0.1.

2

В качестве альтернативы вы можете оставить конфигурацию плагина служб Google Play, как указано в документации.

Отключить FirebaseInitProvider, добавив в AndroidManifest.xml

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

и добавить в класс Application

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

Таким образом, вам не придется настраивать FirebaseOptions вручную.

+0

Это похоже на работу и проще, чем на другой ответ, спасибо! – Maragues

+0

Получение ошибки в манифесте. атрибут полномочий должен быть определен для