Saltar al contenido

Cómo rastrear fragmentos de Android usando Firebase Analytics

Basta ya de investigar por otros sitios porque llegaste al lugar perfecto, tenemos la respuesta que buscas pero sin complicarte.

Solución:

ACTUALIZAR

Desde el setCurrentScreen está en desuso, puede usar logEvent método

Bundle bundle = new Bundle();
bundle.putString(FirebaseAnalytics.Param.SCREEN_NAME, fragment.getClass().getSimpleName());
bundle.putString(FirebaseAnalytics.Param.SCREEN_CLASS, fragment.getClass().getSimpleName());
mFirebaseAnalytics.logEvent(FirebaseAnalytics.Event.SCREEN_VIEW, bundle);

He usado los siguientes comandos adb para verificar si todo funciona bien.

adb shell setprop log.tag.FA VERBOSE
adb shell setprop log.tag.FA-SVC VERBOSE
adb logcat -v time -s FA FA-SVC

Una vez que hagas eso, verás screen_view eventos en el logcat. Como éste:

10-15 13: 14: 13.744 V / FA-SVC (20323): Evento de registro: origen = aplicación, nombre =screen_view(_vs), params = Paquete[ga_event_origin(_o)=app,
engagement_time_msec(_et)=31600,
ga_previous_class(_pc)=ContentsFragment,
ga_previous_id(_pi)=8077407744361472421,
ga_previous_screen(_pn)=ContentsFragment,
ga_screen_class(_sc)=TestFragment,
ga_screen_id(_si)=8077407744361472423, ga_screen(_sn)=TestFragment]

Respuesta anterior

Existe un método especial para configurar una pantalla actual: setCurrentScreen

Lo usé de la siguiente manera

mFirebaseAnalytics.setCurrentScreen(this, fragment.getClass().getSimpleName(), fragment.getClass().getSimpleName());

Una vez que se llama al método, aparece el siguiente mensaje en LogCat

Evento de registro (FE): screen_view (_vs), Bundle[firebase_event_origin(_o)=auto,
firebase_previous_class(_pc)=HomeFragment,
firebase_previous_id(_pi)=4121566113087629222,
firebase_previous_screen(_pn)=HomeFragment,
firebase_screen_class(_sc)=StatisticsFragment,
firebase_screen_id(_si)=4121566113087629223,
firebase_screen(_sn)=StatisticsFragment]

El siguiente evento aparece en el seguimiento automático de la actividad:

Evento de registro (FE): screen_view (_vs), Bundle[firebase_event_origin(_o)=auto,
firebase_previous_class(_pc)=StatisticsFragment,
firebase_previous_id(_pi)=4121566113087629223,
firebase_previous_screen(_pn)=StatisticsFragment,
firebase_screen_class(_sc)=LoginActivity,
firebase_screen_id(_si)=4121566113087629224]

Como ves, son casi iguales, entonces setCurrentScreen está trabajando.

Puedo ver esas clases en Firebase Console solo al día siguiente. Es normal para Firebase: se necesita tiempo para procesar tales cantidades de datos.

Consola de Firebase

Agregando un poco más de información aquí a la respuesta de Artem Mostyaev. El panel GA / Firebase reflejaba el nombre de la clase en la versión DEV pero no en la versión PROD. El principal culpable aquí es

fragment.getClass().getSimpleName()

que ofuscan el nombre del fragmento en prod. Entonces, GA / Firebase mostraba que el nombre de clase era como (a, b, ah, etc.)

getSimpleName () también es peligroso de usar en otras situaciones.

Más literatura: https://medium.com/@elye.project/the-danger-of-using-class-getsimplename-as-tag-for-fragment-5cdf3a35bfe2

Reglas de Progaurd

-keepnames class com.somepackage.yourclass 

Ya que setCurrentScreen es obsoleto puedes usar firebaseAnalytics.logEvent(FirebaseAnalytics.Event.SCREEN_VIEW, bundle) en lugar de.

Aquí hay una publicación de blog que explica más sobre el seguimiento manual de las pantallas.

Aquí hay un ejemplo:

private fun setCurrentScreen(screenName: String) = firebaseAnalytics?.run 
    val bundle = Bundle()
    bundle.putString(FirebaseAnalytics.Param.SCREEN_NAME, screenName)
    bundle.putString(FirebaseAnalytics.Param.SCREEN_CLASS, [email protected]
) logEvent(FirebaseAnalytics.Event.SCREEN_VIEW, bundle)

Además, si desea realizar un seguimiento de las pantallas automáticamente, puede llamar a esta función en uno de sus BaseFragment métodos de ciclo de vida como onResume. solo tenga en cuenta que es posible que algunos de los fragmentos no tengan que cambiar la pantalla actual, como los que se están creando en un ViewPager, así que he declarado un open val que puedes override para cambiar el comportamiento predeterminado.

aquí está el código en BaseFragment:

protected open val trackScreenView: Boolean = true

override fun onResume() 
    super.onResume()

    if (trackScreenView) setCurrentScreen(this.javaClass.simpleName)

y puede deshabilitarlo anulándolo en su objetivo Fragment:

override val trackScreenView: Boolean = false

Por cierto, si estás usando NavigationUI Componente, actualmente no hay una solución automática para rastrear pantallas, y solo rastrea la actividad única que tiene, por lo que puede evitar los informes automáticos de pantalla de Firebase colocando esto meta-data en el manifiesto de tu aplicación:


    
    
    
    

Reseñas y calificaciones

Te invitamos a confirmar nuestro trabajo ejecutando un comentario o dejando una valoración te damos la bienvenida.

¡Haz clic para puntuar esta entrada!
(Votos: 4 Promedio: 4.3)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *