android - logo - ¿Cómo debo rastrear Fragmentos en Google Analytics v4?
google analytics logo (2)
Con el lanzamiento de Google Analytics v4 (Android), ¿cuál es la forma recomendada de realizar un seguimiento de las vistas de Fragmento? ¿Esta solución sigue siendo la forma recomendada: https://stackoverflow.com/a/19284014/413254 ?
La muestra en los documentos ( https://developers.google.com/analytics/devguides/collection/android/v4/#analytics-xml ) tiene la siguiente configuración:
global_tracker.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<integer name="ga_sessionTimeout">300</integer>
<bool name="ga_autoActivityTracking">true</bool>
<screenName name="com.google.android.gms.analytics.samples.mobileplayground.ScreenviewFragment">
AnalyticsSampleApp ScreenView
</screenName>
<screenName name="com.google.android.gms.analytics.samples.mobileplayground.EcommerceFragment">
AnalyticsSampleApp EcommerceView
</screenName>
<!-- The following value should be replaced with correct property id. -->
<string name="ga_trackingId">UA-XXXXXXX-Y</string>
</resources>
Parece que esta configuración está habilitando el seguimiento automático de Actividades, pero ¿asumo que esto no funciona para los Fragmentos? En este ejemplo, asumo que el evento de pantalla "AnalyticsSampleApp ScreenView" se enviará si t.setScreenName(path);
se llama y la ruta es "com.google.android.gms.analytics.samples.mobileplayground.EcommerceFragment"
?
Sí, tendrá que usar la solución descrita en el enlace que publicó. La razón principal de esto es que la vida útil de los fragmentos no es tan sencilla como la de las Actividades. Android no proporciona devoluciones de llamada para el ciclo de vida del fragmento.
Lo que debe hacer es establecer el identificador del fragmento como el nombre de la pantalla cada vez que se muestra el fragmento. En la aplicación de ejemplo, si observa MobilePlayground.java
, verá onTabSelected
. En la aplicación de ejemplo, esta función se llama siempre que cambia la pantalla. Ese sería un buen lugar para configurar la pantalla y posiblemente enviar screenview
appview
screenview
/ vista de appview
.
Déjame saber si quieres ejemplos más detallados.
Utilice este código de la documentación de Google .
package com.google.android.apps.mobileplayground;
import com.google.android.apps.mobileplayground.AnalyticsSampleApp.TrackerName;
import com.google.android.gms.analytics.GoogleAnalytics;
import com.google.android.gms.analytics.HitBuilders;
import com.google.android.gms.analytics.Tracker;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
/**
* Class to exercise Event hits.
*/
public class EventFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
View view = inflater.inflate(R.layout.event, container, false);
setupEvent(view, R.id.video1Play, R.string.videoCategory, R.string.videoPlay, R.string.video1);
setupEvent(view, R.id.video1Pause, R.string.videoCategory, R.string.videoPause,
R.string.video1);
setupEvent(view, R.id.video2Play, R.string.videoCategory, R.string.videoPlay, R.string.video2);
setupEvent(view, R.id.video2Pause, R.string.videoCategory, R.string.videoPause,
R.string.video2);
setupEvent(view, R.id.book1View, R.string.bookCategory, R.string.bookView, R.string.book1);
setupEvent(view, R.id.book1Share, R.string.bookCategory, R.string.bookShare, R.string.book1);
final Button dispatchButton = (Button) view.findViewById(R.id.eventDispatch);
dispatchButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// Manually start a dispatch (Unnecessary if the tracker has a dispatch interval)
GoogleAnalytics.getInstance(getActivity().getApplicationContext()).dispatchLocalHits();
}
});
return view;
}
private void setupEvent(View v, int buttonId, final int categoryId, final int actionId,
final int labelId) {
final Button pageviewButton = (Button) v.findViewById(buttonId);
pageviewButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// Get tracker.
Tracker t = ((AnalyticsSampleApp) getActivity().getApplication()).getTracker(
TrackerName.APP_TRACKER);
// Build and send an Event.
t.send(new HitBuilders.EventBuilder()
.setCategory(getString(categoryId))
.setAction(getString(actionId))
.setLabel(getString(labelId))
.build());
}
});
}
}