Using Google Analytics To Track Fragments

匿名 (未验证) 提交于 2019-12-03 02:29:01

问题:

Just need to know the proper way to implement Google analytics to track when a user is on a fragment in real time this is what is do now

@Override public void onResume() {     super.onResume();     Tracker myTracker = parentActivity.getTracker();     myTracker.setCustomMetric(1, (long) 1);                    myTracker.sendView("Music View");  } 

the getTracker class is in my main activity and just returns the instance of tracker in the main activity

Any help would be much appreciated!

回答1:

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")

UA-XXXXXXXX-Xtruefalse

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



回答2:

This an example using FragmentActivity and fragments:

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

    XX-xxxxxxxx-xtruetrueFragment activity20
  2. In your FragmentActivity class, add this:

    @Override protected void onStart() {     super.onStart();     EasyTracker.getInstance().setContext(this.getBaseContext());     EasyTracker.getInstance().activityStart(this); // Add this method }  @Override protected 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);     }  } 


回答3:

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



回答4:

Another approach for V3 (since onResume() is tied to the Activity and not the Fragment. This works well when the parent/child relationships are well-known.

Parent Fragment sends initial event onStart():

public class ParentFragment extends Fragment {     private Tracker mTracker;      @Override     public void onActivityCreated(Bundle savedInstanceState) {         super.onActivityCreated(savedInstanceState);          mTracker = EasyTracker.getInstance(getActivity());     }      @Override     public void onStart() {         super.onStart();          mTracker.set(Fields.SCREEN_NAME, "Parent Fragment");         mTracker.send(MapBuilder.createAppView().build());     } } 

Child Fragment overrides both onStart() and onStop() :

public class ChildFragment extends Fragment {     private Tracker mTracker;      @Override     public void onActivityCreated(Bundle savedInstanceState) {         super.onActivityCreated(savedInstanceState);          mTracker = EasyTracker.getInstance(getActivity());     }      @Override     public void onStart() {         super.onStart();          mTracker.set(Fields.SCREEN_NAME, "Child Fragment");         mTracker.send(MapBuilder.createAppView().build());     }      @Override     public void onStop() {         super.onStop();          mTracker.set(Fields.SCREEN_NAME, "Parent Fragment");         mTracker.send(MapBuilder.createAppView().build());     } } 


回答5:

Tiago's version can't be used in the new goole analytics v4. Instead, use this code from Google's docs

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());       }     });   } } 


回答6:

with android google analytics v4

i tried this and it worked

refering this https://developers.google.com/analytics/devguides/collection/android/v4/events

import java.net.URLEncoder; import android.os.Bundle; import android.support.v4.app.Fragment; import android.util.Xml.Encoding; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.webkit.WebView; import android.widget.ScrollView; import android.widget.TextView; import com.Blog.gkgyan.AnalyticsSampleApp.TrackerName; import com.Blog.gkgyan.parser.RSSFeed; import com.google.android.gms.ads.AdRequest; import com.google.android.gms.ads.AdView; import com.google.android.gms.analytics.GoogleAnalytics; import com.google.android.gms.analytics.HitBuilders; import com.google.android.gms.analytics.Tracker; public class DetailFragment extends Fragment {     private int fPos;     RSSFeed fFeed;     String country;      @Override     public void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         fFeed = (RSSFeed)getArguments().getSerializable("feed");         fPos = getArguments().getInt("pos");         Tracker t = ((AnalyticsSampleApp) getActivity().getApplication()).getTracker(                 TrackerName.APP_TRACKER);             // Build and send an Event.             t.send(new HitBuilders.EventBuilder()                 .setCategory(fFeed.getItem(fPos).getTitle())                 .setAction("viewpager click")                 .setLabel("viewpager label")                 .build());     }      @Override     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {     View view = inflater.inflate(R.layout.detail_fragment, container, false);       // Initializr views         TextView title = (TextView)view.findViewById(R.id.title);         WebView desc = (WebView)view.findViewById(R.id.desc);         // Enable the vertical fading edge (by default it is disabled)         ScrollView sv = (ScrollView)view.findViewById(R.id.sv);         sv.setVerticalFadingEdgeEnabled(true);          // Set the views         desc.getSettings().setJavaScriptEnabled(true);         title.setText(fFeed.getItem(fPos).getTitle());          country = "" + "

" + fFeed.getItem(fPos).getDescription()+"

"+""; //desc.loadData( country, "text/html", "UTF-8"); //desc.loadData( country, "text/html; charset=utf-8", "utf-8"); desc.loadData( URLEncoder.encode(country).replaceAll("\\+", " "), "text/html", Encoding.UTF_8.toString()); return view; } }


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!