FirebaseApp o nazwie [DEFAULT] nie istnieje

81

Po migracji do Firebase Cloud Messaging.Podczas otwierania mojej aplikacji ulega awarii i wyświetla błąd informujący, java.lang.IllegalStateException: FirebaseApp with name [DEFAULT] doesn't exist.że umieściłem już mój nowy plik google-services.json i zaktualizowałem SDK.

Oto moja 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());

}
}
natsumiyu
źródło

Odpowiedzi:

110

Sprawdź dokładnie, dodałeś

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

na dole pliku gradle aplikacji, a następnie wyczyść i odbuduj projekt

Venkatesan
źródło
Usunąłem apply plugin: 'com.google.gms.google-services' z mojego app Gradle jednak napotkać nowy błąd podczas wywoływania FirebaseInstanceId.getInstance().getToken()w moim MainActivitymoich awarii aplikacji.
natsumiyu
1
mój zły ... musiałem dodać apply plugin: 'com.google.gms.google-services' ? próbując go dodać, nadal napotykam błąd. mówiDidn't find class "com.google.android.gms.dynamite.descriptors.com.google.firebase.auth.ModuleDescriptor"
natsumiyu
Cześć Mori, od teraz możesz zignorować ten błąd i naprawią ten problem w następnej wersji. tak mówi zespół firebase :).
Venkatesan
Kiedy to dodam, otrzymuję: „Błąd: nie powiodło się wykonanie zadania ': app: mergeModernDebugResources'.> [String / google_api_key] /<path>/app/src/main/res/values/defaults.xml [string / google_api_key] / <ścieżka> /app/build/generated/res/google-services/modern/debug/values/values.xml: Błąd: zduplikowane zasoby „Również nie widziałem tego kroku w przewodnikach konfiguracji lub migracji dla FCM. Czy masz link, który mogłem przegapić?
C Nick
1
Flutter może wymagać, flutter clean & flutter runjak sugerowano w odpowiedzi.
Nae
21

Nie jestem pewien, czy ma to znaczenie tutaj. Ale jest inny scenariusz, w którym może się zdarzyć ta awaria.


Jeśli Twoja aplikacja ma usługę (z innym procesem) i tworzysz własną Applicationklasę, usługa i aplikacja pierwszego planu będą używać tej samej klasy Application ( nie tego samego wystąpienia ) do zainicjowania. Teraz, gdy używam com.google.firebase:firebase-crashzależności do obsługi awarii, tworzy usługę w tle your.app.packagename:background_crash. Z jakiegoś powodu powodowało to awarie mojej aplikacji. W szczególności, ponieważ w mojej klasie Application wykonywałem połączenie typu:

FirebaseDatabase.getInstance().setPersistenceEnabled(true);

Zakładam, że usługa w tle podczas inicjowania z naszą klasą Application, w jakiś sposób Firebase nie jest inicjowana. Aby to naprawić, zrobiłem

if (!FirebaseApp.getApps(this).isEmpty())
        FirebaseDatabase.getInstance().setPersistenceEnabled(true);
Codevalley
źródło
Dzieje się tak również w przypadku reklam. Jeśli użytkownik kliknie reklamę, wróci do aplikacji Firebase, która nie jest już dostępna.
theJosh
@Codevalley, W moim przypadku był inny proces (Adobe Creative SDK Image Editor) o nazwie app: editor. Używał tej samej klasy aplikacji, próbując w ten sposób uzyskać token z nieistniejącej aplikacji Firebase. Sprawdzenie przed otrzymaniem tokena rozwiązało mój problem. Dziękuję bardzo! :)
rzaaeeff
12

Miałem podobny problem i dla mnie był to błąd / problem z manifestacją fuzji. Dowiedziałem się, że FirebaseInitProvidernie został wprowadzony do ostatecznego pliku manifestu z powodu pliku manifestu tools:node="replace"mojej aplikacji. Spróbuj więc usunąć ten tag xml, a FirebaseInitProviderzostanie on wstawiony, a Firebase będzie można poprawnie zainicjować.

jmodrako
źródło
czy możesz zaktualizować swoją odpowiedź dla tych, którzy nie są zbyt zaznajomieni z narzędziem do połączeń @jmodrako
Killer
Obecnie zaktualizowałem do tools: replace = "android: name" zamiast tools: node = "replace". mam nadzieję, że pomoże
Killer
11

plik 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()
    }
}

Plik \ 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'
elron smith
źródło
Błąd: (90, 0) nie znaleziono wtyczki o identyfikatorze „com.google.gms.google-services”.
Gilberto Ibarra
10

@jmodrako odpowiedź rozwiązała mój problem ... tools:node="replace"dotools:node="merge"

Wyjaśniono ... na AndroidManifest.xml

Od

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

Do

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

Połączyć problemy z motywami biblioteki? Twórz problemy rozwiązane za pomocątools:replace="android:theme"

Kredyty na https://stackoverflow.com/a/38060272/2765087

Carlos Eduardo Liedtke Borges
źródło
2

Przenieś inicjalizację firebase do klasy onCreate of Application. Jeśli włączyłeś utrwalanie w trybie offline, FirebaseDatabase.getInstance (). SetPersistenceEnabled (true) powinno nastąpić przed innymi inicjalizacjami.

Ramya Ramesh
źródło
kliknąłem teraz głosowanie przypadkowo, więc nie pozwalając mi głosować za :(
Developine
2

Sprawdź wszystkie konfiguracje, jak poniżej:

Ustawienie projektu 1-firebase: google-services.json jest poprawne? wprowadź opis obrazu tutaj

2- Dodaj pakiet SDK Firebase wprowadź opis obrazu tutaj

3- Clean - przebuduj swój projekt

miejmy nadzieję, że to pomoże!

Pan specjalny
źródło
2

Dodaj następujący wiersz do pliku app / build.gradle

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

I następujący wiersz do projektu build.gradle

classpath 'com.google.gms:google-services:4.3.3'
user1188867
źródło
0

Android Studio

  1. zastosuj wtyczkę: „com.google.gms.google-services” (build.gradle - warstwa modułu)
  2. Menu ~> Build ~> CleanProject

U mnie działa dobrze.

Maxim Firsoff
źródło
0

Zarejestruj swoją aplikację w Firebase i skopiuj google-services.json do swojego projektu głównego.

Zastosuj classpath 'com.google.gms:google-services:3.1.0do użytkownika root build.gradle.

Zastosuj apply plugin: 'com.google.gms.google-servicesdo oceny swojego projektu.

pRaNaY
źródło
0

W swojej zależności po prostu dodaj:

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'
}

zastosować plugin: 'com.google.gms.google-services'

pavel
źródło
0

Zmień akcję kompilacji (GoogleServicesJson) na nazwę pliku Google-Services.Json.

Abdul basha
źródło
0

W moim przypadku nie inicjowałem Firebase podczas uruchamiania aplikacji, musiałem wykonać następujące czynności, aby rozwiązać problem

@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);
    }
}
Anand Rockzz
źródło