Après la migration vers Firebase Cloud Messaging.Lorsque mon application est ouverte, une erreur s'est produite, indiquant que Java.lang.IllegalStateException: FirebaseApp with name [DEFAULT] doesn't exist.
, j'ai déjà mis mon nouveau fichier google-services.json et mis à jour mon SDK.
Voici mon activité principale
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());
}
}
S'il vous plaît faire une double vérification, vous avez ajouté
apply plugin: 'com.google.gms.google-services'
au bas du fichier de classement de l'application, puis nettoyez et reconstruisez le projet
Pas sûr, si c'est pertinent ici. Mais il y a un autre scénario où ce crash peut arriver.
Si votre application dispose d'un service (avec un processus différent) et que vous créez votre propre classe Application
, le service et l'application au premier plan utiliseront la même classe Application ( pas la même instance ) pour s'initialiser. Désormais, lorsque j'utilise la dépendance com.google.firebase:firebase-crash
pour gérer les blocages, un service d'arrière-plan your.app.packagename:background_crash
est créé. Pour une raison quelconque, cela provoquait des accidents sur mon application. Plus précisément, parce que dans ma classe d’application, je passais un appel comme,
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
Je suppose que le service d'arrière-plan lors de l'initialisation avec notre classe Application, d'une manière ou d'une autre, Firebase n'est pas initialisé. Pour résoudre ce problème, j'ai
if (!FirebaseApp.getApps(this).isEmpty())
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
J'ai eu un problème similaire, et pour moi c'était un bug/problème avec la fusion manifeste. J'ai découvert que FirebaseInitProvider
n'a pas été injecté dans le fichier manifeste final à cause de tools:node="replace"
dans le fichier manifeste de mon application. Donc, essayez de supprimer cette balise XML et FirebaseInitProvider
sera injecté et Firebase peut être initialisé correctement.
@jmodrako answer a résolu mon problème ... tools:node="replace"
à tools:node="merge"
Explained ... sur AndroidManifest.xml
De
<application
...
tools:node="replace">
À
<application
...
tools:node="merge">
Fusionner les problèmes avec les thèmes de la bibliothèque? Problèmes de construction résolus avec tools:replace="Android:theme"
Fichier 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 fichier:
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'
Déplacez votre initialisation Firebase dans la classe onCreate of Application . Si vous avez également activé la persistance hors connexion, FirebaseDatabase.getInstance (). SetPersistenceEnabled (true) doit précéder toute autre initialisation.
Remplacez l'action de génération (GoogleServicesJson) par le nom de fichier Google-Services.Json.
Dans votre dépendance, ajoutez simplement:
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'
}
appliquer plugin: 'com.google.gms.google-services'
Studio Android
Ça marche pour moi ok.
Dans mon cas, je n’initialisais pas Firebase au démarrage de l’application, j’ai dû procéder comme suit pour le résoudre.
@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);
}
}
Enregistrez votre application dans Firebase et copiez le fichier google-services.json dans votre projet racine.
Appliquez classpath 'com.google.gms:google-services:3.1.0
à votre racine build.gradle.
Appliquez apply plugin: 'com.google.gms.google-services
à votre projet.