tutorial remote integrar configurar android firebase firebase-remote-config

remote - integrar firebase android



FirebaseRemoteConfig.fetch() no activa OnCompleteListener todo el tiempo (4)

Estaba enfrentando el mismo problema y me puse en contacto con el soporte de Firebase. Ellos respondieron lo siguiente:

Actualmente, se ha informado de un error que indica que los servidores onComplete, onSuccess y onFailure no reciben llamadas si fetch () se invoca demasiado pronto. [...] Actualmente hay un trabajo alrededor donde puedes poner fetch () dentro de un postResume. Puedes intentar usar esto mientras tanto antes de que se haya lanzado una solución.

Implementé la solución en consecuencia

protected void onPostResume() { super.onPostResume(); mFirebaseRemoteConfig.fetch(cacheExpiration) .addOnSuccessListener(new OnSuccessListener<Void>() { @Override public void onSuccess(Void aVoid) { Log.d(TAG, "Fetch Succeeded"); // Once the config is successfully fetched it must be activated before newly fetched values are returned. mFirebaseRemoteConfig.activateFetched(); // Do whatever should be done on success } }) .addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception exception) { Log.d(TAG, "Fetch failed"); // Do whatever should be done on failure } }); }

Hasta ahora, parece que su solución propuesta ha resuelto el problema.

ACTUALIZAR:

Acabo de recibir aviso del soporte de Firebase. Según ellos, el problema se resuelve con la última actualización de Google Play Services.

Se ha lanzado una corrección a la configuración remota que no llama a los oyentes después de la recuperación en la actualización más reciente de los servicios de Google Play. Cerraré este caso por el momento. Sin embargo, si sigues teniendo problemas, no dudes en ponerte en contacto con nosotros y avisarme.

Estoy intentando implementar Firebase Remote Config:

override fun onCreate(savedInstanceState: Bundle?) { val configSettings = FirebaseRemoteConfigSettings.Builder().setDeveloperModeEnabled(BuildConfig.DEBUG).build() mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance() mFirebaseRemoteConfig.setConfigSettings(configSettings) mFirebaseRemoteConfig.setDefaults(R.xml.remote_config_defaults) fetchRemoteConfig() } private fun fetchRemoteConfig() { var cacheExpiration = 3600L if (mFirebaseRemoteConfig.info.configSettings.isDeveloperModeEnabled) { cacheExpiration = 0L } mFirebaseRemoteConfig.fetch(cacheExpiration) .addOnCompleteListener { task -> if (task.isSuccessful) { Log.d(TAG, "Remote config fetch succeeded") mFirebaseRemoteConfig.activateFetched() } else { Log.d(TAG, "Remote config fetch failed - ${task.exception?.message}") } setupView() } } private fun setupView() { val text = mFirebaseRemoteConfig.getString("my_text") //... }

Mi problema es que OnCompleteListener no siempre se llama. Si cierro / abro mi aplicación varias veces, setupView () no siempre se activa.

El OnCompleteListener siempre se debe llamar ¿verdad? Incluso si estoy golpeando el caché?

EDITAR: Incluso si desactivo el modo desarrollador, el comportamiento es el mismo. A veces la devolución de llamada se activa, a veces no.


Para aquellos de ustedes que no pueden hacerlo simplemente llamando a fetch () onPostResume (y realmente están dispuestos a hacer que esto funcione mejor), pueden intentar llamar al método fetch dentro de Handler.postDelayed() para retrasar el tiempo de Handler.postDelayed() . Para nuestro equipo, aumentó la posibilidad de que el método fetch funcione correctamente. Por supuesto, esta solución no funciona de manera confiable como llamar a fetch onPostResume.

@Override public void onPostResume() { new Handler().postDelayed(new Runnable() { @Override public void run() { mFirebaseRemoteConfig.fetch(cacheExpiration)... ... } }, 500L); }


Si su dispositivo ejecuta un antiguo servicio de Google Play y una versión incompatible, debería ver en los registros:

GooglePlayServicesUtil: servicios de Google Play desactualizados. Requiere 11020000 pero se encuentra 10930470

Una solución es actualizar los servicios de Google Play de tu dispositivo, pero si no puedes, también puedes simplemente degradar la versión de Firebase para que coincida con la versión esperada (aquí cambia 11.0.2 a 10.9.3). No es ideal, pero sigue siendo una solución si no puede actualizar su dispositivo (por ejemplo, el simulador se está ejecutando 10.9.3 a partir de hoy):

compile ''com.google.firebase:firebase-core:10.2.6'' compile ''com.google.firebase:firebase-messaging:10.2.6'' compile ''com.google.firebase:firebase-config:10.2.6''


ACTUALIZAR la versión 9.2.0 de firebase funciona como uno esperaría y este hack ya no es necesario.

Obtuve este "trabajo" de manera confiable ... pero puede que no te guste mi solución. Para que la recuperación de la configuración ocurra cuando Firebase esté lista, tuve que hacer esto:

FirebaseAuth.getInstance() // I don''t actually want to or need to sign in..(and this actually throws an error for us.. but we ignore it) .signInAnonymously() // when it completes (error or no error) we can do our business .addOnCompleteListener(new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { // do the remote config fetch you were doing before remoteConfig.fetch(...).addOnComplete(...); } });

Esto asegura que los internos de Firebase estén listos para hacer la recuperación inicial de la configuración ... en la primera aplicación abierta, esto parece demorar entre 6 y 10 segundos en mi dispositivo de prueba desastroso (todo incluye la autenticación y la recuperación de configuración). En las siguientes aperturas, todo tarda entre 2 y 5 segundos. Obviamente, todo es arbitrario según el dispositivo / red y YMMV.

Me encantaría saber por qué es necesario. Parece que la configuración remota debería poder gestionar esto internamente y no exponernos esto.

ps necesitará esta dependencia además de la firebase-config

compile ''com.google.firebase:firebase-auth:9.0.1''