java - firebasemessagingservice - firebaseapp name default already exists
Cómo comprobar si una aplicación Firebase ya está inicializada en Android (6)
Creo que lo que quieres hacer es revisar la lista de aplicaciones en ejecución antes de inicializar tu aplicación. Cada uno de los SDK tiene un método para obtener esta matriz, en Android es getApps
:
https://firebase.google.com/docs/reference/android/com/google/firebase/FirebaseApp.html
Luego puedes verificar si tu aplicación ya está inicializada.
En mi caso, acabé de verificar la longitud de la matriz (estoy usando javascript / web sdk, así que estoy seguro de que es un poco diferente para Android) e inicializar una aplicación nueva si es 0.
Con lo siguiente, la primera vez que se llama funciona, pero luego falla en las llamadas posteriores con "FirebaseApp name [DEFAULT] ya existe!"
public FirebaseDatabase conn(Context c) {
FirebaseOptions options = new FirebaseOptions.Builder()
.setApiKey("key")
.setDatabaseUrl("url")
.setApplicationId("ID")
.build();
/////I tried Try and Catch with no success//////
FirebaseApp app = FirebaseApp.initializeApp(c, options);
/// for this : FirebaseApp app = FirebaseApp.initializeApp(c, options, "some_app");
//// will fail with "FirebaseApp name some_app already exists!"
return FirebaseDatabase.getInstance(app);
}
Todo lo anterior es un intento de conectarse a una segunda aplicación Firebase.
En la web de firebase, verifica si ya se ha inicializado con:
if (!firebase.apps.length) {
firebase.initializeApp({});
}
Me enfrenté al problema similar, lo resolví de la siguiente manera:
- Cree una var para la aplicación e inicialícela con null
- Tomar referencia de la aplicación durante la inicialización.
- Compruebe antes de inicializarlo de nuevo.
//global variable
var firebaseResumeDownloadAdd = null;
//inside function check before initializing
if(firebaseResumeDownloadAdd==null){
firebaseResumeDownloadAdd =
firebase.initializeApp(functions.config().firebase);
}
Me enfrenté al problema similar. Resolví el siguiente problema eliminando la aplicación ya inicializada.
// Access your firebase app
let app = firebase.app();
// Delete your app.
app.delete(app);
La solución funciona para la web.
Para aquellos que se preguntan cómo hacer lo mismo que la respuesta aceptada, en Android:
if (FirebaseApp.getApps(context).isEmpty()) {
FirebaseApp.initializeApp(context);
}
y en un entorno de prueba instrumentado, use este contexto:
InstrumentationRegistry.getContext()
Puede intentar obtener la instancia de la aplicación Firebase, en su código firebase comprueba si está inicializada, de lo contrario, lanza una IllegalStateException
.
try{
FirebaseApp.getInstance();
}
catch (IllegalStateException e)
{
//Firebase not initialized automatically, do it manually
FirebaseApp.initializeApp(this);
}