FirebaseApp з іменем [DEFAULT] не існує


81

Після переходу до Firebase Cloud Messaging. При відкритті мого додатка він аварійно завершує роботу та видає помилку із повідомленням, що java.lang.IllegalStateException: FirebaseApp with name [DEFAULT] doesn't exist.я вже помістив свій новий google-services.json та оновив свій SDK.

Ось моя MainActivity

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

//Check Google play service
    GoogleApiAvailability googleAPI = GoogleApiAvailability.getInstance();
    int resultCode = googleAPI.isGooglePlayServicesAvailable(this);

    if (resultCode != ConnectionResult.SUCCESS) {
        if (GooglePlayServicesUtil.isUserRecoverableError(resultCode)) {
            GooglePlayServicesUtil.getErrorDialog(resultCode, this,
                    PLAY_SERVICES_RESOLUTION_REQUEST).show();
        } else {
            Log.e(LOG_TAG, "This device is not supported.");
            finish();
        }
    }

    Log.i(TAG, "InstanceID token: " + FirebaseInstanceId.getInstance().getToken());

}
}

Відповіді:


110

Будь ласка, перевірте, додали ви

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

унизу файлу gradle програми, а потім очистіть і відновіть проект


Я видалив apply plugin: 'com.google.gms.google-services' з мого програми Gradle але виникає нова помилка при виклику FirebaseInstanceId.getInstance().getToken()в моєму MainActivityмоє додаток аварій.
нацумію

1
мій поганий ... мені потрібно було додати apply plugin: 'com.google.gms.google-services' ? намагаючись додати його, я все ще маю помилку. там сказаноDidn't find class "com.google.android.gms.dynamite.descriptors.com.google.firebase.auth.ModuleDescriptor"
нацумію

Привіт, Морі, ти можеш ігнорувати цю помилку і вони вирішать цю проблему в наступному випуску. ось що каже команда Firebase :).
Венкатесан

Коли я додаю це, я отримую: "Помилка: Помилка виконання для завдання ': app: mergeModernDebugResources'.> [Рядок / google_api_key] /<path>/app/src/main/res/values/defaults.xml [рядок / google_api_key] / <path> /app/build/generated/res/google-services/modern/debug/values/values.xml: Помилка: Повторювані ресурси "Я також не бачив цього кроку в посібниках з налаштування або міграції для FCM. У вас є посилання, яке я, можливо, пропустив?
C Nick

1
Флаттер також може вимагати, flutter clean & flutter runяк пропонується у відповіді.
Nae

21

Не впевнений, чи це тут доречно. Але є інший сценарій, коли ця аварія може статися.


Якщо у вашому додатку є служба (з іншим процесом), і ви створюєте власний Applicationклас, служба та програма переднього плану використовуватимуть той самий клас програми ( не той самий екземпляр ) для ініціалізації. Тепер, коли я використовую com.google.firebase:firebase-crashзалежність для обробки збоїв, це створює фонову службу your.app.packagename:background_crash. З якоїсь причини це спричинило збій у моєму додатку. Зокрема, оскільки у своєму класі Application я робив такий дзвінок,

FirebaseDatabase.getInstance().setPersistenceEnabled(true);

Я припускаю, що фонова служба при запуску з нашим класом Application якось Firebase не ініціалізується. Щоб це виправити, я це зробив

if (!FirebaseApp.getApps(this).isEmpty())
        FirebaseDatabase.getInstance().setPersistenceEnabled(true);

Це також трапляється з рекламою. Якщо користувач натискає оголошення, він повертається до програми Firebase і вже не доступний.
theJosh

@Codevalley, У моєму випадку був інший процес (Adobe Creative SDK Image Editor), який називався app: editor. Він використовував той самий клас програми, намагаючись таким чином отримати токен з неіснуючої програми firebase. Перевірка перед тим, як отримати токен, вирішила мою проблему. Дуже дякую! :)
rzaaeeff

12

У мене була подібна проблема, і для мене це була помилка / проблема з явним злиттям. Я з’ясував, що FirebaseInitProviderйого не було додано до остаточного файла маніфесту через файл маніфесту tools:node="replace"мого додатка. Отже, спробуйте видалити цей тег xml, і FirebaseInitProviderйого буде введено, і Firebase можна правильно ініціалізувати.


чи можете ви оновити свою відповідь для тих, хто мало знайомий з інструментом злиття @jmodrako
Killer

На даний момент я оновив інструменти: replace = "android: name" замість tools: node = "replace". сподіваюся, що допоможе
Вбивця

11

файл build.gradle:

buildscript {
    repositories {
        jcenter()
        mavenLocal()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.1.2'
        classpath 'com.google.gms:google-services:3.0.0'
    }
}

allprojects {
    repositories {
        jcenter()
        mavenLocal()
    }
}

Файл \ app \ build.gradle:

apply plugin: 'com.android.application'

android {
    ..
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    ..
    compile 'com.google.firebase:firebase-core:9.0.2'
    compile 'com.google.firebase:firebase-messaging:9.0.2'
}

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

Помилка: (90, 0) Плагін з ідентифікатором 'com.google.gms.google-services' не знайдено.
Gilberto Ibarra

10

Відповідь @jmodrako вирішила мою проблему ... tools:node="replace"доtools:node="merge"

Пояснено ... на AndroidManifest.xml

Від

<application
...
tools:node="replace">

До

<application
...
tools:node="merge">

Об’єднати проблеми з темами бібліотеки? Проблеми побудови, вирішені за допомогоюtools:replace="android:theme"

Кредити на https://stackoverflow.com/a/38060272/2765087


2

Перемістіть свою ініціалізацію Firebase всередину класу onCreate програми. Крім того, якщо ви ввімкнули збереження в автономному режимі, FirebaseDatabase.getInstance (). SetPersistenceEnabled (true) має стояти перед будь-якими іншими ініціалізаціями.


випадково натиснув голос, тому не дозволив мені проголосувати :(
Developine

2

Перевірте всі конфігурації, як показано нижче:

Налаштування проекту 1-firebase: правильний google-services.json? введіть тут опис зображення

2 - додати Firebase SDK введіть тут опис зображення

3- очистити - відновити свій проект

сподіваємось, це допомагає!


2

Додайте наступний рядок до app / build.gradle

apply plugin: 'com.google.gms.google-services'  // Google Services plugin

І наступний рядок до проекту build.gradle

classpath 'com.google.gms:google-services:4.3.3'

0

Android Studio

  1. застосувати плагін: 'com.google.gms.google-services' (build.gradle - рівень модуля)
  2. Меню ~> Збірка ~> CleanProject

Працює для мене добре.


0

Зареєструйте свою програму у Firebase і скопіюйте google-services.json у свій кореневий проект.

Застосуйте classpath 'com.google.gms:google-services:3.1.0до вас root build.gradle.

Подайте заявку apply plugin: 'com.google.gms.google-servicesна свій проект gradle.


0

У вашій залежності просто додайте:

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
...
compile 'com.google.firebase:firebase-core:9.0.2'
compile 'com.google.firebase:firebase-messaging:9.0.2'
}

подати заявку plugin: 'com.google.gms.google-services'



0

У моєму випадку я не ініціалізував Firebase під час запуску програми, мені довелося зробити наступне, щоб його вирішити

@Service
public class FirebaseSetup implements CommandLineRunner {
    public void run(String... args) throws Exception {
        initializeFirebase();
    }
    private void initializeFirebase() throws FileNotFoundException, IOException {
        FileInputStream serviceAccount = new FileInputStream(ResourceUtils.getFile("classpath:ssf1-v1-firebase-adminsdk-zr72u-afcb5bc13b.json"));
        FirebaseOptions options = new FirebaseOptions.Builder().setCredentials(GoogleCredentials.fromStream(serviceAccount)).build();
        FirebaseApp.initializeApp(options);
    }
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.