Nach der Migration zu Firebase Cloud Messaging. Beim Öffnen meiner App stürzt sie ab und wirft einen Fehler mit der Aufforderung Java.lang.IllegalStateException: FirebaseApp with name [DEFAULT] doesn't exist.
ab. Ich habe bereits meine neue google-services.json installiert und mein SDK aktualisiert.
Hier ist meine 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());
}
}
Bitte überprüfen Sie noch einmal, Sie haben hinzugefügt
apply plugin: 'com.google.gms.google-services'
am Ende der Gradle-Datei der App und bereinigen und erstellen Sie das Projekt neu
Nicht sicher, ob es hier relevant ist. Es gibt jedoch ein anderes Szenario, in dem dieser Absturz auftreten kann.
Wenn Ihre App über einen Service verfügt (mit einem anderen Prozess) und Sie eine eigene Application
-Klasse erstellen, verwenden der Service und die Vordergrund-App zur Initialisierung dieselbe Application-Klasse ( nicht dieselbe Instanz ). Wenn ich jetzt com.google.firebase:firebase-crash
-Abhängigkeit für die Behandlung von Abstürzen verwende, wird ein Hintergrunddienst your.app.packagename:background_crash
erstellt. Aus irgendeinem Grund führte dies zu Abstürzen in meiner App. Insbesondere weil ich in meiner Application-Klasse einen Anruf tätigte,
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
Ich gehe davon aus, dass der Hintergrunddienst beim Einstieg in unsere Application-Klasse irgendwie Firebase nicht initialisiert wird. Um das zu beheben, tat ich es
if (!FirebaseApp.getApps(this).isEmpty())
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
Ich hatte ein ähnliches Problem, und für mich war es ein Fehler/ein Problem mit der manifesten Fusion. Ich habe herausgefunden, dass FirebaseInitProvider
aufgrund tools:node="replace"
in der Manifestdatei meiner App nicht in die endgültige Manifestdatei eingefügt wurde. Versuchen Sie also, dieses XML-Tag zu entfernen, und FirebaseInitProvider
wird injiziert, und Firebase kann ordnungsgemäß initialisiert werden.
Antwort von @jmodrako hat mein Problem gelöst ... tools:node="replace"
an tools:node="merge"
Erklärt ... in AndroidManifest.xml
Von
<application
...
tools:node="replace">
An
<application
...
tools:node="merge">
Probleme mit Bibliotheksthemen zusammenführen? Probleme mit tools:replace="Android:theme"
behoben
Kredite an https://stackoverflow.com/a/38060272/2765087
build.gradle -Datei:
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 -Datei:
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'
Verschieben Sie Ihre Firebase-Initialisierung innerhalb der onCreate of Application-Klasse. Wenn Sie die Offline-Persistenz aktiviert haben, sollte FirebaseDatabase.getInstance (). SetPersistenceEnabled (true) vor allen anderen Initialisierungen stehen.
Ändern Sie die Build-Aktion (GoogleServicesJson) in den Dateinamen Google-Services.Json.
In Ihrer Abhängigkeit fügen Sie einfach Folgendes hinzu:
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'
}
bewerben plugin: 'com.google.gms.google-services'
Android Studio
Funktioniert für mich ok.
In meinem Fall, dass ich Firebase beim Start der App nicht initialisiert habe, musste ich Folgendes tun, um das Problem zu beheben
@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);
}
}
Registrieren Sie Ihre Anwendung in Firebase und kopieren Sie die Datei google-services.json in Ihr Stammprojekt.
Wenden Sie classpath 'com.google.gms:google-services:3.1.0
auf Ihr root build.gradle an.
Übernehmen Sie apply plugin: 'com.google.gms.google-services
für Ihr Projekt.