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:
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>
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}
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); }}
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");