Using Google Analytics To Track Fragments Using Google Analytics To Track Fragments android android

Using Google Analytics To Track Fragments


Mochini's answer uses Google Analytics V2. Bellow you can see how to do it on V4 and V3:

  • V4:

Application:

public class YourApplication extends Application{    public synchronized Tracker getTracker() {        try {            final GoogleAnalytics googleAnalytics = GoogleAnalytics.getInstance(this);            return googleAnalytics.newTracker(R.xml.analytics);        }catch(final Exception e){            Log.e(TAG, "Failed to initialize Google Analytics V4");        }        return null;    }}

res/xml/analytics.xml (you can name it anything, it does not need to be called "analytics")

<?xml version="1.0" encoding="utf-8" ?><resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="TypographyDashes">  <!--Replace placeholder ID with your tracking ID-->  <string name="ga_trackingId">UA-XXXXXXXX-X</string>  <!--Enable automatic activity tracking-->  <bool name="ga_autoActivityTracking">true</bool>  <!--Disable automatic exception tracking-->  <bool name="ga_reportUncaughtExceptions">false</bool></resources>

build.gradle:

compile 'com.google.android.gms:play-services:7.3.0'

Fragment superclass:

public abstract class TrackedFragment extends Fragment{    @Override    public void onResume() {        super.onResume();        final Tracker tracker = yourApplicationInstance.getTracker();        if(tracker != null){            tracker.setScreenName(getClass().getSimpleName());            tracker.send(new HitBuilders.ScreenViewBuilder().build());        }    }}
  • V3

    import android.os.Bundle;import android.support.v4.app.Fragment;import com.google.analytics.tracking.android.EasyTracker;import com.google.analytics.tracking.android.Fields;import com.google.analytics.tracking.android.MapBuilder;import com.google.analytics.tracking.android.Tracker;public abstract class TrackedFragment extends Fragment{     private Tracker tracker;     @Override     public void onActivityCreated(final Bundle savedInstanceState) {         super.onActivityCreated(savedInstanceState);         this.tracker = EasyTracker.getInstance(getActivity());     }     @Override     public void onResume() {         super.onResume();         this.tracker.set(Fields.SCREEN_NAME, getClass().getSimpleName());         this.tracker.send( MapBuilder.createAppView().build() );     }}

Source: https://developers.google.com/analytics/devguides/collection/android/v3/migration


This an example using FragmentActivity and fragments:

  1. Create XML file in value folder (values/analytics.xml):

    <?xml version="1.0" encoding="utf-8"?><resources>    <!-- Replace placeholder ID with your tracking ID -->    <string name="ga_trackingId">XX-xxxxxxxx-x</string>    <!-- Enable Activity tracking -->    <bool name="ga_autoActivityTracking">true</bool>    <!-- Enable debug -->    <bool name="ga_debug">true</bool>    <!-- The screen names that will appear in your reporting -->    <string name="com.example.myapp.FragmentActivity">Fragment activity</string>    <!--        The inverval of time after all the collected data        should be sent to the server, in seconds.    -->    <integer name="ga_dispatchPeriod">20</integer></resources>
  2. In your FragmentActivity class, add this:

    @Overrideprotected void onStart() {    super.onStart();    EasyTracker.getInstance().setContext(this.getBaseContext());    EasyTracker.getInstance().activityStart(this); // Add this method}@Overrideprotected void onStop() {    super.onStop();    EasyTracker.getInstance().activityStop(this); // Add this method}
  3. Create new class in your package: TrackedFragment.java

    public class TrackedFragment extends Fragment {    private Tracker tracker;    private String activityId;    private String fragmentId;    @Override    public void onCreate(final Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        EasyTracker.getInstance().setContext(getActivity().getApplicationContext());        this.tracker = EasyTracker.getTracker();        this.fragmentId = getClass().getSimpleName();        this.activityId = getActivity().getClass().getSimpleName();    }    @Override    public void onResume() {        super.onResume();        this.tracker.sendView("/" + this.activityId + "/" + this.fragmentId);    }}
  4. Finally, your fragment should extend from TrackedFragment like:

    public class NewFragment extends TrackedFragment {    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {        return inflater.inflate(R.layout.newfragment, null);    }}


Tracking methods section suggests that you just need to call EasyTracker.getInstance().setContext(getActivity()); first, then you can use the tracker in "other classes".

manual screen tracking section suggests that you can track a Fragment view with myTracker.sendView("Home Screen");